diff --git a/config/app_dynamics_agent.yml b/config/app_dynamics_agent.yml
index 3c55e187a..51ac5679b 100644
--- a/config/app_dynamics_agent.yml
+++ b/config/app_dynamics_agent.yml
@@ -15,9 +15,12 @@
# Configuration for the AppDynamics framework
---
-version: +
+version: 24.5.0_36037
repository_root: "{default.repository.root}/appdynamics"
-default_application_name: $(jq -r -n "$VCAP_APPLICATION | .space_name + \":\" + .application_name | @sh")
-default_node_name: $(jq -r -n "\"$APPD_CF_NODE_PREFIX\" + ($VCAP_APPLICATION | .application_name) + \":$CF_INSTANCE_INDEX\" | @sh")
-default_tier_name:
-default_unique_host_name: $(jq -r -n "$VCAP_APPLICATION | .application_id + \":$CF_INSTANCE_INDEX\" | @sh")
+default_application_name: $(jq -r -n "$VCAP_APPLICATION | .space_name + \":\" + .application_name
+ | @sh")
+default_node_name: $(jq -r -n "\"$APPD_CF_NODE_PREFIX\" + ($VCAP_APPLICATION | .application_name)
+ + \":$CF_INSTANCE_INDEX\" | @sh")
+default_tier_name:
+default_unique_host_name: $(jq -r -n "$VCAP_APPLICATION | .application_id + \":$CF_INSTANCE_INDEX\"
+ | @sh")
diff --git a/config/azure_application_insights_agent.yml b/config/azure_application_insights_agent.yml
index 419980133..1a63a7126 100644
--- a/config/azure_application_insights_agent.yml
+++ b/config/azure_application_insights_agent.yml
@@ -15,5 +15,5 @@
# Configuration for the Azure Application Insights framework.
---
-version: 3.+
+version: 3.5.3
repository_root: "{default.repository.root}/azure-application-insights"
diff --git a/config/client_certificate_mapper.yml b/config/client_certificate_mapper.yml
index e32fbedc8..ad9579a0b 100644
--- a/config/client_certificate_mapper.yml
+++ b/config/client_certificate_mapper.yml
@@ -15,7 +15,7 @@
# Container security provider configuration
---
-version: 2.+
+version: 2.0.1
version_lines:
- - 2.+
-repository_root: "{default.repository.root}/client-certificate-mapper"
\ No newline at end of file
+- 2.+
+repository_root: "{default.repository.root}/client-certificate-mapper"
diff --git a/config/container_customizer.yml b/config/container_customizer.yml
index cfa6e00b5..419e92c6c 100644
--- a/config/container_customizer.yml
+++ b/config/container_customizer.yml
@@ -15,5 +15,5 @@
# Configuration for the Container Customizer framework
---
-version: 2.+
+version: 2.6.0_RELEASE
repository_root: "{default.repository.root}/container-customizer"
diff --git a/config/container_security_provider.yml b/config/container_security_provider.yml
index f4d88d84f..29a476e03 100644
--- a/config/container_security_provider.yml
+++ b/config/container_security_provider.yml
@@ -15,7 +15,7 @@
# Container security provider configuration
---
-version: 1.+
+version: 1.20.0_RELEASE
repository_root: "{default.repository.root}/container-security-provider"
key_manager_enabled:
trust_manager_enabled:
diff --git a/config/contrast_security_agent.yml b/config/contrast_security_agent.yml
index 60b5cae8d..d04c9b663 100644
--- a/config/contrast_security_agent.yml
+++ b/config/contrast_security_agent.yml
@@ -15,5 +15,5 @@
# Configuration for the ContrastSecurity framework
---
-version: 6.+
+version: 6.5.3
repository_root: https://download.run.pivotal.io/contrast-security
diff --git a/config/datadog_javaagent.yml b/config/datadog_javaagent.yml
index ba5c97a32..d84236044 100644
--- a/config/datadog_javaagent.yml
+++ b/config/datadog_javaagent.yml
@@ -15,5 +15,5 @@
# Configuration for the Datadog APM Javaagent
---
-version: +
+version: 1.37.1
repository_root: https://raw.githubusercontent.com/datadog/dd-trace-java/cloudfoundry/
diff --git a/config/elastic_apm_agent.yml b/config/elastic_apm_agent.yml
index e9db8ffcf..d27f2566c 100644
--- a/config/elastic_apm_agent.yml
+++ b/config/elastic_apm_agent.yml
@@ -15,5 +15,5 @@
# Configuration for the Elastic Apm Agent framework
---
-version: 1.+
+version: 1.50.0
repository_root: https://raw.githubusercontent.com/elastic/apm-agent-java/master/cloudfoundry
diff --git a/config/google_stackdriver_profiler.yml b/config/google_stackdriver_profiler.yml
index 470051e04..162c9f662 100644
--- a/config/google_stackdriver_profiler.yml
+++ b/config/google_stackdriver_profiler.yml
@@ -15,7 +15,7 @@
# Configuration for the Groovy container
---
-version: 0.+
+version: 0.1.0
repository_root: "{default.repository.root}/google-stackdriver-profiler/{platform}/{architecture}"
application_name:
application_version:
diff --git a/config/groovy.yml b/config/groovy.yml
index bd697ccd6..6032e8962 100644
--- a/config/groovy.yml
+++ b/config/groovy.yml
@@ -15,5 +15,5 @@
# Configuration for the Groovy container
---
-version: 2.5.+
+version: 2.5.23
repository_root: "{default.repository.root}/groovy"
diff --git a/config/introscope_agent.yml b/config/introscope_agent.yml
index 2675cbf30..48e10e941 100644
--- a/config/introscope_agent.yml
+++ b/config/introscope_agent.yml
@@ -15,6 +15,6 @@
# Configuration for the CA Wily framework
---
-version: +
+version: 24.4.2_8
repository_root: https://packages.broadcom.com/artifactory/apm-agents
default_agent_name: $(jq -r -n "$VCAP_APPLICATION | .application_name")
diff --git a/config/jacoco_agent.yml b/config/jacoco_agent.yml
index d26b0bec0..ce157cc1f 100644
--- a/config/jacoco_agent.yml
+++ b/config/jacoco_agent.yml
@@ -15,5 +15,5 @@
# Configuration for the JaCoco Agent framework
---
-version: 0.+
+version: 0.8.12
repository_root: "{default.repository.root}/jacoco"
diff --git a/config/java_cf_env.yml b/config/java_cf_env.yml
index a021138ff..392afc7e2 100644
--- a/config/java_cf_env.yml
+++ b/config/java_cf_env.yml
@@ -17,6 +17,6 @@
# See https://github.com/pivotal-cf/java-cfenv for library information
---
-version: 3.+
+version: 3.1.5
repository_root: "{default.repository.root}/java-cfenv"
enabled: true
diff --git a/config/java_memory_assistant.yml b/config/java_memory_assistant.yml
index 9f4c87493..179f82127 100644
--- a/config/java_memory_assistant.yml
+++ b/config/java_memory_assistant.yml
@@ -15,7 +15,7 @@
---
enabled: false
agent:
- version: 0.+
+ version: 0.5.0
repository_root: https://raw.githubusercontent.com/SAP/java-memory-assistant/repository
heap_dump_folder:
check_interval: 5s
@@ -30,12 +30,11 @@ agent:
eden:
survivor:
old_gen: ">600MB"
- tenured_gen:
- code_heap.non_nmethods:
- code_heap.non_profiled_nmethods:
- code_heap.profiled_nmethods:
-
+ tenured_gen:
+ code_heap.non_nmethods:
+ code_heap.non_profiled_nmethods:
+ code_heap.profiled_nmethods:
clean_up:
- version: 0.+
+ version: 0.1.0
repository_root: https://raw.githubusercontent.com/SAP/java-memory-assistant-tools/repository-cu
max_dump_count: 1
diff --git a/config/jprofiler_profiler.yml b/config/jprofiler_profiler.yml
index d741f2f61..21b203601 100644
--- a/config/jprofiler_profiler.yml
+++ b/config/jprofiler_profiler.yml
@@ -15,7 +15,7 @@
# JMX configuration
---
-version: 13.+
+version: 13.0.7
repository_root: https://download.run.pivotal.io/jprofiler
enabled: false
nowait: true
diff --git a/config/jrebel_agent.yml b/config/jrebel_agent.yml
index fd197b69e..e24d589e8 100644
--- a/config/jrebel_agent.yml
+++ b/config/jrebel_agent.yml
@@ -15,6 +15,6 @@
# Configuration for the JRebel framework
---
-version: +
+version: 2024.3.0
repository_root: https://dl.zeroturnaround.com/jrebel
enabled: true
diff --git a/config/luna_security_provider.yml b/config/luna_security_provider.yml
index e79f7103a..e152912a0 100644
--- a/config/luna_security_provider.yml
+++ b/config/luna_security_provider.yml
@@ -15,7 +15,7 @@
# Configuration for the Luna Security Provider framework
---
-version: 7.+
+version: 7.4.0
repository_root: "{default.repository.root}/luna-security-provider"
ha_logging_enabled: true
logging_enabled: false
diff --git a/config/maria_db_jdbc.yml b/config/maria_db_jdbc.yml
index d13bf8d74..5eed29eba 100644
--- a/config/maria_db_jdbc.yml
+++ b/config/maria_db_jdbc.yml
@@ -15,5 +15,5 @@
# Configuration for the MariaDB JDBC framework
---
-version: 2.+
+version: 2.7.9
repository_root: "{default.repository.root}/mariadb-jdbc"
diff --git a/config/metric_writer.yml b/config/metric_writer.yml
index 7d833ef38..e54218310 100644
--- a/config/metric_writer.yml
+++ b/config/metric_writer.yml
@@ -15,6 +15,6 @@
# Metric Writer configuration
---
-version: 3.+
+version: 3.5.0_RELEASE
repository_root: "{default.repository.root}/metric-writer"
enabled: false
diff --git a/config/new_relic_agent.yml b/config/new_relic_agent.yml
index e431d0be1..e5515f5ff 100644
--- a/config/new_relic_agent.yml
+++ b/config/new_relic_agent.yml
@@ -15,8 +15,8 @@
# Configuration for the New Relic framework
---
-version: +
+version: 8.12.0
repository_root: https://download.run.pivotal.io/new-relic
extensions:
version: 1.+
- repository_root:
+ repository_root:
diff --git a/config/open_jdk_jre.yml b/config/open_jdk_jre.yml
index 8e706e2fb..f0fffc4a0 100644
--- a/config/open_jdk_jre.yml
+++ b/config/open_jdk_jre.yml
@@ -16,19 +16,19 @@
# Configuration for JRE repositories keyed by vendor
---
jre:
- version: 1.8.0_+
+ version: 1.8.0_412
version_lines:
- - 1.8.0_+
- - 11.+
- - 17.+
- - 21.+
+ - 1.8.0_412
+ - 11.0.23_10
+ - 17.0.11_10
+ - 21.0.3_10
repository_root: "{default.repository.root}/openjdk/{platform}/{architecture}"
jvmkill_agent:
- version: 1.+
+ version: 1.17.0_RELEASE
repository_root: "{default.repository.root}/jvmkill/{platform}/{architecture}"
memory_calculator:
- version: 3.+
+ version: 3.13.0_RELEASE
repository_root: "{default.repository.root}/memory-calculator/{platform}/{architecture}"
- class_count:
- headroom:
+ class_count:
+ headroom:
stack_threads: 250
diff --git a/config/open_telemetry_javaagent.yml b/config/open_telemetry_javaagent.yml
index 2e45e5713..b264c45a4 100644
--- a/config/open_telemetry_javaagent.yml
+++ b/config/open_telemetry_javaagent.yml
@@ -15,5 +15,5 @@
# Configuration for the OpenTelemetry Javaagent
---
-version: +
+version: 2.5.0
repository_root: https://raw.githubusercontent.com/open-telemetry/opentelemetry-java-instrumentation/cloudfoundry/
diff --git a/config/postgresql_jdbc.yml b/config/postgresql_jdbc.yml
index 2238a6ba0..5d040d2a4 100644
--- a/config/postgresql_jdbc.yml
+++ b/config/postgresql_jdbc.yml
@@ -15,5 +15,5 @@
# Configuration for the Postgresql JDBC framework
---
-version: 42.+
+version: 42.7.3
repository_root: "{default.repository.root}/postgresql-jdbc"
diff --git a/config/riverbed_appinternals_agent.yml b/config/riverbed_appinternals_agent.yml
index c628c5ba8..e795b3908 100644
--- a/config/riverbed_appinternals_agent.yml
+++ b/config/riverbed_appinternals_agent.yml
@@ -15,6 +15,6 @@
# Configuration for the riverbed appinternals agent framework
---
-version: 11.+
+version: 11.8.5_BL527
repository_root: https://pcf-instrumentation-download.steelcentral.net/
rvbd_moniker: $(jq -r -n "$VCAP_APPLICATION | .application_name")
diff --git a/config/ruby.yml b/config/ruby.yml
index 40287d422..fa95147e9 100644
--- a/config/ruby.yml
+++ b/config/ruby.yml
@@ -15,5 +15,5 @@
# Configuration for Ruby
---
-version: 3.1.+
+version: 3.1.3
repository_root: https://raw.githubusercontent.com/cloudfoundry/ruby-buildpack/master/java-index
diff --git a/config/sealights_agent.yml b/config/sealights_agent.yml
index a75881a85..a15ab6981 100644
--- a/config/sealights_agent.yml
+++ b/config/sealights_agent.yml
@@ -15,9 +15,9 @@
# Configuration for the SeaLights Agent framework
---
-version: +
+version: 4.0.2531
repository_root: https://agents.sealights.co/pcf
-build_session_id:
-lab_id:
-proxy:
+build_session_id:
+lab_id:
+proxy:
auto_upgrade: false
diff --git a/config/sky_walking_agent.yml b/config/sky_walking_agent.yml
index dd8f25892..01aca0361 100644
--- a/config/sky_walking_agent.yml
+++ b/config/sky_walking_agent.yml
@@ -15,6 +15,7 @@
# Configuration for the Sky Walking framework.
---
-version: +
+version: 9.2.0
repository_root: "{default.repository.root}/sky-walking"
-default_application_name: $(jq -r -n "$VCAP_APPLICATION | .space_name + \":\" + .application_name | @sh")
+default_application_name: $(jq -r -n "$VCAP_APPLICATION | .space_name + \":\" + .application_name
+ | @sh")
diff --git a/config/splunk_otel_java_agent.yml b/config/splunk_otel_java_agent.yml
index 7a3824cf6..996ff0fb3 100644
--- a/config/splunk_otel_java_agent.yml
+++ b/config/splunk_otel_java_agent.yml
@@ -16,6 +16,5 @@
# Configuration for the Splunk Distribution of OpenTelemetry Java Instrumentation
# See https://github.com/signalfx/splunk-otel-java for more information
---
-version: +
+version: 2.5.0
repository_root: https://raw.githubusercontent.com/signalfx/splunk-otel-java/main/deployments/cloudfoundry/
-
\ No newline at end of file
diff --git a/config/spring_auto_reconfiguration.yml b/config/spring_auto_reconfiguration.yml
index 14e976bff..26e765240 100644
--- a/config/spring_auto_reconfiguration.yml
+++ b/config/spring_auto_reconfiguration.yml
@@ -17,6 +17,6 @@
# Note that the repository is shared with the Play Auto Reconfiguration framework and should be kept in step to
# avoid conflicts.
---
-version: 2.+
+version: 2.12.0_RELEASE
repository_root: "{default.repository.root}/auto-reconfiguration"
enabled: true
diff --git a/config/spring_boot_cli.yml b/config/spring_boot_cli.yml
index 54d4c8c5b..29f245fca 100644
--- a/config/spring_boot_cli.yml
+++ b/config/spring_boot_cli.yml
@@ -17,5 +17,5 @@
# Note that the repository is shared with the Play Auto Reconfiguration framework and should be kept in step to
# avoid conflicts.
---
-version: 2.+
+version: 2.7.18
repository_root: "{default.repository.root}/spring-boot-cli"
diff --git a/config/takipi_agent.yml b/config/takipi_agent.yml
index dd8407034..6f8c8bf72 100644
--- a/config/takipi_agent.yml
+++ b/config/takipi_agent.yml
@@ -15,7 +15,7 @@
# Configuration for the Takipi framework
---
-version: 4.+
+version: 4.73.3
repository_root: https://get.takipi.com/cloudfoundry
node_name_prefix: node
application_name:
diff --git a/config/tomcat.yml b/config/tomcat.yml
index ac2df4789..a8f7d56d5 100644
--- a/config/tomcat.yml
+++ b/config/tomcat.yml
@@ -16,10 +16,10 @@
# Configuration for the Tomcat container
---
tomcat:
- version: 9.+
+ version: 9.0.90
version_lines:
- - 9.+
- - 10.1.+
+ - 9.0.90
+ - 10.1.25
repository_root: "{default.repository.root}/tomcat"
context_path:
external_configuration_enabled: false
@@ -27,23 +27,21 @@ external_configuration:
version: 1.+
repository_root:
lifecycle_support:
- version: 3.+
+ version: 3.4.0_RELEASE
repository_root: "{default.repository.root}/tomcat-lifecycle-support"
logging_support:
- version: 3.+
+ version: 3.4.0_RELEASE
repository_root: "{default.repository.root}/tomcat-logging-support"
access_logging_support:
- version: 3.+
+ version: 3.4.0_RELEASE
repository_root: "{default.repository.root}/tomcat-access-logging-support"
access_logging: disabled
redis_store:
- version: 1.+
+ version: 1.3.6_RELEASE
repository_root: "{default.repository.root}/redis-store"
database: 0
timeout: 2000
connection_pool_size: 2
geode_store:
- # The version of Geode Store must be less than or equal to your Tanzu Gemfire for VMs version to ensure compatibility.
- # The Geode Store version is pinned to 1.12.4 to be compatible with the most commonly used versions of Tanzu Gemfire for VMs.
version: 1.14.9
repository_root: https://java-buildpack-tomcat-gemfire-store.s3-us-west-2.amazonaws.com
diff --git a/config/version.yml b/config/version.yml
new file mode 100644
index 000000000..088e07c74
--- /dev/null
+++ b/config/version.yml
@@ -0,0 +1,2 @@
+---
+version: v4.71.0
diff --git a/config/your_kit_profiler.yml b/config/your_kit_profiler.yml
index 261bdbda9..98b84d788 100644
--- a/config/your_kit_profiler.yml
+++ b/config/your_kit_profiler.yml
@@ -15,7 +15,7 @@
# JMX configuration
---
-version: +
+version: 2024.3.157
repository_root: https://download.run.pivotal.io/your-kit/{platform}/{architecture}
enabled: false
port: 10001
diff --git a/vendor/bundle/ruby/3.1.0/bin/htmldiff b/vendor/bundle/ruby/3.1.0/bin/htmldiff
new file mode 100755
index 000000000..a91f4b64b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/htmldiff
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'diff-lcs' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('diff-lcs', 'htmldiff', version)
+else
+gem "diff-lcs", version
+load Gem.bin_path("diff-lcs", "htmldiff", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/bin/ldiff b/vendor/bundle/ruby/3.1.0/bin/ldiff
new file mode 100755
index 000000000..b31792084
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/ldiff
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'diff-lcs' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('diff-lcs', 'ldiff', version)
+else
+gem "diff-lcs", version
+load Gem.bin_path("diff-lcs", "ldiff", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/bin/rake b/vendor/bundle/ruby/3.1.0/bin/rake
new file mode 100755
index 000000000..3a26cbd4a
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/rake
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'rake' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('rake', 'rake', version)
+else
+gem "rake", version
+load Gem.bin_path("rake", "rake", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/bin/redcarpet b/vendor/bundle/ruby/3.1.0/bin/redcarpet
new file mode 100755
index 000000000..788edd180
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/redcarpet
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'redcarpet' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('redcarpet', 'redcarpet', version)
+else
+gem "redcarpet", version
+load Gem.bin_path("redcarpet", "redcarpet", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/bin/rspec b/vendor/bundle/ruby/3.1.0/bin/rspec
new file mode 100755
index 000000000..d2cafd0e5
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/rspec
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'rspec-core' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('rspec-core', 'rspec', version)
+else
+gem "rspec-core", version
+load Gem.bin_path("rspec-core", "rspec", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/bin/rubocop b/vendor/bundle/ruby/3.1.0/bin/rubocop
new file mode 100755
index 000000000..9115ca0ba
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/rubocop
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'rubocop' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('rubocop', 'rubocop', version)
+else
+gem "rubocop", version
+load Gem.bin_path("rubocop", "rubocop", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/bin/ruby-parse b/vendor/bundle/ruby/3.1.0/bin/ruby-parse
new file mode 100755
index 000000000..4cbe6e804
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/ruby-parse
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'parser' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('parser', 'ruby-parse', version)
+else
+gem "parser", version
+load Gem.bin_path("parser", "ruby-parse", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/bin/ruby-rewrite b/vendor/bundle/ruby/3.1.0/bin/ruby-rewrite
new file mode 100755
index 000000000..00c71af8f
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/ruby-rewrite
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'parser' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('parser', 'ruby-rewrite', version)
+else
+gem "parser", version
+load Gem.bin_path("parser", "ruby-rewrite", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/bin/yard b/vendor/bundle/ruby/3.1.0/bin/yard
new file mode 100755
index 000000000..20f711e52
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/yard
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'yard' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('yard', 'yard', version)
+else
+gem "yard", version
+load Gem.bin_path("yard", "yard", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/bin/yardoc b/vendor/bundle/ruby/3.1.0/bin/yardoc
new file mode 100755
index 000000000..242937329
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/yardoc
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'yard' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('yard', 'yardoc', version)
+else
+gem "yard", version
+load Gem.bin_path("yard", "yardoc", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/bin/yri b/vendor/bundle/ruby/3.1.0/bin/yri
new file mode 100755
index 000000000..4c3d5ce59
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/bin/yri
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+#
+# This file was generated by RubyGems.
+#
+# The application 'yard' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+require 'rubygems'
+
+Gem.use_gemdeps
+
+version = ">= 0.a"
+
+str = ARGV.first
+if str
+ str = str.b[/\A_(.*)_\z/, 1]
+ if str and Gem::Version.correct?(str)
+ version = str
+ ARGV.shift
+ end
+end
+
+if Gem.respond_to?(:activate_bin_path)
+load Gem.activate_bin_path('yard', 'yri', version)
+else
+gem "yard", version
+load Gem.bin_path("yard", "yri", version)
+end
diff --git a/vendor/bundle/ruby/3.1.0/cache/addressable-2.8.0.gem b/vendor/bundle/ruby/3.1.0/cache/addressable-2.8.0.gem
new file mode 100644
index 000000000..1e41e1cd0
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/addressable-2.8.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/ast-2.4.2.gem b/vendor/bundle/ruby/3.1.0/cache/ast-2.4.2.gem
new file mode 100644
index 000000000..abe164365
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/ast-2.4.2.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/crack-0.4.5.gem b/vendor/bundle/ruby/3.1.0/cache/crack-0.4.5.gem
new file mode 100644
index 000000000..d622be1d7
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/crack-0.4.5.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/diff-lcs-1.5.0.gem b/vendor/bundle/ruby/3.1.0/cache/diff-lcs-1.5.0.gem
new file mode 100644
index 000000000..3a2585203
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/diff-lcs-1.5.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/hashdiff-1.0.1.gem b/vendor/bundle/ruby/3.1.0/cache/hashdiff-1.0.1.gem
new file mode 100644
index 000000000..4377d553e
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/hashdiff-1.0.1.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/parallel-1.22.1.gem b/vendor/bundle/ruby/3.1.0/cache/parallel-1.22.1.gem
new file mode 100644
index 000000000..5208c791b
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/parallel-1.22.1.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/parser-3.1.2.0.gem b/vendor/bundle/ruby/3.1.0/cache/parser-3.1.2.0.gem
new file mode 100644
index 000000000..d2ce30ac2
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/parser-3.1.2.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/public_suffix-4.0.7.gem b/vendor/bundle/ruby/3.1.0/cache/public_suffix-4.0.7.gem
new file mode 100644
index 000000000..18c4dfa5b
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/public_suffix-4.0.7.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rainbow-3.1.1.gem b/vendor/bundle/ruby/3.1.0/cache/rainbow-3.1.1.gem
new file mode 100644
index 000000000..863181a2e
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rainbow-3.1.1.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rake-13.0.6.gem b/vendor/bundle/ruby/3.1.0/cache/rake-13.0.6.gem
new file mode 100644
index 000000000..19ae80283
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rake-13.0.6.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/redcarpet-3.5.1.gem b/vendor/bundle/ruby/3.1.0/cache/redcarpet-3.5.1.gem
new file mode 100644
index 000000000..f510fa350
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/redcarpet-3.5.1.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/regexp_parser-2.3.1.gem b/vendor/bundle/ruby/3.1.0/cache/regexp_parser-2.3.1.gem
new file mode 100644
index 000000000..89a758122
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/regexp_parser-2.3.1.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rexml-3.2.5.gem b/vendor/bundle/ruby/3.1.0/cache/rexml-3.2.5.gem
new file mode 100644
index 000000000..5680fec4c
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rexml-3.2.5.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rspec-3.11.0.gem b/vendor/bundle/ruby/3.1.0/cache/rspec-3.11.0.gem
new file mode 100644
index 000000000..2073e5bed
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rspec-3.11.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rspec-core-3.11.0.gem b/vendor/bundle/ruby/3.1.0/cache/rspec-core-3.11.0.gem
new file mode 100644
index 000000000..79cf601fa
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rspec-core-3.11.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rspec-expectations-3.11.0.gem b/vendor/bundle/ruby/3.1.0/cache/rspec-expectations-3.11.0.gem
new file mode 100644
index 000000000..1e84c06c1
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rspec-expectations-3.11.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rspec-mocks-3.11.1.gem b/vendor/bundle/ruby/3.1.0/cache/rspec-mocks-3.11.1.gem
new file mode 100644
index 000000000..4ca8fc101
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rspec-mocks-3.11.1.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rspec-support-3.11.0.gem b/vendor/bundle/ruby/3.1.0/cache/rspec-support-3.11.0.gem
new file mode 100644
index 000000000..0a210569d
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rspec-support-3.11.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rubocop-1.28.2.gem b/vendor/bundle/ruby/3.1.0/cache/rubocop-1.28.2.gem
new file mode 100644
index 000000000..4eef195ed
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rubocop-1.28.2.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rubocop-ast-1.17.0.gem b/vendor/bundle/ruby/3.1.0/cache/rubocop-ast-1.17.0.gem
new file mode 100644
index 000000000..48a86cb79
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rubocop-ast-1.17.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rubocop-rspec-2.10.0.gem b/vendor/bundle/ruby/3.1.0/cache/rubocop-rspec-2.10.0.gem
new file mode 100644
index 000000000..7f32b55af
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rubocop-rspec-2.10.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/ruby-progressbar-1.11.0.gem b/vendor/bundle/ruby/3.1.0/cache/ruby-progressbar-1.11.0.gem
new file mode 100644
index 000000000..a9d84e50b
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/ruby-progressbar-1.11.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/rubyzip-2.3.2.gem b/vendor/bundle/ruby/3.1.0/cache/rubyzip-2.3.2.gem
new file mode 100644
index 000000000..36fdea607
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/rubyzip-2.3.2.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/tee-1.0.0.gem b/vendor/bundle/ruby/3.1.0/cache/tee-1.0.0.gem
new file mode 100644
index 000000000..06f6fa721
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/tee-1.0.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/terminal-table-3.0.2.gem b/vendor/bundle/ruby/3.1.0/cache/terminal-table-3.0.2.gem
new file mode 100644
index 000000000..cab512cfd
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/terminal-table-3.0.2.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/unicode-display_width-2.1.0.gem b/vendor/bundle/ruby/3.1.0/cache/unicode-display_width-2.1.0.gem
new file mode 100644
index 000000000..bec8f2a7c
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/unicode-display_width-2.1.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/webmock-3.14.0.gem b/vendor/bundle/ruby/3.1.0/cache/webmock-3.14.0.gem
new file mode 100644
index 000000000..2db2e0457
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/webmock-3.14.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/webrick-1.7.0.gem b/vendor/bundle/ruby/3.1.0/cache/webrick-1.7.0.gem
new file mode 100644
index 000000000..127b8368b
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/webrick-1.7.0.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/cache/yard-0.9.27.gem b/vendor/bundle/ruby/3.1.0/cache/yard-0.9.27.gem
new file mode 100644
index 000000000..9e9bff1b8
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/cache/yard-0.9.27.gem differ
diff --git a/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/gem.build_complete b/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/gem.build_complete
new file mode 100644
index 000000000..e69de29bb
diff --git a/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/gem_make.out b/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/gem_make.out
new file mode 100644
index 000000000..3dad54ae6
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/gem_make.out
@@ -0,0 +1,116 @@
+current directory: /home/runner/work/java-buildpack-release/java-buildpack-release/java-buildpack/vendor/bundle/ruby/3.1.0/gems/redcarpet-3.5.1/ext/redcarpet
+/opt/hostedtoolcache/Ruby/3.1.6/x64/bin/ruby -I /opt/hostedtoolcache/Ruby/3.1.6/x64/lib/ruby/3.1.0 extconf.rb
+creating Makefile
+
+current directory: /home/runner/work/java-buildpack-release/java-buildpack-release/java-buildpack/vendor/bundle/ruby/3.1.0/gems/redcarpet-3.5.1/ext/redcarpet
+make DESTDIR\= sitearchdir\=./.gem.20240717-1584-9okv0z sitelibdir\=./.gem.20240717-1584-9okv0z clean
+
+current directory: /home/runner/work/java-buildpack-release/java-buildpack-release/java-buildpack/vendor/bundle/ruby/3.1.0/gems/redcarpet-3.5.1/ext/redcarpet
+make DESTDIR\= sitearchdir\=./.gem.20240717-1584-9okv0z sitelibdir\=./.gem.20240717-1584-9okv0z
+compiling autolink.c
+compiling buffer.c
+buffer.c: In function ‘bufcstr’:
+buffer.c:111:52: warning: passing argument 1 of ‘bufgrow’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
+ 111 | if (buf->size + 1 <= buf->asize || bufgrow(buf, buf->size + 1) == BUF_OK) {
+ | ^~~
+buffer.c:60:21: note: expected ‘struct buf *’ but argument is of type ‘const struct buf *’
+ 60 | bufgrow(struct buf *buf, size_t neosz)
+ | ~~~~~~~~~~~~^~~
+buffer.c: At top level:
+cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
+cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
+cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
+compiling houdini_href_e.c
+compiling houdini_html_e.c
+compiling html.c
+compiling html_smartypants.c
+html_smartypants.c: In function ‘squote_len’:
+html_smartypants.c:104:46: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
+ 104 | static char* single_quote_list[] = { "'", "'", "'", "'", NULL };
+ | ^~~
+html_smartypants.c:104:51: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
+ 104 | static char* single_quote_list[] = { "'", "'", "'", "'", NULL };
+ | ^~~~~~~
+html_smartypants.c:104:60: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
+ 104 | static char* single_quote_list[] = { "'", "'", "'", "'", NULL };
+ | ^~~~~~~~
+html_smartypants.c:104:70: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
+ 104 | static char* single_quote_list[] = { "'", "'", "'", "'", NULL };
+ | ^~~~~~~~
+html_smartypants.c: In function ‘smartypants_squote’:
+html_smartypants.c:149:51: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
+ 149 | uint8_t next_char = (size > 1+next_squote_len) ? text[1+next_squote_len] : 0;
+ | ^
+html_smartypants.c: In function ‘smartypants_cb__ltag’:
+html_smartypants.c:385:55: warning: pointer targets in passing argument 2 of ‘strncmp’ differ in signedness [-Wpointer-sign]
+ 385 | if (next_to_closing_a && strncmp("'", text+(i+1), 5) == 0) {
+ | ~~~~^~~~~~
+ | |
+ | const uint8_t * {aka const unsigned char *}
+In file included from html_smartypants.c:26:
+/usr/include/string.h:159:51: note: expected ‘const char *’ but argument is of type ‘const uint8_t *’ {aka ‘const unsigned char *’}
+ 159 | extern int strncmp (const char *__s1, const char *__s2, size_t __n)
+ | ~~~~~~~~~~~~^~~~
+html_smartypants.c: At top level:
+cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
+cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
+cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
+compiling markdown.c
+In file included from markdown.c:46:
+html_blocks.h: In function ‘hash_block_tag’:
+html_blocks.h:91:1: warning: old-style function definition [-Wold-style-definition]
+ 91 | hash_block_tag (str, len)
+ | ^~~~~~~~~~~~~~
+html_blocks.h: In function ‘find_block_tag’:
+html_blocks.h:139:1: warning: old-style function definition [-Wold-style-definition]
+ 139 | find_block_tag (str, len)
+ | ^~~~~~~~~~~~~~
+markdown.c: In function ‘char_link’:
+markdown.c:1094:33: warning: this ‘else’ clause does not guard... [-Wmisleading-indentation]
+ 1094 | else nb_p--; i++;
+ | ^~~~
+markdown.c:1094:46: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘else’
+ 1094 | else nb_p--; i++;
+ | ^
+markdown.c: In function ‘sd_markdown_render’:
+markdown.c:2836:66: warning: passing argument 1 of ‘is_codefence’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
+ 2836 | if (codefences_enabled && (is_codefence(document + beg, doc_size - beg, NULL) != 0))
+ | ~~~~~~~~~^~~~~
+markdown.c:1389:23: note: expected ‘uint8_t *’ {aka ‘unsigned char *’} but argument is of type ‘const uint8_t *’ {aka ‘const unsigned char *’}
+ 1389 | is_codefence(uint8_t *data, size_t size, struct buf *syntax)
+ | ~~~~~~~~~^~~~
+markdown.c: At top level:
+markdown.c:94:15: warning: ‘char_underline’ declared ‘static’ but never defined [-Wunused-function]
+ 94 | static size_t char_underline(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size);
+ | ^~~~~~~~~~~~~~
+cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
+cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
+cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
+compiling rc_markdown.c
+rc_markdown.c: In function ‘Init_redcarpet’:
+rc_markdown.c:174:6: warning: old-style function definition [-Wold-style-definition]
+ 174 | void Init_redcarpet()
+ | ^~~~~~~~~~~~~~
+rc_markdown.c: At top level:
+cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
+cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
+cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
+compiling rc_render.c
+rc_render.c: In function ‘rndr_link_attributes’:
+rc_render.c:287:35: warning: variable ‘rndr’ set but not used [-Wunused-but-set-variable]
+ 287 | struct rb_redcarpet_rndr *rndr;
+ | ^~~~
+rc_render.c: In function ‘Init_redcarpet_rndr’:
+rc_render.c:552:6: warning: old-style function definition [-Wold-style-definition]
+ 552 | void Init_redcarpet_rndr()
+ | ^~~~~~~~~~~~~~~~~~~
+rc_render.c: At top level:
+cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
+cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
+cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
+compiling stack.c
+linking shared-object redcarpet.so
+
+current directory: /home/runner/work/java-buildpack-release/java-buildpack-release/java-buildpack/vendor/bundle/ruby/3.1.0/gems/redcarpet-3.5.1/ext/redcarpet
+make DESTDIR\= sitearchdir\=./.gem.20240717-1584-9okv0z sitelibdir\=./.gem.20240717-1584-9okv0z install
+/usr/bin/install -c -m 0755 redcarpet.so ./.gem.20240717-1584-9okv0z
diff --git a/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/redcarpet.so b/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/redcarpet.so
new file mode 100755
index 000000000..357107187
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/redcarpet.so differ
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/CHANGELOG.md b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/CHANGELOG.md
new file mode 100644
index 000000000..4a9f8668e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/CHANGELOG.md
@@ -0,0 +1,246 @@
+# Addressable 2.8.0
+- fixes ReDoS vulnerability in Addressable::Template#match
+- no longer replaces `+` with spaces in queries for non-http(s) schemes
+- fixed encoding ipv6 literals
+- the `:compacted` flag for `normalized_query` now dedupes parameters
+- fix broken `escape_component` alias
+- dropping support for Ruby 2.0 and 2.1
+- adding Ruby 3.0 compatibility for development tasks
+- drop support for `rack-mount` and remove Addressable::Template#generate
+- performance improvements
+- switch CI/CD to GitHub Actions
+
+# Addressable 2.7.0
+- added `:compacted` flag to `normalized_query`
+- `heuristic_parse` handles `mailto:` more intuitively
+- dropped explicit support for JRuby 9.0.5.0
+- compatibility w/ public_suffix 4.x
+- performance improvements
+
+# Addressable 2.6.0
+- added `tld=` method to allow assignment to the public suffix
+- most `heuristic_parse` patterns are now case-insensitive
+- `heuristic_parse` handles more `file://` URI variations
+- fixes bug in `heuristic_parse` when uri starts with digit
+- fixes bug in `request_uri=` with query strings
+- fixes template issues with `nil` and `?` operator
+- `frozen_string_literal` pragmas added
+- minor performance improvements in regexps
+- fixes to eliminate warnings
+
+# Addressable 2.5.2
+- better support for frozen string literals
+- fixed bug w/ uppercase characters in scheme
+- IDNA errors w/ emoji URLs
+- compatibility w/ public_suffix 3.x
+
+# Addressable 2.5.1
+- allow unicode normalization to be disabled for URI Template expansion
+- removed duplicate test
+
+# Addressable 2.5.0
+- dropping support for Ruby 1.9
+- adding support for Ruby 2.4 preview
+- add support for public suffixes and tld; first runtime dependency
+- hostname escaping should match RFC; underscores in hostnames no longer escaped
+- paths beginning with // and missing an authority are now considered invalid
+- validation now also takes place after setting a path
+- handle backslashes in authority more like a browser for `heuristic_parse`
+- unescaped backslashes in host now raise an `InvalidURIError`
+- `merge!`, `join!`, `omit!` and `normalize!` don't disable deferred validation
+- `heuristic_parse` now trims whitespace before parsing
+- host parts longer than 63 bytes will be ignored and not passed to libidn
+- normalized values always encoded as UTF-8
+
+# Addressable 2.4.0
+- support for 1.8.x dropped
+- double quotes in a host now raises an error
+- newlines in host will no longer get unescaped during normalization
+- stricter handling of bogus scheme values
+- stricter handling of encoded port values
+- calling `require 'addressable'` will now load both the URI and Template files
+- assigning to the `hostname` component with an `IPAddr` object is now supported
+- assigning to the `origin` component is now supported
+- fixed minor bug where an exception would be thrown for a missing ACE suffix
+- better partial expansion of URI templates
+
+# Addressable 2.3.8
+- fix warnings
+- update dependency gems
+- support for 1.8.x officially deprecated
+
+# Addressable 2.3.7
+- fix scenario in which invalid URIs don't get an exception until inspected
+- handle hostnames with two adjacent periods correctly
+- upgrade of RSpec
+
+# Addressable 2.3.6
+- normalization drops empty query string
+- better handling in template extract for missing values
+- template modifier for `'?'` now treated as optional
+- fixed issue where character class parameters were modified
+- templates can now be tested for equality
+- added `:sorted` option to normalization of query strings
+- fixed issue with normalization of hosts given in `'example.com.'` form
+
+# Addressable 2.3.5
+- added Addressable::URI#empty? method
+- Addressable::URI#hostname methods now strip square brackets from IPv6 hosts
+- compatibility with Net::HTTP in Ruby 2.0.0
+- Addressable::URI#route_from should always give relative URIs
+
+# Addressable 2.3.4
+- fixed issue with encoding altering its inputs
+- query string normalization now leaves ';' characters alone
+- FakeFS is detected before attempting to load unicode tables
+- additional testing to ensure frozen objects don't cause problems
+
+# Addressable 2.3.3
+- fixed issue with converting common primitives during template expansion
+- fixed port encoding issue
+- removed a few warnings
+- normalize should now ignore %2B in query strings
+- the IDNA logic should now be handled by libidn in Ruby 1.9
+- no template match should now result in nil instead of an empty MatchData
+- added license information to gemspec
+
+# Addressable 2.3.2
+- added Addressable::URI#default_port method
+- fixed issue with Marshalling Unicode data on Windows
+- improved heuristic parsing to better handle IPv4 addresses
+
+# Addressable 2.3.1
+- fixed missing unicode data file
+
+# Addressable 2.3.0
+- updated Addressable::Template to use RFC 6570, level 4
+- fixed compatibility problems with some versions of Ruby
+- moved unicode tables into a data file for performance reasons
+- removing support for multiple query value notations
+
+# Addressable 2.2.8
+- fixed issues with dot segment removal code
+- form encoding can now handle multiple values per key
+- updated development environment
+
+# Addressable 2.2.7
+- fixed issues related to Addressable::URI#query_values=
+- the Addressable::URI.parse method is now polymorphic
+
+# Addressable 2.2.6
+- changed the way ambiguous paths are handled
+- fixed bug with frozen URIs
+- https supported in heuristic parsing
+
+# Addressable 2.2.5
+- 'parsing' a pre-parsed URI object is now a dup operation
+- introduced conditional support for libidn
+- fixed normalization issue on ampersands in query strings
+- added additional tests around handling of query strings
+
+# Addressable 2.2.4
+- added origin support from draft-ietf-websec-origin-00
+- resolved issue with attempting to navigate below root
+- fixed bug with string splitting in query strings
+
+# Addressable 2.2.3
+- added :flat_array notation for query strings
+
+# Addressable 2.2.2
+- fixed issue with percent escaping of '+' character in query strings
+
+# Addressable 2.2.1
+- added support for application/x-www-form-urlencoded.
+
+# Addressable 2.2.0
+- added site methods
+- improved documentation
+
+# Addressable 2.1.2
+- added HTTP request URI methods
+- better handling of Windows file paths
+- validation_deferred boolean replaced with defer_validation block
+- normalization of percent-encoded paths should now be correct
+- fixed issue with constructing URIs with relative paths
+- fixed warnings
+
+# Addressable 2.1.1
+- more type checking changes
+- fixed issue with unicode normalization
+- added method to find template defaults
+- symbolic keys are now allowed in template mappings
+- numeric values and symbolic values are now allowed in template mappings
+
+# Addressable 2.1.0
+- refactored URI template support out into its own class
+- removed extract method due to being useless and unreliable
+- removed Addressable::URI.expand_template
+- removed Addressable::URI#extract_mapping
+- added partial template expansion
+- fixed minor bugs in the parse and heuristic_parse methods
+- fixed incompatibility with Ruby 1.9.1
+- fixed bottleneck in Addressable::URI#hash and Addressable::URI#to_s
+- fixed unicode normalization exception
+- updated query_values methods to better handle subscript notation
+- worked around issue with freezing URIs
+- improved specs
+
+# Addressable 2.0.2
+- fixed issue with URI template expansion
+- fixed issue with percent escaping characters 0-15
+
+# Addressable 2.0.1
+- fixed issue with query string assignment
+- fixed issue with improperly encoded components
+
+# Addressable 2.0.0
+- the initialize method now takes an options hash as its only parameter
+- added query_values method to URI class
+- completely replaced IDNA implementation with pure Ruby
+- renamed Addressable::ADDRESSABLE_VERSION to Addressable::VERSION
+- completely reworked the Rakefile
+- changed the behavior of the port method significantly
+- Addressable::URI.encode_segment, Addressable::URI.unencode_segment renamed
+- documentation is now in YARD format
+- more rigorous type checking
+- to_str method implemented, implicit conversion to Strings now allowed
+- Addressable::URI#omit method added, Addressable::URI#merge method replaced
+- updated URI Template code to match v 03 of the draft spec
+- added a bunch of new specifications
+
+# Addressable 1.0.4
+- switched to using RSpec's pending system for specs that rely on IDN
+- fixed issue with creating URIs with paths that are not prefixed with '/'
+
+# Addressable 1.0.3
+- implemented a hash method
+
+# Addressable 1.0.2
+- fixed minor bug with the extract_mapping method
+
+# Addressable 1.0.1
+- fixed minor bug with the extract_mapping method
+
+# Addressable 1.0.0
+- heuristic parse method added
+- parsing is slightly more strict
+- replaced to_h with to_hash
+- fixed routing methods
+- improved specifications
+- improved heckle rake task
+- no surviving heckle mutations
+
+# Addressable 0.1.2
+- improved normalization
+- fixed bug in joining algorithm
+- updated specifications
+
+# Addressable 0.1.1
+- updated documentation
+- added URI Template variable extraction
+
+# Addressable 0.1.0
+- initial release
+- implementation based on RFC 3986, 3987
+- support for IRIs via libidn
+- support for the URI Template draft spec
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/Gemfile b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/Gemfile
new file mode 100644
index 000000000..2684c1543
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/Gemfile
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+source 'https://rubygems.org'
+
+gemspec(path: __FILE__ == "(eval)" ? ".." : ".")
+
+group :test do
+ gem 'rspec', '~> 3.8'
+ gem 'rspec-its', '~> 1.3'
+end
+
+group :coverage do
+ gem "coveralls", "> 0.7", require: false, platforms: :mri
+ gem "simplecov", require: false
+end
+
+group :development do
+ gem 'launchy', '~> 2.4', '>= 2.4.3'
+ gem 'redcarpet', :platform => :mri_19
+ gem 'yard'
+end
+
+group :test, :development do
+ gem 'memory_profiler'
+ gem "rake", ">= 12.3.3"
+end
+
+gem "idn-ruby", platform: :mri
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/LICENSE.txt b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/LICENSE.txt
new file mode 100644
index 000000000..ef51da2b0
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/LICENSE.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/README.md b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/README.md
new file mode 100644
index 000000000..9892f6151
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/README.md
@@ -0,0 +1,121 @@
+# Addressable
+
+
+ - Homepage
- github.com/sporkmonger/addressable
+ - Author
- Bob Aman
+ - Copyright
- Copyright © Bob Aman
+ - License
- Apache 2.0
+
+
+[![Gem Version](https://img.shields.io/gem/dt/addressable.svg)][gem]
+[![Build Status](https://github.com/sporkmonger/addressable/workflows/CI/badge.svg)][actions]
+[![Test Coverage Status](https://img.shields.io/coveralls/sporkmonger/addressable.svg)][coveralls]
+[![Documentation Coverage Status](https://inch-ci.org/github/sporkmonger/addressable.svg?branch=master)][inch]
+
+[gem]: https://rubygems.org/gems/addressable
+[actions]: https://github.com/sporkmonger/addressable/actions
+[coveralls]: https://coveralls.io/r/sporkmonger/addressable
+[inch]: https://inch-ci.org/github/sporkmonger/addressable
+
+# Description
+
+Addressable is an alternative implementation to the URI implementation
+that is part of Ruby's standard library. It is flexible, offers heuristic
+parsing, and additionally provides extensive support for IRIs and URI templates.
+
+Addressable closely conforms to RFC 3986, RFC 3987, and RFC 6570 (level 4).
+
+# Reference
+
+- {Addressable::URI}
+- {Addressable::Template}
+
+# Example usage
+
+```ruby
+require "addressable/uri"
+
+uri = Addressable::URI.parse("http://example.com/path/to/resource/")
+uri.scheme
+#=> "http"
+uri.host
+#=> "example.com"
+uri.path
+#=> "/path/to/resource/"
+
+uri = Addressable::URI.parse("http://www.詹姆斯.com/")
+uri.normalize
+#=> #
+```
+
+
+# URI Templates
+
+For more details, see [RFC 6570](https://www.rfc-editor.org/rfc/rfc6570.txt).
+
+
+```ruby
+
+require "addressable/template"
+
+template = Addressable::Template.new("http://example.com/{?query*}")
+template.expand({
+ "query" => {
+ 'foo' => 'bar',
+ 'color' => 'red'
+ }
+})
+#=> #
+
+template = Addressable::Template.new("http://example.com/{?one,two,three}")
+template.partial_expand({"one" => "1", "three" => 3}).pattern
+#=> "http://example.com/?one=1{&two}&three=3"
+
+template = Addressable::Template.new(
+ "http://{host}{/segments*}/{?one,two,bogus}{#fragment}"
+)
+uri = Addressable::URI.parse(
+ "http://example.com/a/b/c/?one=1&two=2#foo"
+)
+template.extract(uri)
+#=>
+# {
+# "host" => "example.com",
+# "segments" => ["a", "b", "c"],
+# "one" => "1",
+# "two" => "2",
+# "fragment" => "foo"
+# }
+```
+
+# Install
+
+```console
+$ gem install addressable
+```
+
+You may optionally turn on native IDN support by installing libidn and the
+idn gem:
+
+```console
+$ sudo apt-get install libidn11-dev # Debian/Ubuntu
+$ brew install libidn # OS X
+$ gem install idn-ruby
+```
+
+# Semantic Versioning
+
+This project uses [Semantic Versioning](https://semver.org/). You can (and should) specify your
+dependency using a pessimistic version constraint covering the major and minor
+values:
+
+```ruby
+spec.add_dependency 'addressable', '~> 2.7'
+```
+
+If you need a specific bug fix, you can also specify minimum tiny versions
+without preventing updates to the latest minor release:
+
+```ruby
+spec.add_dependency 'addressable', '~> 2.3', '>= 2.3.7'
+```
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/Rakefile b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/Rakefile
new file mode 100644
index 000000000..b7e0ff31e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/Rakefile
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'rubygems'
+require 'rake'
+
+require File.join(File.dirname(__FILE__), 'lib', 'addressable', 'version')
+
+PKG_DISPLAY_NAME = 'Addressable'
+PKG_NAME = PKG_DISPLAY_NAME.downcase
+PKG_VERSION = Addressable::VERSION::STRING
+PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
+
+RELEASE_NAME = "REL #{PKG_VERSION}"
+
+PKG_SUMMARY = "URI Implementation"
+PKG_DESCRIPTION = <<-TEXT
+Addressable is an alternative implementation to the URI implementation that is
+part of Ruby's standard library. It is flexible, offers heuristic parsing, and
+additionally provides extensive support for IRIs and URI templates.
+TEXT
+
+PKG_FILES = FileList[
+ "lib/**/*", "spec/**/*", "vendor/**/*", "data/**/*",
+ "tasks/**/*",
+ "[A-Z]*", "Rakefile"
+].exclude(/pkg/).exclude(/database\.yml/).
+ exclude(/Gemfile\.lock/).exclude(/[_\.]git$/)
+
+task :default => "spec"
+
+WINDOWS = (RUBY_PLATFORM =~ /mswin|win32|mingw|bccwin|cygwin/) rescue false
+SUDO = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS'])
+
+Dir['tasks/**/*.rake'].each { |rake| load rake }
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/addressable.gemspec b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/addressable.gemspec
new file mode 100644
index 000000000..12666a068
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/addressable.gemspec
@@ -0,0 +1,37 @@
+# -*- encoding: utf-8 -*-
+# stub: addressable 2.8.0 ruby lib
+
+Gem::Specification.new do |s|
+ s.name = "addressable".freeze
+ s.version = "2.8.0"
+
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
+ s.require_paths = ["lib".freeze]
+ s.authors = ["Bob Aman".freeze]
+ s.date = "2021-07-03"
+ s.description = "Addressable is an alternative implementation to the URI implementation that is\npart of Ruby's standard library. It is flexible, offers heuristic parsing, and\nadditionally provides extensive support for IRIs and URI templates.\n".freeze
+ s.email = "bob@sporkmonger.com".freeze
+ s.extra_rdoc_files = ["README.md".freeze]
+ s.files = ["CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE.txt".freeze, "README.md".freeze, "Rakefile".freeze, "addressable.gemspec".freeze, "data/unicode.data".freeze, "lib/addressable.rb".freeze, "lib/addressable/idna.rb".freeze, "lib/addressable/idna/native.rb".freeze, "lib/addressable/idna/pure.rb".freeze, "lib/addressable/template.rb".freeze, "lib/addressable/uri.rb".freeze, "lib/addressable/version.rb".freeze, "spec/addressable/idna_spec.rb".freeze, "spec/addressable/net_http_compat_spec.rb".freeze, "spec/addressable/security_spec.rb".freeze, "spec/addressable/template_spec.rb".freeze, "spec/addressable/uri_spec.rb".freeze, "spec/spec_helper.rb".freeze, "tasks/clobber.rake".freeze, "tasks/gem.rake".freeze, "tasks/git.rake".freeze, "tasks/metrics.rake".freeze, "tasks/profile.rake".freeze, "tasks/rspec.rake".freeze, "tasks/yard.rake".freeze]
+ s.homepage = "https://github.com/sporkmonger/addressable".freeze
+ s.licenses = ["Apache-2.0".freeze]
+ s.rdoc_options = ["--main".freeze, "README.md".freeze]
+ s.required_ruby_version = Gem::Requirement.new(">= 2.0".freeze)
+ s.rubygems_version = "3.0.3".freeze
+ s.summary = "URI Implementation".freeze
+
+ if s.respond_to? :specification_version then
+ s.specification_version = 4
+
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
+ s.add_runtime_dependency(%q.freeze, [">= 2.0.2", "< 5.0"])
+ s.add_development_dependency(%q.freeze, [">= 1.0", "< 3.0"])
+ else
+ s.add_dependency(%q.freeze, [">= 2.0.2", "< 5.0"])
+ s.add_dependency(%q.freeze, [">= 1.0", "< 3.0"])
+ end
+ else
+ s.add_dependency(%q.freeze, [">= 2.0.2", "< 5.0"])
+ s.add_dependency(%q.freeze, [">= 1.0", "< 3.0"])
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/data/unicode.data b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/data/unicode.data
new file mode 100644
index 000000000..cdfc22418
Binary files /dev/null and b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/data/unicode.data differ
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable.rb
new file mode 100644
index 000000000..b4e98b696
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable.rb
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+
+require 'addressable/uri'
+require 'addressable/template'
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna.rb
new file mode 100644
index 000000000..e41c1f5da
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+# encoding:utf-8
+#--
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#++
+
+
+begin
+ require "addressable/idna/native"
+rescue LoadError
+ # libidn or the idn gem was not available, fall back on a pure-Ruby
+ # implementation...
+ require "addressable/idna/pure"
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna/native.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna/native.rb
new file mode 100644
index 000000000..84de8e8cb
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna/native.rb
@@ -0,0 +1,61 @@
+# frozen_string_literal: true
+
+# encoding:utf-8
+#--
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#++
+
+
+require "idn"
+
+module Addressable
+ module IDNA
+ def self.punycode_encode(value)
+ IDN::Punycode.encode(value.to_s)
+ end
+
+ def self.punycode_decode(value)
+ IDN::Punycode.decode(value.to_s)
+ end
+
+ def self.unicode_normalize_kc(value)
+ IDN::Stringprep.nfkc_normalize(value.to_s)
+ end
+
+ def self.to_ascii(value)
+ value.to_s.split('.', -1).map do |segment|
+ if segment.size > 0 && segment.size < 64
+ IDN::Idna.toASCII(segment, IDN::Idna::ALLOW_UNASSIGNED)
+ elsif segment.size >= 64
+ segment
+ else
+ ''
+ end
+ end.join('.')
+ end
+
+ def self.to_unicode(value)
+ value.to_s.split('.', -1).map do |segment|
+ if segment.size > 0 && segment.size < 64
+ IDN::Idna.toUnicode(segment, IDN::Idna::ALLOW_UNASSIGNED)
+ elsif segment.size >= 64
+ segment
+ else
+ ''
+ end
+ end.join('.')
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna/pure.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna/pure.rb
new file mode 100644
index 000000000..7a0c1fda2
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna/pure.rb
@@ -0,0 +1,678 @@
+# frozen_string_literal: true
+
+# encoding:utf-8
+#--
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#++
+
+
+module Addressable
+ module IDNA
+ # This module is loosely based on idn_actionmailer by Mick Staugaard,
+ # the unicode library by Yoshida Masato, and the punycode implementation
+ # by Kazuhiro Nishiyama. Most of the code was copied verbatim, but
+ # some reformatting was done, and some translation from C was done.
+ #
+ # Without their code to work from as a base, we'd all still be relying
+ # on the presence of libidn. Which nobody ever seems to have installed.
+ #
+ # Original sources:
+ # http://github.com/staugaard/idn_actionmailer
+ # http://www.yoshidam.net/Ruby.html#unicode
+ # http://rubyforge.org/frs/?group_id=2550
+
+
+ UNICODE_TABLE = File.expand_path(
+ File.join(File.dirname(__FILE__), '../../..', 'data/unicode.data')
+ )
+
+ ACE_PREFIX = "xn--"
+
+ UTF8_REGEX = /\A(?:
+ [\x09\x0A\x0D\x20-\x7E] # ASCII
+ | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
+ | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
+ | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
+ | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
+ | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
+ | [\xF1-\xF3][\x80-\xBF]{3} # planes 4nil5
+ | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
+ )*\z/mnx
+
+ UTF8_REGEX_MULTIBYTE = /(?:
+ [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
+ | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
+ | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
+ | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
+ | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
+ | [\xF1-\xF3][\x80-\xBF]{3} # planes 4nil5
+ | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
+ )/mnx
+
+ # :startdoc:
+
+ # Converts from a Unicode internationalized domain name to an ASCII
+ # domain name as described in RFC 3490.
+ def self.to_ascii(input)
+ input = input.to_s unless input.is_a?(String)
+ input = input.dup
+ if input.respond_to?(:force_encoding)
+ input.force_encoding(Encoding::ASCII_8BIT)
+ end
+ if input =~ UTF8_REGEX && input =~ UTF8_REGEX_MULTIBYTE
+ parts = unicode_downcase(input).split('.')
+ parts.map! do |part|
+ if part.respond_to?(:force_encoding)
+ part.force_encoding(Encoding::ASCII_8BIT)
+ end
+ if part =~ UTF8_REGEX && part =~ UTF8_REGEX_MULTIBYTE
+ ACE_PREFIX + punycode_encode(unicode_normalize_kc(part))
+ else
+ part
+ end
+ end
+ parts.join('.')
+ else
+ input
+ end
+ end
+
+ # Converts from an ASCII domain name to a Unicode internationalized
+ # domain name as described in RFC 3490.
+ def self.to_unicode(input)
+ input = input.to_s unless input.is_a?(String)
+ parts = input.split('.')
+ parts.map! do |part|
+ if part =~ /^#{ACE_PREFIX}(.+)/
+ begin
+ punycode_decode(part[/^#{ACE_PREFIX}(.+)/, 1])
+ rescue Addressable::IDNA::PunycodeBadInput
+ # toUnicode is explicitly defined as never-fails by the spec
+ part
+ end
+ else
+ part
+ end
+ end
+ output = parts.join('.')
+ if output.respond_to?(:force_encoding)
+ output.force_encoding(Encoding::UTF_8)
+ end
+ output
+ end
+
+ # Unicode normalization form KC.
+ def self.unicode_normalize_kc(input)
+ input = input.to_s unless input.is_a?(String)
+ unpacked = input.unpack("U*")
+ unpacked =
+ unicode_compose(unicode_sort_canonical(unicode_decompose(unpacked)))
+ return unpacked.pack("U*")
+ end
+
+ ##
+ # Unicode aware downcase method.
+ #
+ # @api private
+ # @param [String] input
+ # The input string.
+ # @return [String] The downcased result.
+ def self.unicode_downcase(input)
+ input = input.to_s unless input.is_a?(String)
+ unpacked = input.unpack("U*")
+ unpacked.map! { |codepoint| lookup_unicode_lowercase(codepoint) }
+ return unpacked.pack("U*")
+ end
+ private_class_method :unicode_downcase
+
+ def self.unicode_compose(unpacked)
+ unpacked_result = []
+ length = unpacked.length
+
+ return unpacked if length == 0
+
+ starter = unpacked[0]
+ starter_cc = lookup_unicode_combining_class(starter)
+ starter_cc = 256 if starter_cc != 0
+ for i in 1...length
+ ch = unpacked[i]
+
+ if (starter_cc == 0 &&
+ (composite = unicode_compose_pair(starter, ch)) != nil)
+ starter = composite
+ else
+ unpacked_result << starter
+ starter = ch
+ end
+ end
+ unpacked_result << starter
+ return unpacked_result
+ end
+ private_class_method :unicode_compose
+
+ def self.unicode_compose_pair(ch_one, ch_two)
+ if ch_one >= HANGUL_LBASE && ch_one < HANGUL_LBASE + HANGUL_LCOUNT &&
+ ch_two >= HANGUL_VBASE && ch_two < HANGUL_VBASE + HANGUL_VCOUNT
+ # Hangul L + V
+ return HANGUL_SBASE + (
+ (ch_one - HANGUL_LBASE) * HANGUL_VCOUNT + (ch_two - HANGUL_VBASE)
+ ) * HANGUL_TCOUNT
+ elsif ch_one >= HANGUL_SBASE &&
+ ch_one < HANGUL_SBASE + HANGUL_SCOUNT &&
+ (ch_one - HANGUL_SBASE) % HANGUL_TCOUNT == 0 &&
+ ch_two >= HANGUL_TBASE && ch_two < HANGUL_TBASE + HANGUL_TCOUNT
+ # Hangul LV + T
+ return ch_one + (ch_two - HANGUL_TBASE)
+ end
+
+ p = []
+
+ ucs4_to_utf8(ch_one, p)
+ ucs4_to_utf8(ch_two, p)
+
+ return lookup_unicode_composition(p)
+ end
+ private_class_method :unicode_compose_pair
+
+ def self.ucs4_to_utf8(char, buffer)
+ if char < 128
+ buffer << char
+ elsif char < 2048
+ buffer << (char >> 6 | 192)
+ buffer << (char & 63 | 128)
+ elsif char < 0x10000
+ buffer << (char >> 12 | 224)
+ buffer << (char >> 6 & 63 | 128)
+ buffer << (char & 63 | 128)
+ elsif char < 0x200000
+ buffer << (char >> 18 | 240)
+ buffer << (char >> 12 & 63 | 128)
+ buffer << (char >> 6 & 63 | 128)
+ buffer << (char & 63 | 128)
+ elsif char < 0x4000000
+ buffer << (char >> 24 | 248)
+ buffer << (char >> 18 & 63 | 128)
+ buffer << (char >> 12 & 63 | 128)
+ buffer << (char >> 6 & 63 | 128)
+ buffer << (char & 63 | 128)
+ elsif char < 0x80000000
+ buffer << (char >> 30 | 252)
+ buffer << (char >> 24 & 63 | 128)
+ buffer << (char >> 18 & 63 | 128)
+ buffer << (char >> 12 & 63 | 128)
+ buffer << (char >> 6 & 63 | 128)
+ buffer << (char & 63 | 128)
+ end
+ end
+ private_class_method :ucs4_to_utf8
+
+ def self.unicode_sort_canonical(unpacked)
+ unpacked = unpacked.dup
+ i = 1
+ length = unpacked.length
+
+ return unpacked if length < 2
+
+ while i < length
+ last = unpacked[i-1]
+ ch = unpacked[i]
+ last_cc = lookup_unicode_combining_class(last)
+ cc = lookup_unicode_combining_class(ch)
+ if cc != 0 && last_cc != 0 && last_cc > cc
+ unpacked[i] = last
+ unpacked[i-1] = ch
+ i -= 1 if i > 1
+ else
+ i += 1
+ end
+ end
+ return unpacked
+ end
+ private_class_method :unicode_sort_canonical
+
+ def self.unicode_decompose(unpacked)
+ unpacked_result = []
+ for cp in unpacked
+ if cp >= HANGUL_SBASE && cp < HANGUL_SBASE + HANGUL_SCOUNT
+ l, v, t = unicode_decompose_hangul(cp)
+ unpacked_result << l
+ unpacked_result << v if v
+ unpacked_result << t if t
+ else
+ dc = lookup_unicode_compatibility(cp)
+ unless dc
+ unpacked_result << cp
+ else
+ unpacked_result.concat(unicode_decompose(dc.unpack("U*")))
+ end
+ end
+ end
+ return unpacked_result
+ end
+ private_class_method :unicode_decompose
+
+ def self.unicode_decompose_hangul(codepoint)
+ sindex = codepoint - HANGUL_SBASE;
+ if sindex < 0 || sindex >= HANGUL_SCOUNT
+ l = codepoint
+ v = t = nil
+ return l, v, t
+ end
+ l = HANGUL_LBASE + sindex / HANGUL_NCOUNT
+ v = HANGUL_VBASE + (sindex % HANGUL_NCOUNT) / HANGUL_TCOUNT
+ t = HANGUL_TBASE + sindex % HANGUL_TCOUNT
+ if t == HANGUL_TBASE
+ t = nil
+ end
+ return l, v, t
+ end
+ private_class_method :unicode_decompose_hangul
+
+ def self.lookup_unicode_combining_class(codepoint)
+ codepoint_data = UNICODE_DATA[codepoint]
+ (codepoint_data ?
+ (codepoint_data[UNICODE_DATA_COMBINING_CLASS] || 0) :
+ 0)
+ end
+ private_class_method :lookup_unicode_combining_class
+
+ def self.lookup_unicode_compatibility(codepoint)
+ codepoint_data = UNICODE_DATA[codepoint]
+ (codepoint_data ?
+ codepoint_data[UNICODE_DATA_COMPATIBILITY] : nil)
+ end
+ private_class_method :lookup_unicode_compatibility
+
+ def self.lookup_unicode_lowercase(codepoint)
+ codepoint_data = UNICODE_DATA[codepoint]
+ (codepoint_data ?
+ (codepoint_data[UNICODE_DATA_LOWERCASE] || codepoint) :
+ codepoint)
+ end
+ private_class_method :lookup_unicode_lowercase
+
+ def self.lookup_unicode_composition(unpacked)
+ return COMPOSITION_TABLE[unpacked]
+ end
+ private_class_method :lookup_unicode_composition
+
+ HANGUL_SBASE = 0xac00
+ HANGUL_LBASE = 0x1100
+ HANGUL_LCOUNT = 19
+ HANGUL_VBASE = 0x1161
+ HANGUL_VCOUNT = 21
+ HANGUL_TBASE = 0x11a7
+ HANGUL_TCOUNT = 28
+ HANGUL_NCOUNT = HANGUL_VCOUNT * HANGUL_TCOUNT # 588
+ HANGUL_SCOUNT = HANGUL_LCOUNT * HANGUL_NCOUNT # 11172
+
+ UNICODE_DATA_COMBINING_CLASS = 0
+ UNICODE_DATA_EXCLUSION = 1
+ UNICODE_DATA_CANONICAL = 2
+ UNICODE_DATA_COMPATIBILITY = 3
+ UNICODE_DATA_UPPERCASE = 4
+ UNICODE_DATA_LOWERCASE = 5
+ UNICODE_DATA_TITLECASE = 6
+
+ begin
+ if defined?(FakeFS)
+ fakefs_state = FakeFS.activated?
+ FakeFS.deactivate!
+ end
+ # This is a sparse Unicode table. Codepoints without entries are
+ # assumed to have the value: [0, 0, nil, nil, nil, nil, nil]
+ UNICODE_DATA = File.open(UNICODE_TABLE, "rb") do |file|
+ Marshal.load(file.read)
+ end
+ ensure
+ if defined?(FakeFS)
+ FakeFS.activate! if fakefs_state
+ end
+ end
+
+ COMPOSITION_TABLE = {}
+ UNICODE_DATA.each do |codepoint, data|
+ canonical = data[UNICODE_DATA_CANONICAL]
+ exclusion = data[UNICODE_DATA_EXCLUSION]
+
+ if canonical && exclusion == 0
+ COMPOSITION_TABLE[canonical.unpack("C*")] = codepoint
+ end
+ end
+
+ UNICODE_MAX_LENGTH = 256
+ ACE_MAX_LENGTH = 256
+
+ PUNYCODE_BASE = 36
+ PUNYCODE_TMIN = 1
+ PUNYCODE_TMAX = 26
+ PUNYCODE_SKEW = 38
+ PUNYCODE_DAMP = 700
+ PUNYCODE_INITIAL_BIAS = 72
+ PUNYCODE_INITIAL_N = 0x80
+ PUNYCODE_DELIMITER = 0x2D
+
+ PUNYCODE_MAXINT = 1 << 64
+
+ PUNYCODE_PRINT_ASCII =
+ "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" +
+ "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" +
+ " !\"\#$%&'()*+,-./" +
+ "0123456789:;<=>?" +
+ "@ABCDEFGHIJKLMNO" +
+ "PQRSTUVWXYZ[\\]^_" +
+ "`abcdefghijklmno" +
+ "pqrstuvwxyz{|}~\n"
+
+ # Input is invalid.
+ class PunycodeBadInput < StandardError; end
+ # Output would exceed the space provided.
+ class PunycodeBigOutput < StandardError; end
+ # Input needs wider integers to process.
+ class PunycodeOverflow < StandardError; end
+
+ def self.punycode_encode(unicode)
+ unicode = unicode.to_s unless unicode.is_a?(String)
+ input = unicode.unpack("U*")
+ output = [0] * (ACE_MAX_LENGTH + 1)
+ input_length = input.size
+ output_length = [ACE_MAX_LENGTH]
+
+ # Initialize the state
+ n = PUNYCODE_INITIAL_N
+ delta = out = 0
+ max_out = output_length[0]
+ bias = PUNYCODE_INITIAL_BIAS
+
+ # Handle the basic code points:
+ input_length.times do |j|
+ if punycode_basic?(input[j])
+ if max_out - out < 2
+ raise PunycodeBigOutput,
+ "Output would exceed the space provided."
+ end
+ output[out] = input[j]
+ out += 1
+ end
+ end
+
+ h = b = out
+
+ # h is the number of code points that have been handled, b is the
+ # number of basic code points, and out is the number of characters
+ # that have been output.
+
+ if b > 0
+ output[out] = PUNYCODE_DELIMITER
+ out += 1
+ end
+
+ # Main encoding loop:
+
+ while h < input_length
+ # All non-basic code points < n have been
+ # handled already. Find the next larger one:
+
+ m = PUNYCODE_MAXINT
+ input_length.times do |j|
+ m = input[j] if (n...m) === input[j]
+ end
+
+ # Increase delta enough to advance the decoder's
+ # state to , but guard against overflow:
+
+ if m - n > (PUNYCODE_MAXINT - delta) / (h + 1)
+ raise PunycodeOverflow, "Input needs wider integers to process."
+ end
+ delta += (m - n) * (h + 1)
+ n = m
+
+ input_length.times do |j|
+ # Punycode does not need to check whether input[j] is basic:
+ if input[j] < n
+ delta += 1
+ if delta == 0
+ raise PunycodeOverflow,
+ "Input needs wider integers to process."
+ end
+ end
+
+ if input[j] == n
+ # Represent delta as a generalized variable-length integer:
+
+ q = delta; k = PUNYCODE_BASE
+ while true
+ if out >= max_out
+ raise PunycodeBigOutput,
+ "Output would exceed the space provided."
+ end
+ t = (
+ if k <= bias
+ PUNYCODE_TMIN
+ elsif k >= bias + PUNYCODE_TMAX
+ PUNYCODE_TMAX
+ else
+ k - bias
+ end
+ )
+ break if q < t
+ output[out] =
+ punycode_encode_digit(t + (q - t) % (PUNYCODE_BASE - t))
+ out += 1
+ q = (q - t) / (PUNYCODE_BASE - t)
+ k += PUNYCODE_BASE
+ end
+
+ output[out] = punycode_encode_digit(q)
+ out += 1
+ bias = punycode_adapt(delta, h + 1, h == b)
+ delta = 0
+ h += 1
+ end
+ end
+
+ delta += 1
+ n += 1
+ end
+
+ output_length[0] = out
+
+ outlen = out
+ outlen.times do |j|
+ c = output[j]
+ unless c >= 0 && c <= 127
+ raise StandardError, "Invalid output char."
+ end
+ unless PUNYCODE_PRINT_ASCII[c]
+ raise PunycodeBadInput, "Input is invalid."
+ end
+ end
+
+ output[0..outlen].map { |x| x.chr }.join("").sub(/\0+\z/, "")
+ end
+ private_class_method :punycode_encode
+
+ def self.punycode_decode(punycode)
+ input = []
+ output = []
+
+ if ACE_MAX_LENGTH * 2 < punycode.size
+ raise PunycodeBigOutput, "Output would exceed the space provided."
+ end
+ punycode.each_byte do |c|
+ unless c >= 0 && c <= 127
+ raise PunycodeBadInput, "Input is invalid."
+ end
+ input.push(c)
+ end
+
+ input_length = input.length
+ output_length = [UNICODE_MAX_LENGTH]
+
+ # Initialize the state
+ n = PUNYCODE_INITIAL_N
+
+ out = i = 0
+ max_out = output_length[0]
+ bias = PUNYCODE_INITIAL_BIAS
+
+ # Handle the basic code points: Let b be the number of input code
+ # points before the last delimiter, or 0 if there is none, then
+ # copy the first b code points to the output.
+
+ b = 0
+ input_length.times do |j|
+ b = j if punycode_delimiter?(input[j])
+ end
+ if b > max_out
+ raise PunycodeBigOutput, "Output would exceed the space provided."
+ end
+
+ b.times do |j|
+ unless punycode_basic?(input[j])
+ raise PunycodeBadInput, "Input is invalid."
+ end
+ output[out] = input[j]
+ out+=1
+ end
+
+ # Main decoding loop: Start just after the last delimiter if any
+ # basic code points were copied; start at the beginning otherwise.
+
+ in_ = b > 0 ? b + 1 : 0
+ while in_ < input_length
+
+ # in_ is the index of the next character to be consumed, and
+ # out is the number of code points in the output array.
+
+ # Decode a generalized variable-length integer into delta,
+ # which gets added to i. The overflow checking is easier
+ # if we increase i as we go, then subtract off its starting
+ # value at the end to obtain delta.
+
+ oldi = i; w = 1; k = PUNYCODE_BASE
+ while true
+ if in_ >= input_length
+ raise PunycodeBadInput, "Input is invalid."
+ end
+ digit = punycode_decode_digit(input[in_])
+ in_+=1
+ if digit >= PUNYCODE_BASE
+ raise PunycodeBadInput, "Input is invalid."
+ end
+ if digit > (PUNYCODE_MAXINT - i) / w
+ raise PunycodeOverflow, "Input needs wider integers to process."
+ end
+ i += digit * w
+ t = (
+ if k <= bias
+ PUNYCODE_TMIN
+ elsif k >= bias + PUNYCODE_TMAX
+ PUNYCODE_TMAX
+ else
+ k - bias
+ end
+ )
+ break if digit < t
+ if w > PUNYCODE_MAXINT / (PUNYCODE_BASE - t)
+ raise PunycodeOverflow, "Input needs wider integers to process."
+ end
+ w *= PUNYCODE_BASE - t
+ k += PUNYCODE_BASE
+ end
+
+ bias = punycode_adapt(i - oldi, out + 1, oldi == 0)
+
+ # I was supposed to wrap around from out + 1 to 0,
+ # incrementing n each time, so we'll fix that now:
+
+ if i / (out + 1) > PUNYCODE_MAXINT - n
+ raise PunycodeOverflow, "Input needs wider integers to process."
+ end
+ n += i / (out + 1)
+ i %= out + 1
+
+ # Insert n at position i of the output:
+
+ # not needed for Punycode:
+ # raise PUNYCODE_INVALID_INPUT if decode_digit(n) <= base
+ if out >= max_out
+ raise PunycodeBigOutput, "Output would exceed the space provided."
+ end
+
+ #memmove(output + i + 1, output + i, (out - i) * sizeof *output)
+ output[i + 1, out - i] = output[i, out - i]
+ output[i] = n
+ i += 1
+
+ out += 1
+ end
+
+ output_length[0] = out
+
+ output.pack("U*")
+ end
+ private_class_method :punycode_decode
+
+ def self.punycode_basic?(codepoint)
+ codepoint < 0x80
+ end
+ private_class_method :punycode_basic?
+
+ def self.punycode_delimiter?(codepoint)
+ codepoint == PUNYCODE_DELIMITER
+ end
+ private_class_method :punycode_delimiter?
+
+ def self.punycode_encode_digit(d)
+ d + 22 + 75 * ((d < 26) ? 1 : 0)
+ end
+ private_class_method :punycode_encode_digit
+
+ # Returns the numeric value of a basic codepoint
+ # (for use in representing integers) in the range 0 to
+ # base - 1, or PUNYCODE_BASE if codepoint does not represent a value.
+ def self.punycode_decode_digit(codepoint)
+ if codepoint - 48 < 10
+ codepoint - 22
+ elsif codepoint - 65 < 26
+ codepoint - 65
+ elsif codepoint - 97 < 26
+ codepoint - 97
+ else
+ PUNYCODE_BASE
+ end
+ end
+ private_class_method :punycode_decode_digit
+
+ # Bias adaptation method
+ def self.punycode_adapt(delta, numpoints, firsttime)
+ delta = firsttime ? delta / PUNYCODE_DAMP : delta >> 1
+ # delta >> 1 is a faster way of doing delta / 2
+ delta += delta / numpoints
+ difference = PUNYCODE_BASE - PUNYCODE_TMIN
+
+ k = 0
+ while delta > (difference * PUNYCODE_TMAX) / 2
+ delta /= difference
+ k += PUNYCODE_BASE
+ end
+
+ k + (difference + 1) * delta / (delta + PUNYCODE_SKEW)
+ end
+ private_class_method :punycode_adapt
+ end
+ # :startdoc:
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/template.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/template.rb
new file mode 100644
index 000000000..45f6ae69e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/template.rb
@@ -0,0 +1,1031 @@
+# frozen_string_literal: true
+
+# encoding:utf-8
+#--
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#++
+
+
+require "addressable/version"
+require "addressable/uri"
+
+module Addressable
+ ##
+ # This is an implementation of a URI template based on
+ # RFC 6570 (http://tools.ietf.org/html/rfc6570).
+ class Template
+ # Constants used throughout the template code.
+ anything =
+ Addressable::URI::CharacterClasses::RESERVED +
+ Addressable::URI::CharacterClasses::UNRESERVED
+
+
+ variable_char_class =
+ Addressable::URI::CharacterClasses::ALPHA +
+ Addressable::URI::CharacterClasses::DIGIT + '_'
+
+ var_char =
+ "(?>(?:[#{variable_char_class}]|%[a-fA-F0-9][a-fA-F0-9])+)"
+ RESERVED =
+ "(?:[#{anything}]|%[a-fA-F0-9][a-fA-F0-9])"
+ UNRESERVED =
+ "(?:[#{
+ Addressable::URI::CharacterClasses::UNRESERVED
+ }]|%[a-fA-F0-9][a-fA-F0-9])"
+ variable =
+ "(?:#{var_char}(?:\\.?#{var_char})*)"
+ varspec =
+ "(?:(#{variable})(\\*|:\\d+)?)"
+ VARNAME =
+ /^#{variable}$/
+ VARSPEC =
+ /^#{varspec}$/
+ VARIABLE_LIST =
+ /^#{varspec}(?:,#{varspec})*$/
+ operator =
+ "+#./;?&=,!@|"
+ EXPRESSION =
+ /\{([#{operator}])?(#{varspec}(?:,#{varspec})*)\}/
+
+
+ LEADERS = {
+ '?' => '?',
+ '/' => '/',
+ '#' => '#',
+ '.' => '.',
+ ';' => ';',
+ '&' => '&'
+ }
+ JOINERS = {
+ '?' => '&',
+ '.' => '.',
+ ';' => ';',
+ '&' => '&',
+ '/' => '/'
+ }
+
+ ##
+ # Raised if an invalid template value is supplied.
+ class InvalidTemplateValueError < StandardError
+ end
+
+ ##
+ # Raised if an invalid template operator is used in a pattern.
+ class InvalidTemplateOperatorError < StandardError
+ end
+
+ ##
+ # Raised if an invalid template operator is used in a pattern.
+ class TemplateOperatorAbortedError < StandardError
+ end
+
+ ##
+ # This class represents the data that is extracted when a Template
+ # is matched against a URI.
+ class MatchData
+ ##
+ # Creates a new MatchData object.
+ # MatchData objects should never be instantiated directly.
+ #
+ # @param [Addressable::URI] uri
+ # The URI that the template was matched against.
+ def initialize(uri, template, mapping)
+ @uri = uri.dup.freeze
+ @template = template
+ @mapping = mapping.dup.freeze
+ end
+
+ ##
+ # @return [Addressable::URI]
+ # The URI that the Template was matched against.
+ attr_reader :uri
+
+ ##
+ # @return [Addressable::Template]
+ # The Template used for the match.
+ attr_reader :template
+
+ ##
+ # @return [Hash]
+ # The mapping that resulted from the match.
+ # Note that this mapping does not include keys or values for
+ # variables that appear in the Template, but are not present
+ # in the URI.
+ attr_reader :mapping
+
+ ##
+ # @return [Array]
+ # The list of variables that were present in the Template.
+ # Note that this list will include variables which do not appear
+ # in the mapping because they were not present in URI.
+ def variables
+ self.template.variables
+ end
+ alias_method :keys, :variables
+ alias_method :names, :variables
+
+ ##
+ # @return [Array]
+ # The list of values that were captured by the Template.
+ # Note that this list will include nils for any variables which
+ # were in the Template, but did not appear in the URI.
+ def values
+ @values ||= self.variables.inject([]) do |accu, key|
+ accu << self.mapping[key]
+ accu
+ end
+ end
+ alias_method :captures, :values
+
+ ##
+ # Accesses captured values by name or by index.
+ #
+ # @param [String, Symbol, Fixnum] key
+ # Capture index or name. Note that when accessing by with index
+ # of 0, the full URI will be returned. The intention is to mimic
+ # the ::MatchData#[] behavior.
+ #
+ # @param [#to_int, nil] len
+ # If provided, an array of values will be returend with the given
+ # parameter used as length.
+ #
+ # @return [Array, String, nil]
+ # The captured value corresponding to the index or name. If the
+ # value was not provided or the key is unknown, nil will be
+ # returned.
+ #
+ # If the second parameter is provided, an array of that length will
+ # be returned instead.
+ def [](key, len = nil)
+ if len
+ to_a[key, len]
+ elsif String === key or Symbol === key
+ mapping[key.to_s]
+ else
+ to_a[key]
+ end
+ end
+
+ ##
+ # @return [Array]
+ # Array with the matched URI as first element followed by the captured
+ # values.
+ def to_a
+ [to_s, *values]
+ end
+
+ ##
+ # @return [String]
+ # The matched URI as String.
+ def to_s
+ uri.to_s
+ end
+ alias_method :string, :to_s
+
+ # Returns multiple captured values at once.
+ #
+ # @param [String, Symbol, Fixnum] *indexes
+ # Indices of the captures to be returned
+ #
+ # @return [Array]
+ # Values corresponding to given indices.
+ #
+ # @see Addressable::Template::MatchData#[]
+ def values_at(*indexes)
+ indexes.map { |i| self[i] }
+ end
+
+ ##
+ # Returns a String representation of the MatchData's state.
+ #
+ # @return [String] The MatchData's state, as a String.
+ def inspect
+ sprintf("#<%s:%#0x RESULT:%s>",
+ self.class.to_s, self.object_id, self.mapping.inspect)
+ end
+
+ ##
+ # Dummy method for code expecting a ::MatchData instance
+ #
+ # @return [String] An empty string.
+ def pre_match
+ ""
+ end
+ alias_method :post_match, :pre_match
+ end
+
+ ##
+ # Creates a new Addressable::Template object.
+ #
+ # @param [#to_str] pattern The URI Template pattern.
+ #
+ # @return [Addressable::Template] The initialized Template object.
+ def initialize(pattern)
+ if !pattern.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{pattern.class} into String."
+ end
+ @pattern = pattern.to_str.dup.freeze
+ end
+
+ ##
+ # Freeze URI, initializing instance variables.
+ #
+ # @return [Addressable::URI] The frozen URI object.
+ def freeze
+ self.variables
+ self.variable_defaults
+ self.named_captures
+ super
+ end
+
+ ##
+ # @return [String] The Template object's pattern.
+ attr_reader :pattern
+
+ ##
+ # Returns a String representation of the Template object's state.
+ #
+ # @return [String] The Template object's state, as a String.
+ def inspect
+ sprintf("#<%s:%#0x PATTERN:%s>",
+ self.class.to_s, self.object_id, self.pattern)
+ end
+
+ ##
+ # Returns true
if the Template objects are equal. This method
+ # does NOT normalize either Template before doing the comparison.
+ #
+ # @param [Object] template The Template to compare.
+ #
+ # @return [TrueClass, FalseClass]
+ # true
if the Templates are equivalent, false
+ # otherwise.
+ def ==(template)
+ return false unless template.kind_of?(Template)
+ return self.pattern == template.pattern
+ end
+
+ ##
+ # Addressable::Template makes no distinction between `==` and `eql?`.
+ #
+ # @see #==
+ alias_method :eql?, :==
+
+ ##
+ # Extracts a mapping from the URI using a URI Template pattern.
+ #
+ # @param [Addressable::URI, #to_str] uri
+ # The URI to extract from.
+ #
+ # @param [#restore, #match] processor
+ # A template processor object may optionally be supplied.
+ #
+ # The object should respond to either the restore or
+ # match messages or both. The restore method should
+ # take two parameters: `[String] name` and `[String] value`.
+ # The restore method should reverse any transformations that
+ # have been performed on the value to ensure a valid URI.
+ # The match method should take a single
+ # parameter: `[String] name`. The match method should return
+ # a String containing a regular expression capture group for
+ # matching on that particular variable. The default value is `".*?"`.
+ # The match method has no effect on multivariate operator
+ # expansions.
+ #
+ # @return [Hash, NilClass]
+ # The Hash mapping that was extracted from the URI, or
+ # nil if the URI didn't match the template.
+ #
+ # @example
+ # class ExampleProcessor
+ # def self.restore(name, value)
+ # return value.gsub(/\+/, " ") if name == "query"
+ # return value
+ # end
+ #
+ # def self.match(name)
+ # return ".*?" if name == "first"
+ # return ".*"
+ # end
+ # end
+ #
+ # uri = Addressable::URI.parse(
+ # "http://example.com/search/an+example+search+query/"
+ # )
+ # Addressable::Template.new(
+ # "http://example.com/search/{query}/"
+ # ).extract(uri, ExampleProcessor)
+ # #=> {"query" => "an example search query"}
+ #
+ # uri = Addressable::URI.parse("http://example.com/a/b/c/")
+ # Addressable::Template.new(
+ # "http://example.com/{first}/{second}/"
+ # ).extract(uri, ExampleProcessor)
+ # #=> {"first" => "a", "second" => "b/c"}
+ #
+ # uri = Addressable::URI.parse("http://example.com/a/b/c/")
+ # Addressable::Template.new(
+ # "http://example.com/{first}/{-list|/|second}/"
+ # ).extract(uri)
+ # #=> {"first" => "a", "second" => ["b", "c"]}
+ def extract(uri, processor=nil)
+ match_data = self.match(uri, processor)
+ return (match_data ? match_data.mapping : nil)
+ end
+
+ ##
+ # Extracts match data from the URI using a URI Template pattern.
+ #
+ # @param [Addressable::URI, #to_str] uri
+ # The URI to extract from.
+ #
+ # @param [#restore, #match] processor
+ # A template processor object may optionally be supplied.
+ #
+ # The object should respond to either the restore or
+ # match messages or both. The restore method should
+ # take two parameters: `[String] name` and `[String] value`.
+ # The restore method should reverse any transformations that
+ # have been performed on the value to ensure a valid URI.
+ # The match method should take a single
+ # parameter: `[String] name`. The match method should return
+ # a String containing a regular expression capture group for
+ # matching on that particular variable. The default value is `".*?"`.
+ # The match method has no effect on multivariate operator
+ # expansions.
+ #
+ # @return [Hash, NilClass]
+ # The Hash mapping that was extracted from the URI, or
+ # nil if the URI didn't match the template.
+ #
+ # @example
+ # class ExampleProcessor
+ # def self.restore(name, value)
+ # return value.gsub(/\+/, " ") if name == "query"
+ # return value
+ # end
+ #
+ # def self.match(name)
+ # return ".*?" if name == "first"
+ # return ".*"
+ # end
+ # end
+ #
+ # uri = Addressable::URI.parse(
+ # "http://example.com/search/an+example+search+query/"
+ # )
+ # match = Addressable::Template.new(
+ # "http://example.com/search/{query}/"
+ # ).match(uri, ExampleProcessor)
+ # match.variables
+ # #=> ["query"]
+ # match.captures
+ # #=> ["an example search query"]
+ #
+ # uri = Addressable::URI.parse("http://example.com/a/b/c/")
+ # match = Addressable::Template.new(
+ # "http://example.com/{first}/{+second}/"
+ # ).match(uri, ExampleProcessor)
+ # match.variables
+ # #=> ["first", "second"]
+ # match.captures
+ # #=> ["a", "b/c"]
+ #
+ # uri = Addressable::URI.parse("http://example.com/a/b/c/")
+ # match = Addressable::Template.new(
+ # "http://example.com/{first}{/second*}/"
+ # ).match(uri)
+ # match.variables
+ # #=> ["first", "second"]
+ # match.captures
+ # #=> ["a", ["b", "c"]]
+ def match(uri, processor=nil)
+ uri = Addressable::URI.parse(uri) unless uri.is_a?(Addressable::URI)
+ mapping = {}
+
+ # First, we need to process the pattern, and extract the values.
+ expansions, expansion_regexp =
+ parse_template_pattern(pattern, processor)
+
+ return nil unless uri.to_str.match(expansion_regexp)
+ unparsed_values = uri.to_str.scan(expansion_regexp).flatten
+
+ if uri.to_str == pattern
+ return Addressable::Template::MatchData.new(uri, self, mapping)
+ elsif expansions.size > 0
+ index = 0
+ expansions.each do |expansion|
+ _, operator, varlist = *expansion.match(EXPRESSION)
+ varlist.split(',').each do |varspec|
+ _, name, modifier = *varspec.match(VARSPEC)
+ mapping[name] ||= nil
+ case operator
+ when nil, '+', '#', '/', '.'
+ unparsed_value = unparsed_values[index]
+ name = varspec[VARSPEC, 1]
+ value = unparsed_value
+ value = value.split(JOINERS[operator]) if value && modifier == '*'
+ when ';', '?', '&'
+ if modifier == '*'
+ if unparsed_values[index]
+ value = unparsed_values[index].split(JOINERS[operator])
+ value = value.inject({}) do |acc, v|
+ key, val = v.split('=')
+ val = "" if val.nil?
+ acc[key] = val
+ acc
+ end
+ end
+ else
+ if (unparsed_values[index])
+ name, value = unparsed_values[index].split('=')
+ value = "" if value.nil?
+ end
+ end
+ end
+ if processor != nil && processor.respond_to?(:restore)
+ value = processor.restore(name, value)
+ end
+ if processor == nil
+ if value.is_a?(Hash)
+ value = value.inject({}){|acc, (k, v)|
+ acc[Addressable::URI.unencode_component(k)] =
+ Addressable::URI.unencode_component(v)
+ acc
+ }
+ elsif value.is_a?(Array)
+ value = value.map{|v| Addressable::URI.unencode_component(v) }
+ else
+ value = Addressable::URI.unencode_component(value)
+ end
+ end
+ if !mapping.has_key?(name) || mapping[name].nil?
+ # Doesn't exist, set to value (even if value is nil)
+ mapping[name] = value
+ end
+ index = index + 1
+ end
+ end
+ return Addressable::Template::MatchData.new(uri, self, mapping)
+ else
+ return nil
+ end
+ end
+
+ ##
+ # Expands a URI template into another URI template.
+ #
+ # @param [Hash] mapping The mapping that corresponds to the pattern.
+ # @param [#validate, #transform] processor
+ # An optional processor object may be supplied.
+ # @param [Boolean] normalize_values
+ # Optional flag to enable/disable unicode normalization. Default: true
+ #
+ # The object should respond to either the validate or
+ # transform messages or both. Both the validate and
+ # transform methods should take two parameters: name and
+ # value. The validate method should return true
+ # or false; true if the value of the variable is valid,
+ # false otherwise. An InvalidTemplateValueError
+ # exception will be raised if the value is invalid. The transform
+ # method should return the transformed variable value as a String.
+ # If a transform method is used, the value will not be percent
+ # encoded automatically. Unicode normalization will be performed both
+ # before and after sending the value to the transform method.
+ #
+ # @return [Addressable::Template] The partially expanded URI template.
+ #
+ # @example
+ # Addressable::Template.new(
+ # "http://example.com/{one}/{two}/"
+ # ).partial_expand({"one" => "1"}).pattern
+ # #=> "http://example.com/1/{two}/"
+ #
+ # Addressable::Template.new(
+ # "http://example.com/{?one,two}/"
+ # ).partial_expand({"one" => "1"}).pattern
+ # #=> "http://example.com/?one=1{&two}/"
+ #
+ # Addressable::Template.new(
+ # "http://example.com/{?one,two,three}/"
+ # ).partial_expand({"one" => "1", "three" => 3}).pattern
+ # #=> "http://example.com/?one=1{&two}&three=3"
+ def partial_expand(mapping, processor=nil, normalize_values=true)
+ result = self.pattern.dup
+ mapping = normalize_keys(mapping)
+ result.gsub!( EXPRESSION ) do |capture|
+ transform_partial_capture(mapping, capture, processor, normalize_values)
+ end
+ return Addressable::Template.new(result)
+ end
+
+ ##
+ # Expands a URI template into a full URI.
+ #
+ # @param [Hash] mapping The mapping that corresponds to the pattern.
+ # @param [#validate, #transform] processor
+ # An optional processor object may be supplied.
+ # @param [Boolean] normalize_values
+ # Optional flag to enable/disable unicode normalization. Default: true
+ #
+ # The object should respond to either the validate or
+ # transform messages or both. Both the validate and
+ # transform methods should take two parameters: name and
+ # value. The validate method should return true
+ # or false; true if the value of the variable is valid,
+ # false otherwise. An InvalidTemplateValueError
+ # exception will be raised if the value is invalid. The transform
+ # method should return the transformed variable value as a String.
+ # If a transform method is used, the value will not be percent
+ # encoded automatically. Unicode normalization will be performed both
+ # before and after sending the value to the transform method.
+ #
+ # @return [Addressable::URI] The expanded URI template.
+ #
+ # @example
+ # class ExampleProcessor
+ # def self.validate(name, value)
+ # return !!(value =~ /^[\w ]+$/) if name == "query"
+ # return true
+ # end
+ #
+ # def self.transform(name, value)
+ # return value.gsub(/ /, "+") if name == "query"
+ # return value
+ # end
+ # end
+ #
+ # Addressable::Template.new(
+ # "http://example.com/search/{query}/"
+ # ).expand(
+ # {"query" => "an example search query"},
+ # ExampleProcessor
+ # ).to_str
+ # #=> "http://example.com/search/an+example+search+query/"
+ #
+ # Addressable::Template.new(
+ # "http://example.com/search/{query}/"
+ # ).expand(
+ # {"query" => "an example search query"}
+ # ).to_str
+ # #=> "http://example.com/search/an%20example%20search%20query/"
+ #
+ # Addressable::Template.new(
+ # "http://example.com/search/{query}/"
+ # ).expand(
+ # {"query" => "bogus!"},
+ # ExampleProcessor
+ # ).to_str
+ # #=> Addressable::Template::InvalidTemplateValueError
+ def expand(mapping, processor=nil, normalize_values=true)
+ result = self.pattern.dup
+ mapping = normalize_keys(mapping)
+ result.gsub!( EXPRESSION ) do |capture|
+ transform_capture(mapping, capture, processor, normalize_values)
+ end
+ return Addressable::URI.parse(result)
+ end
+
+ ##
+ # Returns an Array of variables used within the template pattern.
+ # The variables are listed in the Array in the order they appear within
+ # the pattern. Multiple occurrences of a variable within a pattern are
+ # not represented in this Array.
+ #
+ # @return [Array] The variables present in the template's pattern.
+ def variables
+ @variables ||= ordered_variable_defaults.map { |var, val| var }.uniq
+ end
+ alias_method :keys, :variables
+ alias_method :names, :variables
+
+ ##
+ # Returns a mapping of variables to their default values specified
+ # in the template. Variables without defaults are not returned.
+ #
+ # @return [Hash] Mapping of template variables to their defaults
+ def variable_defaults
+ @variable_defaults ||=
+ Hash[*ordered_variable_defaults.reject { |k, v| v.nil? }.flatten]
+ end
+
+ ##
+ # Coerces a template into a `Regexp` object. This regular expression will
+ # behave very similarly to the actual template, and should match the same
+ # URI values, but it cannot fully handle, for example, values that would
+ # extract to an `Array`.
+ #
+ # @return [Regexp] A regular expression which should match the template.
+ def to_regexp
+ _, source = parse_template_pattern(pattern)
+ Regexp.new(source)
+ end
+
+ ##
+ # Returns the source of the coerced `Regexp`.
+ #
+ # @return [String] The source of the `Regexp` given by {#to_regexp}.
+ #
+ # @api private
+ def source
+ self.to_regexp.source
+ end
+
+ ##
+ # Returns the named captures of the coerced `Regexp`.
+ #
+ # @return [Hash] The named captures of the `Regexp` given by {#to_regexp}.
+ #
+ # @api private
+ def named_captures
+ self.to_regexp.named_captures
+ end
+
+ private
+ def ordered_variable_defaults
+ @ordered_variable_defaults ||= begin
+ expansions, _ = parse_template_pattern(pattern)
+ expansions.map do |capture|
+ _, _, varlist = *capture.match(EXPRESSION)
+ varlist.split(',').map do |varspec|
+ varspec[VARSPEC, 1]
+ end
+ end.flatten
+ end
+ end
+
+
+ ##
+ # Loops through each capture and expands any values available in mapping
+ #
+ # @param [Hash] mapping
+ # Set of keys to expand
+ # @param [String] capture
+ # The expression to expand
+ # @param [#validate, #transform] processor
+ # An optional processor object may be supplied.
+ # @param [Boolean] normalize_values
+ # Optional flag to enable/disable unicode normalization. Default: true
+ #
+ # The object should respond to either the validate or
+ # transform messages or both. Both the validate and
+ # transform methods should take two parameters: name and
+ # value. The validate method should return true
+ # or false; true if the value of the variable is valid,
+ # false otherwise. An InvalidTemplateValueError exception
+ # will be raised if the value is invalid. The transform method
+ # should return the transformed variable value as a String. If a
+ # transform method is used, the value will not be percent encoded
+ # automatically. Unicode normalization will be performed both before and
+ # after sending the value to the transform method.
+ #
+ # @return [String] The expanded expression
+ def transform_partial_capture(mapping, capture, processor = nil,
+ normalize_values = true)
+ _, operator, varlist = *capture.match(EXPRESSION)
+
+ vars = varlist.split(",")
+
+ if operator == "?"
+ # partial expansion of form style query variables sometimes requires a
+ # slight reordering of the variables to produce a valid url.
+ first_to_expand = vars.find { |varspec|
+ _, name, _ = *varspec.match(VARSPEC)
+ mapping.key?(name) && !mapping[name].nil?
+ }
+
+ vars = [first_to_expand] + vars.reject {|varspec| varspec == first_to_expand} if first_to_expand
+ end
+
+ vars.
+ inject("".dup) do |acc, varspec|
+ _, name, _ = *varspec.match(VARSPEC)
+ next_val = if mapping.key? name
+ transform_capture(mapping, "{#{operator}#{varspec}}",
+ processor, normalize_values)
+ else
+ "{#{operator}#{varspec}}"
+ end
+ # If we've already expanded at least one '?' operator with non-empty
+ # value, change to '&'
+ operator = "&" if (operator == "?") && (next_val != "")
+ acc << next_val
+ end
+ end
+
+ ##
+ # Transforms a mapped value so that values can be substituted into the
+ # template.
+ #
+ # @param [Hash] mapping The mapping to replace captures
+ # @param [String] capture
+ # The expression to replace
+ # @param [#validate, #transform] processor
+ # An optional processor object may be supplied.
+ # @param [Boolean] normalize_values
+ # Optional flag to enable/disable unicode normalization. Default: true
+ #
+ #
+ # The object should respond to either the validate or
+ # transform messages or both. Both the validate and
+ # transform methods should take two parameters: name and
+ # value. The validate method should return true
+ # or false; true if the value of the variable is valid,
+ # false otherwise. An InvalidTemplateValueError exception
+ # will be raised if the value is invalid. The transform method
+ # should return the transformed variable value as a String. If a
+ # transform method is used, the value will not be percent encoded
+ # automatically. Unicode normalization will be performed both before and
+ # after sending the value to the transform method.
+ #
+ # @return [String] The expanded expression
+ def transform_capture(mapping, capture, processor=nil,
+ normalize_values=true)
+ _, operator, varlist = *capture.match(EXPRESSION)
+ return_value = varlist.split(',').inject([]) do |acc, varspec|
+ _, name, modifier = *varspec.match(VARSPEC)
+ value = mapping[name]
+ unless value == nil || value == {}
+ allow_reserved = %w(+ #).include?(operator)
+ # Common primitives where the .to_s output is well-defined
+ if Numeric === value || Symbol === value ||
+ value == true || value == false
+ value = value.to_s
+ end
+ length = modifier.gsub(':', '').to_i if modifier =~ /^:\d+/
+
+ unless (Hash === value) ||
+ value.respond_to?(:to_ary) || value.respond_to?(:to_str)
+ raise TypeError,
+ "Can't convert #{value.class} into String or Array."
+ end
+
+ value = normalize_value(value) if normalize_values
+
+ if processor == nil || !processor.respond_to?(:transform)
+ # Handle percent escaping
+ if allow_reserved
+ encode_map =
+ Addressable::URI::CharacterClasses::RESERVED +
+ Addressable::URI::CharacterClasses::UNRESERVED
+ else
+ encode_map = Addressable::URI::CharacterClasses::UNRESERVED
+ end
+ if value.kind_of?(Array)
+ transformed_value = value.map do |val|
+ if length
+ Addressable::URI.encode_component(val[0...length], encode_map)
+ else
+ Addressable::URI.encode_component(val, encode_map)
+ end
+ end
+ unless modifier == "*"
+ transformed_value = transformed_value.join(',')
+ end
+ elsif value.kind_of?(Hash)
+ transformed_value = value.map do |key, val|
+ if modifier == "*"
+ "#{
+ Addressable::URI.encode_component( key, encode_map)
+ }=#{
+ Addressable::URI.encode_component( val, encode_map)
+ }"
+ else
+ "#{
+ Addressable::URI.encode_component( key, encode_map)
+ },#{
+ Addressable::URI.encode_component( val, encode_map)
+ }"
+ end
+ end
+ unless modifier == "*"
+ transformed_value = transformed_value.join(',')
+ end
+ else
+ if length
+ transformed_value = Addressable::URI.encode_component(
+ value[0...length], encode_map)
+ else
+ transformed_value = Addressable::URI.encode_component(
+ value, encode_map)
+ end
+ end
+ end
+
+ # Process, if we've got a processor
+ if processor != nil
+ if processor.respond_to?(:validate)
+ if !processor.validate(name, value)
+ display_value = value.kind_of?(Array) ? value.inspect : value
+ raise InvalidTemplateValueError,
+ "#{name}=#{display_value} is an invalid template value."
+ end
+ end
+ if processor.respond_to?(:transform)
+ transformed_value = processor.transform(name, value)
+ if normalize_values
+ transformed_value = normalize_value(transformed_value)
+ end
+ end
+ end
+ acc << [name, transformed_value]
+ end
+ acc
+ end
+ return "" if return_value.empty?
+ join_values(operator, return_value)
+ end
+
+ ##
+ # Takes a set of values, and joins them together based on the
+ # operator.
+ #
+ # @param [String, Nil] operator One of the operators from the set
+ # (?,&,+,#,;,/,.), or nil if there wasn't one.
+ # @param [Array] return_value
+ # The set of return values (as [variable_name, value] tuples) that will
+ # be joined together.
+ #
+ # @return [String] The transformed mapped value
+ def join_values(operator, return_value)
+ leader = LEADERS.fetch(operator, '')
+ joiner = JOINERS.fetch(operator, ',')
+ case operator
+ when '&', '?'
+ leader + return_value.map{|k,v|
+ if v.is_a?(Array) && v.first =~ /=/
+ v.join(joiner)
+ elsif v.is_a?(Array)
+ v.map{|inner_value| "#{k}=#{inner_value}"}.join(joiner)
+ else
+ "#{k}=#{v}"
+ end
+ }.join(joiner)
+ when ';'
+ return_value.map{|k,v|
+ if v.is_a?(Array) && v.first =~ /=/
+ ';' + v.join(";")
+ elsif v.is_a?(Array)
+ ';' + v.map{|inner_value| "#{k}=#{inner_value}"}.join(";")
+ else
+ v && v != '' ? ";#{k}=#{v}" : ";#{k}"
+ end
+ }.join
+ else
+ leader + return_value.map{|k,v| v}.join(joiner)
+ end
+ end
+
+ ##
+ # Takes a set of values, and joins them together based on the
+ # operator.
+ #
+ # @param [Hash, Array, String] value
+ # Normalizes keys and values with IDNA#unicode_normalize_kc
+ #
+ # @return [Hash, Array, String] The normalized values
+ def normalize_value(value)
+ unless value.is_a?(Hash)
+ value = value.respond_to?(:to_ary) ? value.to_ary : value.to_str
+ end
+
+ # Handle unicode normalization
+ if value.kind_of?(Array)
+ value.map! { |val| Addressable::IDNA.unicode_normalize_kc(val) }
+ elsif value.kind_of?(Hash)
+ value = value.inject({}) { |acc, (k, v)|
+ acc[Addressable::IDNA.unicode_normalize_kc(k)] =
+ Addressable::IDNA.unicode_normalize_kc(v)
+ acc
+ }
+ else
+ value = Addressable::IDNA.unicode_normalize_kc(value)
+ end
+ value
+ end
+
+ ##
+ # Generates a hash with string keys
+ #
+ # @param [Hash] mapping A mapping hash to normalize
+ #
+ # @return [Hash]
+ # A hash with stringified keys
+ def normalize_keys(mapping)
+ return mapping.inject({}) do |accu, pair|
+ name, value = pair
+ if Symbol === name
+ name = name.to_s
+ elsif name.respond_to?(:to_str)
+ name = name.to_str
+ else
+ raise TypeError,
+ "Can't convert #{name.class} into String."
+ end
+ accu[name] = value
+ accu
+ end
+ end
+
+ ##
+ # Generates the Regexp that parses a template pattern. Memoizes the
+ # value if template processor not set (processors may not be deterministic)
+ #
+ # @param [String] pattern The URI template pattern.
+ # @param [#match] processor The template processor to use.
+ #
+ # @return [Array, Regexp]
+ # An array of expansion variables nad a regular expression which may be
+ # used to parse a template pattern
+ def parse_template_pattern(pattern, processor = nil)
+ if processor.nil? && pattern == @pattern
+ @cached_template_parse ||=
+ parse_new_template_pattern(pattern, processor)
+ else
+ parse_new_template_pattern(pattern, processor)
+ end
+ end
+
+ ##
+ # Generates the Regexp that parses a template pattern.
+ #
+ # @param [String] pattern The URI template pattern.
+ # @param [#match] processor The template processor to use.
+ #
+ # @return [Array, Regexp]
+ # An array of expansion variables nad a regular expression which may be
+ # used to parse a template pattern
+ def parse_new_template_pattern(pattern, processor = nil)
+ # Escape the pattern. The two gsubs restore the escaped curly braces
+ # back to their original form. Basically, escape everything that isn't
+ # within an expansion.
+ escaped_pattern = Regexp.escape(
+ pattern
+ ).gsub(/\\\{(.*?)\\\}/) do |escaped|
+ escaped.gsub(/\\(.)/, "\\1")
+ end
+
+ expansions = []
+
+ # Create a regular expression that captures the values of the
+ # variables in the URI.
+ regexp_string = escaped_pattern.gsub( EXPRESSION ) do |expansion|
+
+ expansions << expansion
+ _, operator, varlist = *expansion.match(EXPRESSION)
+ leader = Regexp.escape(LEADERS.fetch(operator, ''))
+ joiner = Regexp.escape(JOINERS.fetch(operator, ','))
+ combined = varlist.split(',').map do |varspec|
+ _, name, modifier = *varspec.match(VARSPEC)
+
+ result = processor && processor.respond_to?(:match) ? processor.match(name) : nil
+ if result
+ "(?<#{name}>#{ result })"
+ else
+ group = case operator
+ when '+'
+ "#{ RESERVED }*?"
+ when '#'
+ "#{ RESERVED }*?"
+ when '/'
+ "#{ UNRESERVED }*?"
+ when '.'
+ "#{ UNRESERVED.gsub('\.', '') }*?"
+ when ';'
+ "#{ UNRESERVED }*=?#{ UNRESERVED }*?"
+ when '?'
+ "#{ UNRESERVED }*=#{ UNRESERVED }*?"
+ when '&'
+ "#{ UNRESERVED }*=#{ UNRESERVED }*?"
+ else
+ "#{ UNRESERVED }*?"
+ end
+ if modifier == '*'
+ "(?<#{name}>#{group}(?:#{joiner}?#{group})*)?"
+ else
+ "(?<#{name}>#{group})?"
+ end
+ end
+ end.join("#{joiner}?")
+ "(?:|#{leader}#{combined})"
+ end
+
+ # Ensure that the regular expression matches the whole URI.
+ regexp_string = "^#{regexp_string}$"
+ return expansions, Regexp.new(regexp_string)
+ end
+
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/uri.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/uri.rb
new file mode 100644
index 000000000..6b5f4fa7b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/uri.rb
@@ -0,0 +1,2556 @@
+# frozen_string_literal: true
+
+# encoding:utf-8
+#--
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#++
+
+
+require "addressable/version"
+require "addressable/idna"
+require "public_suffix"
+
+##
+# Addressable is a library for processing links and URIs.
+module Addressable
+ ##
+ # This is an implementation of a URI parser based on
+ # RFC 3986,
+ # RFC 3987.
+ class URI
+ ##
+ # Raised if something other than a uri is supplied.
+ class InvalidURIError < StandardError
+ end
+
+ ##
+ # Container for the character classes specified in
+ # RFC 3986.
+ module CharacterClasses
+ ALPHA = "a-zA-Z"
+ DIGIT = "0-9"
+ GEN_DELIMS = "\\:\\/\\?\\#\\[\\]\\@"
+ SUB_DELIMS = "\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\="
+ RESERVED = GEN_DELIMS + SUB_DELIMS
+ UNRESERVED = ALPHA + DIGIT + "\\-\\.\\_\\~"
+ PCHAR = UNRESERVED + SUB_DELIMS + "\\:\\@"
+ SCHEME = ALPHA + DIGIT + "\\-\\+\\."
+ HOST = UNRESERVED + SUB_DELIMS + "\\[\\:\\]"
+ AUTHORITY = PCHAR + "\\[\\:\\]"
+ PATH = PCHAR + "\\/"
+ QUERY = PCHAR + "\\/\\?"
+ FRAGMENT = PCHAR + "\\/\\?"
+ end
+
+ module NormalizeCharacterClasses
+ HOST = /[^#{CharacterClasses::HOST}]/
+ UNRESERVED = /[^#{CharacterClasses::UNRESERVED}]/
+ PCHAR = /[^#{CharacterClasses::PCHAR}]/
+ SCHEME = /[^#{CharacterClasses::SCHEME}]/
+ FRAGMENT = /[^#{CharacterClasses::FRAGMENT}]/
+ QUERY = %r{[^a-zA-Z0-9\-\.\_\~\!\$\'\(\)\*\+\,\=\:\@\/\?%]|%(?!2B|2b)}
+ end
+
+ SLASH = '/'
+ EMPTY_STR = ''
+
+ URIREGEX = /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/
+
+ PORT_MAPPING = {
+ "http" => 80,
+ "https" => 443,
+ "ftp" => 21,
+ "tftp" => 69,
+ "sftp" => 22,
+ "ssh" => 22,
+ "svn+ssh" => 22,
+ "telnet" => 23,
+ "nntp" => 119,
+ "gopher" => 70,
+ "wais" => 210,
+ "ldap" => 389,
+ "prospero" => 1525
+ }.freeze
+
+ ##
+ # Returns a URI object based on the parsed string.
+ #
+ # @param [String, Addressable::URI, #to_str] uri
+ # The URI string to parse.
+ # No parsing is performed if the object is already an
+ # Addressable::URI
.
+ #
+ # @return [Addressable::URI] The parsed URI.
+ def self.parse(uri)
+ # If we were given nil, return nil.
+ return nil unless uri
+ # If a URI object is passed, just return itself.
+ return uri.dup if uri.kind_of?(self)
+
+ # If a URI object of the Ruby standard library variety is passed,
+ # convert it to a string, then parse the string.
+ # We do the check this way because we don't want to accidentally
+ # cause a missing constant exception to be thrown.
+ if uri.class.name =~ /^URI\b/
+ uri = uri.to_s
+ end
+
+ # Otherwise, convert to a String
+ begin
+ uri = uri.to_str
+ rescue TypeError, NoMethodError
+ raise TypeError, "Can't convert #{uri.class} into String."
+ end if not uri.is_a? String
+
+ # This Regexp supplied as an example in RFC 3986, and it works great.
+ scan = uri.scan(URIREGEX)
+ fragments = scan[0]
+ scheme = fragments[1]
+ authority = fragments[3]
+ path = fragments[4]
+ query = fragments[6]
+ fragment = fragments[8]
+ user = nil
+ password = nil
+ host = nil
+ port = nil
+ if authority != nil
+ # The Regexp above doesn't split apart the authority.
+ userinfo = authority[/^([^\[\]]*)@/, 1]
+ if userinfo != nil
+ user = userinfo.strip[/^([^:]*):?/, 1]
+ password = userinfo.strip[/:(.*)$/, 1]
+ end
+ host = authority.sub(
+ /^([^\[\]]*)@/, EMPTY_STR
+ ).sub(
+ /:([^:@\[\]]*?)$/, EMPTY_STR
+ )
+ port = authority[/:([^:@\[\]]*?)$/, 1]
+ end
+ if port == EMPTY_STR
+ port = nil
+ end
+
+ return new(
+ :scheme => scheme,
+ :user => user,
+ :password => password,
+ :host => host,
+ :port => port,
+ :path => path,
+ :query => query,
+ :fragment => fragment
+ )
+ end
+
+ ##
+ # Converts an input to a URI. The input does not have to be a valid
+ # URI — the method will use heuristics to guess what URI was intended.
+ # This is not standards-compliant, merely user-friendly.
+ #
+ # @param [String, Addressable::URI, #to_str] uri
+ # The URI string to parse.
+ # No parsing is performed if the object is already an
+ # Addressable::URI
.
+ # @param [Hash] hints
+ # A Hash
of hints to the heuristic parser.
+ # Defaults to {:scheme => "http"}
.
+ #
+ # @return [Addressable::URI] The parsed URI.
+ def self.heuristic_parse(uri, hints={})
+ # If we were given nil, return nil.
+ return nil unless uri
+ # If a URI object is passed, just return itself.
+ return uri.dup if uri.kind_of?(self)
+
+ # If a URI object of the Ruby standard library variety is passed,
+ # convert it to a string, then parse the string.
+ # We do the check this way because we don't want to accidentally
+ # cause a missing constant exception to be thrown.
+ if uri.class.name =~ /^URI\b/
+ uri = uri.to_s
+ end
+
+ if !uri.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{uri.class} into String."
+ end
+ # Otherwise, convert to a String
+ uri = uri.to_str.dup.strip
+ hints = {
+ :scheme => "http"
+ }.merge(hints)
+ case uri
+ when /^http:\//i
+ uri.sub!(/^http:\/+/i, "http://")
+ when /^https:\//i
+ uri.sub!(/^https:\/+/i, "https://")
+ when /^feed:\/+http:\//i
+ uri.sub!(/^feed:\/+http:\/+/i, "feed:http://")
+ when /^feed:\//i
+ uri.sub!(/^feed:\/+/i, "feed://")
+ when %r[^file:/{4}]i
+ uri.sub!(%r[^file:/+]i, "file:////")
+ when %r[^file://localhost/]i
+ uri.sub!(%r[^file://localhost/+]i, "file:///")
+ when %r[^file:/+]i
+ uri.sub!(%r[^file:/+]i, "file:///")
+ when /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/
+ uri.sub!(/^/, hints[:scheme] + "://")
+ when /\A\d+\..*:\d+\z/
+ uri = "#{hints[:scheme]}://#{uri}"
+ end
+ match = uri.match(URIREGEX)
+ fragments = match.captures
+ authority = fragments[3]
+ if authority && authority.length > 0
+ new_authority = authority.tr("\\", "/").gsub(" ", "%20")
+ # NOTE: We want offset 4, not 3!
+ offset = match.offset(4)
+ uri = uri.dup
+ uri[offset[0]...offset[1]] = new_authority
+ end
+ parsed = self.parse(uri)
+ if parsed.scheme =~ /^[^\/?#\.]+\.[^\/?#]+$/
+ parsed = self.parse(hints[:scheme] + "://" + uri)
+ end
+ if parsed.path.include?(".")
+ if parsed.path[/\b@\b/]
+ parsed.scheme = "mailto" unless parsed.scheme
+ elsif new_host = parsed.path[/^([^\/]+\.[^\/]*)/, 1]
+ parsed.defer_validation do
+ new_path = parsed.path.sub(
+ Regexp.new("^" + Regexp.escape(new_host)), EMPTY_STR)
+ parsed.host = new_host
+ parsed.path = new_path
+ parsed.scheme = hints[:scheme] unless parsed.scheme
+ end
+ end
+ end
+ return parsed
+ end
+
+ ##
+ # Converts a path to a file scheme URI. If the path supplied is
+ # relative, it will be returned as a relative URI. If the path supplied
+ # is actually a non-file URI, it will parse the URI as if it had been
+ # parsed with Addressable::URI.parse
. Handles all of the
+ # various Microsoft-specific formats for specifying paths.
+ #
+ # @param [String, Addressable::URI, #to_str] path
+ # Typically a String
path to a file or directory, but
+ # will return a sensible return value if an absolute URI is supplied
+ # instead.
+ #
+ # @return [Addressable::URI]
+ # The parsed file scheme URI or the original URI if some other URI
+ # scheme was provided.
+ #
+ # @example
+ # base = Addressable::URI.convert_path("/absolute/path/")
+ # uri = Addressable::URI.convert_path("relative/path")
+ # (base + uri).to_s
+ # #=> "file:///absolute/path/relative/path"
+ #
+ # Addressable::URI.convert_path(
+ # "c:\\windows\\My Documents 100%20\\foo.txt"
+ # ).to_s
+ # #=> "file:///c:/windows/My%20Documents%20100%20/foo.txt"
+ #
+ # Addressable::URI.convert_path("http://example.com/").to_s
+ # #=> "http://example.com/"
+ def self.convert_path(path)
+ # If we were given nil, return nil.
+ return nil unless path
+ # If a URI object is passed, just return itself.
+ return path if path.kind_of?(self)
+ if !path.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{path.class} into String."
+ end
+ # Otherwise, convert to a String
+ path = path.to_str.strip
+
+ path.sub!(/^file:\/?\/?/, EMPTY_STR) if path =~ /^file:\/?\/?/
+ path = SLASH + path if path =~ /^([a-zA-Z])[\|:]/
+ uri = self.parse(path)
+
+ if uri.scheme == nil
+ # Adjust windows-style uris
+ uri.path.sub!(/^\/?([a-zA-Z])[\|:][\\\/]/) do
+ "/#{$1.downcase}:/"
+ end
+ uri.path.tr!("\\", SLASH)
+ if File.exist?(uri.path) &&
+ File.stat(uri.path).directory?
+ uri.path.chomp!(SLASH)
+ uri.path = uri.path + '/'
+ end
+
+ # If the path is absolute, set the scheme and host.
+ if uri.path.start_with?(SLASH)
+ uri.scheme = "file"
+ uri.host = EMPTY_STR
+ end
+ uri.normalize!
+ end
+
+ return uri
+ end
+
+ ##
+ # Joins several URIs together.
+ #
+ # @param [String, Addressable::URI, #to_str] *uris
+ # The URIs to join.
+ #
+ # @return [Addressable::URI] The joined URI.
+ #
+ # @example
+ # base = "http://example.com/"
+ # uri = Addressable::URI.parse("relative/path")
+ # Addressable::URI.join(base, uri)
+ # #=> #
+ def self.join(*uris)
+ uri_objects = uris.collect do |uri|
+ if !uri.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{uri.class} into String."
+ end
+ uri.kind_of?(self) ? uri : self.parse(uri.to_str)
+ end
+ result = uri_objects.shift.dup
+ for uri in uri_objects
+ result.join!(uri)
+ end
+ return result
+ end
+
+ ##
+ # Tables used to optimize encoding operations in `self.encode_component`
+ # and `self.normalize_component`
+ SEQUENCE_ENCODING_TABLE = Hash.new do |hash, sequence|
+ hash[sequence] = sequence.unpack("C*").map do |c|
+ format("%02x", c)
+ end.join
+ end
+
+ SEQUENCE_UPCASED_PERCENT_ENCODING_TABLE = Hash.new do |hash, sequence|
+ hash[sequence] = sequence.unpack("C*").map do |c|
+ format("%%%02X", c)
+ end.join
+ end
+
+ ##
+ # Percent encodes a URI component.
+ #
+ # @param [String, #to_str] component The URI component to encode.
+ #
+ # @param [String, Regexp] character_class
+ # The characters which are not percent encoded. If a String
+ # is passed, the String
must be formatted as a regular
+ # expression character class. (Do not include the surrounding square
+ # brackets.) For example, "b-zB-Z0-9"
would cause
+ # everything but the letters 'b' through 'z' and the numbers '0' through
+ # '9' to be percent encoded. If a Regexp
is passed, the
+ # value /[^b-zB-Z0-9]/
would have the same effect. A set of
+ # useful String
values may be found in the
+ # Addressable::URI::CharacterClasses
module. The default
+ # value is the reserved plus unreserved character classes specified in
+ # RFC 3986.
+ #
+ # @param [Regexp] upcase_encoded
+ # A string of characters that may already be percent encoded, and whose
+ # encodings should be upcased. This allows normalization of percent
+ # encodings for characters not included in the
+ # character_class
.
+ #
+ # @return [String] The encoded component.
+ #
+ # @example
+ # Addressable::URI.encode_component("simple/example", "b-zB-Z0-9")
+ # => "simple%2Fex%61mple"
+ # Addressable::URI.encode_component("simple/example", /[^b-zB-Z0-9]/)
+ # => "simple%2Fex%61mple"
+ # Addressable::URI.encode_component(
+ # "simple/example", Addressable::URI::CharacterClasses::UNRESERVED
+ # )
+ # => "simple%2Fexample"
+ def self.encode_component(component, character_class=
+ CharacterClasses::RESERVED + CharacterClasses::UNRESERVED,
+ upcase_encoded='')
+ return nil if component.nil?
+
+ begin
+ if component.kind_of?(Symbol) ||
+ component.kind_of?(Numeric) ||
+ component.kind_of?(TrueClass) ||
+ component.kind_of?(FalseClass)
+ component = component.to_s
+ else
+ component = component.to_str
+ end
+ rescue TypeError, NoMethodError
+ raise TypeError, "Can't convert #{component.class} into String."
+ end if !component.is_a? String
+
+ if ![String, Regexp].include?(character_class.class)
+ raise TypeError,
+ "Expected String or Regexp, got #{character_class.inspect}"
+ end
+ if character_class.kind_of?(String)
+ character_class = /[^#{character_class}]/
+ end
+ # We can't perform regexps on invalid UTF sequences, but
+ # here we need to, so switch to ASCII.
+ component = component.dup
+ component.force_encoding(Encoding::ASCII_8BIT)
+ # Avoiding gsub! because there are edge cases with frozen strings
+ component = component.gsub(character_class) do |sequence|
+ SEQUENCE_UPCASED_PERCENT_ENCODING_TABLE[sequence]
+ end
+ if upcase_encoded.length > 0
+ upcase_encoded_chars = upcase_encoded.chars.map do |char|
+ SEQUENCE_ENCODING_TABLE[char]
+ end
+ component = component.gsub(/%(#{upcase_encoded_chars.join('|')})/,
+ &:upcase)
+ end
+ return component
+ end
+
+ class << self
+ alias_method :escape_component, :encode_component
+ end
+
+ ##
+ # Unencodes any percent encoded characters within a URI component.
+ # This method may be used for unencoding either components or full URIs,
+ # however, it is recommended to use the unencode_component
+ # alias when unencoding components.
+ #
+ # @param [String, Addressable::URI, #to_str] uri
+ # The URI or component to unencode.
+ #
+ # @param [Class] return_type
+ # The type of object to return.
+ # This value may only be set to String
or
+ # Addressable::URI
. All other values are invalid. Defaults
+ # to String
.
+ #
+ # @param [String] leave_encoded
+ # A string of characters to leave encoded. If a percent encoded character
+ # in this list is encountered then it will remain percent encoded.
+ #
+ # @return [String, Addressable::URI]
+ # The unencoded component or URI.
+ # The return type is determined by the return_type
+ # parameter.
+ def self.unencode(uri, return_type=String, leave_encoded='')
+ return nil if uri.nil?
+
+ begin
+ uri = uri.to_str
+ rescue NoMethodError, TypeError
+ raise TypeError, "Can't convert #{uri.class} into String."
+ end if !uri.is_a? String
+ if ![String, ::Addressable::URI].include?(return_type)
+ raise TypeError,
+ "Expected Class (String or Addressable::URI), " +
+ "got #{return_type.inspect}"
+ end
+ uri = uri.dup
+ # Seriously, only use UTF-8. I'm really not kidding!
+ uri.force_encoding("utf-8")
+
+ unless leave_encoded.empty?
+ leave_encoded = leave_encoded.dup.force_encoding("utf-8")
+ end
+
+ result = uri.gsub(/%[0-9a-f]{2}/iu) do |sequence|
+ c = sequence[1..3].to_i(16).chr
+ c.force_encoding("utf-8")
+ leave_encoded.include?(c) ? sequence : c
+ end
+ result.force_encoding("utf-8")
+ if return_type == String
+ return result
+ elsif return_type == ::Addressable::URI
+ return ::Addressable::URI.parse(result)
+ end
+ end
+
+ class << self
+ alias_method :unescape, :unencode
+ alias_method :unencode_component, :unencode
+ alias_method :unescape_component, :unencode
+ end
+
+
+ ##
+ # Normalizes the encoding of a URI component.
+ #
+ # @param [String, #to_str] component The URI component to encode.
+ #
+ # @param [String, Regexp] character_class
+ # The characters which are not percent encoded. If a String
+ # is passed, the String
must be formatted as a regular
+ # expression character class. (Do not include the surrounding square
+ # brackets.) For example, "b-zB-Z0-9"
would cause
+ # everything but the letters 'b' through 'z' and the numbers '0'
+ # through '9' to be percent encoded. If a Regexp
is passed,
+ # the value /[^b-zB-Z0-9]/
would have the same effect. A
+ # set of useful String
values may be found in the
+ # Addressable::URI::CharacterClasses
module. The default
+ # value is the reserved plus unreserved character classes specified in
+ # RFC 3986.
+ #
+ # @param [String] leave_encoded
+ # When character_class
is a String
then
+ # leave_encoded
is a string of characters that should remain
+ # percent encoded while normalizing the component; if they appear percent
+ # encoded in the original component, then they will be upcased ("%2f"
+ # normalized to "%2F") but otherwise left alone.
+ #
+ # @return [String] The normalized component.
+ #
+ # @example
+ # Addressable::URI.normalize_component("simpl%65/%65xampl%65", "b-zB-Z")
+ # => "simple%2Fex%61mple"
+ # Addressable::URI.normalize_component(
+ # "simpl%65/%65xampl%65", /[^b-zB-Z]/
+ # )
+ # => "simple%2Fex%61mple"
+ # Addressable::URI.normalize_component(
+ # "simpl%65/%65xampl%65",
+ # Addressable::URI::CharacterClasses::UNRESERVED
+ # )
+ # => "simple%2Fexample"
+ # Addressable::URI.normalize_component(
+ # "one%20two%2fthree%26four",
+ # "0-9a-zA-Z &/",
+ # "/"
+ # )
+ # => "one two%2Fthree&four"
+ def self.normalize_component(component, character_class=
+ CharacterClasses::RESERVED + CharacterClasses::UNRESERVED,
+ leave_encoded='')
+ return nil if component.nil?
+
+ begin
+ component = component.to_str
+ rescue NoMethodError, TypeError
+ raise TypeError, "Can't convert #{component.class} into String."
+ end if !component.is_a? String
+
+ if ![String, Regexp].include?(character_class.class)
+ raise TypeError,
+ "Expected String or Regexp, got #{character_class.inspect}"
+ end
+ if character_class.kind_of?(String)
+ leave_re = if leave_encoded.length > 0
+ character_class = "#{character_class}%" unless character_class.include?('%')
+
+ "|%(?!#{leave_encoded.chars.map do |char|
+ seq = SEQUENCE_ENCODING_TABLE[char]
+ [seq.upcase, seq.downcase]
+ end.flatten.join('|')})"
+ end
+
+ character_class = if leave_re
+ /[^#{character_class}]#{leave_re}/
+ else
+ /[^#{character_class}]/
+ end
+ end
+ # We can't perform regexps on invalid UTF sequences, but
+ # here we need to, so switch to ASCII.
+ component = component.dup
+ component.force_encoding(Encoding::ASCII_8BIT)
+ unencoded = self.unencode_component(component, String, leave_encoded)
+ begin
+ encoded = self.encode_component(
+ Addressable::IDNA.unicode_normalize_kc(unencoded),
+ character_class,
+ leave_encoded
+ )
+ rescue ArgumentError
+ encoded = self.encode_component(unencoded)
+ end
+ encoded.force_encoding(Encoding::UTF_8)
+ return encoded
+ end
+
+ ##
+ # Percent encodes any special characters in the URI.
+ #
+ # @param [String, Addressable::URI, #to_str] uri
+ # The URI to encode.
+ #
+ # @param [Class] return_type
+ # The type of object to return.
+ # This value may only be set to String
or
+ # Addressable::URI
. All other values are invalid. Defaults
+ # to String
.
+ #
+ # @return [String, Addressable::URI]
+ # The encoded URI.
+ # The return type is determined by the return_type
+ # parameter.
+ def self.encode(uri, return_type=String)
+ return nil if uri.nil?
+
+ begin
+ uri = uri.to_str
+ rescue NoMethodError, TypeError
+ raise TypeError, "Can't convert #{uri.class} into String."
+ end if !uri.is_a? String
+
+ if ![String, ::Addressable::URI].include?(return_type)
+ raise TypeError,
+ "Expected Class (String or Addressable::URI), " +
+ "got #{return_type.inspect}"
+ end
+ uri_object = uri.kind_of?(self) ? uri : self.parse(uri)
+ encoded_uri = Addressable::URI.new(
+ :scheme => self.encode_component(uri_object.scheme,
+ Addressable::URI::CharacterClasses::SCHEME),
+ :authority => self.encode_component(uri_object.authority,
+ Addressable::URI::CharacterClasses::AUTHORITY),
+ :path => self.encode_component(uri_object.path,
+ Addressable::URI::CharacterClasses::PATH),
+ :query => self.encode_component(uri_object.query,
+ Addressable::URI::CharacterClasses::QUERY),
+ :fragment => self.encode_component(uri_object.fragment,
+ Addressable::URI::CharacterClasses::FRAGMENT)
+ )
+ if return_type == String
+ return encoded_uri.to_s
+ elsif return_type == ::Addressable::URI
+ return encoded_uri
+ end
+ end
+
+ class << self
+ alias_method :escape, :encode
+ end
+
+ ##
+ # Normalizes the encoding of a URI. Characters within a hostname are
+ # not percent encoded to allow for internationalized domain names.
+ #
+ # @param [String, Addressable::URI, #to_str] uri
+ # The URI to encode.
+ #
+ # @param [Class] return_type
+ # The type of object to return.
+ # This value may only be set to String
or
+ # Addressable::URI
. All other values are invalid. Defaults
+ # to String
.
+ #
+ # @return [String, Addressable::URI]
+ # The encoded URI.
+ # The return type is determined by the return_type
+ # parameter.
+ def self.normalized_encode(uri, return_type=String)
+ begin
+ uri = uri.to_str
+ rescue NoMethodError, TypeError
+ raise TypeError, "Can't convert #{uri.class} into String."
+ end if !uri.is_a? String
+
+ if ![String, ::Addressable::URI].include?(return_type)
+ raise TypeError,
+ "Expected Class (String or Addressable::URI), " +
+ "got #{return_type.inspect}"
+ end
+ uri_object = uri.kind_of?(self) ? uri : self.parse(uri)
+ components = {
+ :scheme => self.unencode_component(uri_object.scheme),
+ :user => self.unencode_component(uri_object.user),
+ :password => self.unencode_component(uri_object.password),
+ :host => self.unencode_component(uri_object.host),
+ :port => (uri_object.port.nil? ? nil : uri_object.port.to_s),
+ :path => self.unencode_component(uri_object.path),
+ :query => self.unencode_component(uri_object.query),
+ :fragment => self.unencode_component(uri_object.fragment)
+ }
+ components.each do |key, value|
+ if value != nil
+ begin
+ components[key] =
+ Addressable::IDNA.unicode_normalize_kc(value.to_str)
+ rescue ArgumentError
+ # Likely a malformed UTF-8 character, skip unicode normalization
+ components[key] = value.to_str
+ end
+ end
+ end
+ encoded_uri = Addressable::URI.new(
+ :scheme => self.encode_component(components[:scheme],
+ Addressable::URI::CharacterClasses::SCHEME),
+ :user => self.encode_component(components[:user],
+ Addressable::URI::CharacterClasses::UNRESERVED),
+ :password => self.encode_component(components[:password],
+ Addressable::URI::CharacterClasses::UNRESERVED),
+ :host => components[:host],
+ :port => components[:port],
+ :path => self.encode_component(components[:path],
+ Addressable::URI::CharacterClasses::PATH),
+ :query => self.encode_component(components[:query],
+ Addressable::URI::CharacterClasses::QUERY),
+ :fragment => self.encode_component(components[:fragment],
+ Addressable::URI::CharacterClasses::FRAGMENT)
+ )
+ if return_type == String
+ return encoded_uri.to_s
+ elsif return_type == ::Addressable::URI
+ return encoded_uri
+ end
+ end
+
+ ##
+ # Encodes a set of key/value pairs according to the rules for the
+ # application/x-www-form-urlencoded
MIME type.
+ #
+ # @param [#to_hash, #to_ary] form_values
+ # The form values to encode.
+ #
+ # @param [TrueClass, FalseClass] sort
+ # Sort the key/value pairs prior to encoding.
+ # Defaults to false
.
+ #
+ # @return [String]
+ # The encoded value.
+ def self.form_encode(form_values, sort=false)
+ if form_values.respond_to?(:to_hash)
+ form_values = form_values.to_hash.to_a
+ elsif form_values.respond_to?(:to_ary)
+ form_values = form_values.to_ary
+ else
+ raise TypeError, "Can't convert #{form_values.class} into Array."
+ end
+
+ form_values = form_values.inject([]) do |accu, (key, value)|
+ if value.kind_of?(Array)
+ value.each do |v|
+ accu << [key.to_s, v.to_s]
+ end
+ else
+ accu << [key.to_s, value.to_s]
+ end
+ accu
+ end
+
+ if sort
+ # Useful for OAuth and optimizing caching systems
+ form_values = form_values.sort
+ end
+ escaped_form_values = form_values.map do |(key, value)|
+ # Line breaks are CRLF pairs
+ [
+ self.encode_component(
+ key.gsub(/(\r\n|\n|\r)/, "\r\n"),
+ CharacterClasses::UNRESERVED
+ ).gsub("%20", "+"),
+ self.encode_component(
+ value.gsub(/(\r\n|\n|\r)/, "\r\n"),
+ CharacterClasses::UNRESERVED
+ ).gsub("%20", "+")
+ ]
+ end
+ return escaped_form_values.map do |(key, value)|
+ "#{key}=#{value}"
+ end.join("&")
+ end
+
+ ##
+ # Decodes a String
according to the rules for the
+ # application/x-www-form-urlencoded
MIME type.
+ #
+ # @param [String, #to_str] encoded_value
+ # The form values to decode.
+ #
+ # @return [Array]
+ # The decoded values.
+ # This is not a Hash
because of the possibility for
+ # duplicate keys.
+ def self.form_unencode(encoded_value)
+ if !encoded_value.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{encoded_value.class} into String."
+ end
+ encoded_value = encoded_value.to_str
+ split_values = encoded_value.split("&").map do |pair|
+ pair.split("=", 2)
+ end
+ return split_values.map do |(key, value)|
+ [
+ key ? self.unencode_component(
+ key.gsub("+", "%20")).gsub(/(\r\n|\n|\r)/, "\n") : nil,
+ value ? (self.unencode_component(
+ value.gsub("+", "%20")).gsub(/(\r\n|\n|\r)/, "\n")) : nil
+ ]
+ end
+ end
+
+ ##
+ # Creates a new uri object from component parts.
+ #
+ # @option [String, #to_str] scheme The scheme component.
+ # @option [String, #to_str] user The user component.
+ # @option [String, #to_str] password The password component.
+ # @option [String, #to_str] userinfo
+ # The userinfo component. If this is supplied, the user and password
+ # components must be omitted.
+ # @option [String, #to_str] host The host component.
+ # @option [String, #to_str] port The port component.
+ # @option [String, #to_str] authority
+ # The authority component. If this is supplied, the user, password,
+ # userinfo, host, and port components must be omitted.
+ # @option [String, #to_str] path The path component.
+ # @option [String, #to_str] query The query component.
+ # @option [String, #to_str] fragment The fragment component.
+ #
+ # @return [Addressable::URI] The constructed URI object.
+ def initialize(options={})
+ if options.has_key?(:authority)
+ if (options.keys & [:userinfo, :user, :password, :host, :port]).any?
+ raise ArgumentError,
+ "Cannot specify both an authority and any of the components " +
+ "within the authority."
+ end
+ end
+ if options.has_key?(:userinfo)
+ if (options.keys & [:user, :password]).any?
+ raise ArgumentError,
+ "Cannot specify both a userinfo and either the user or password."
+ end
+ end
+
+ self.defer_validation do
+ # Bunch of crazy logic required because of the composite components
+ # like userinfo and authority.
+ self.scheme = options[:scheme] if options[:scheme]
+ self.user = options[:user] if options[:user]
+ self.password = options[:password] if options[:password]
+ self.userinfo = options[:userinfo] if options[:userinfo]
+ self.host = options[:host] if options[:host]
+ self.port = options[:port] if options[:port]
+ self.authority = options[:authority] if options[:authority]
+ self.path = options[:path] if options[:path]
+ self.query = options[:query] if options[:query]
+ self.query_values = options[:query_values] if options[:query_values]
+ self.fragment = options[:fragment] if options[:fragment]
+ end
+ self.to_s
+ end
+
+ ##
+ # Freeze URI, initializing instance variables.
+ #
+ # @return [Addressable::URI] The frozen URI object.
+ def freeze
+ self.normalized_scheme
+ self.normalized_user
+ self.normalized_password
+ self.normalized_userinfo
+ self.normalized_host
+ self.normalized_port
+ self.normalized_authority
+ self.normalized_site
+ self.normalized_path
+ self.normalized_query
+ self.normalized_fragment
+ self.hash
+ super
+ end
+
+ ##
+ # The scheme component for this URI.
+ #
+ # @return [String] The scheme component.
+ def scheme
+ return defined?(@scheme) ? @scheme : nil
+ end
+
+ ##
+ # The scheme component for this URI, normalized.
+ #
+ # @return [String] The scheme component, normalized.
+ def normalized_scheme
+ return nil unless self.scheme
+ @normalized_scheme ||= begin
+ if self.scheme =~ /^\s*ssh\+svn\s*$/i
+ "svn+ssh".dup
+ else
+ Addressable::URI.normalize_component(
+ self.scheme.strip.downcase,
+ Addressable::URI::NormalizeCharacterClasses::SCHEME
+ )
+ end
+ end
+ # All normalized values should be UTF-8
+ @normalized_scheme.force_encoding(Encoding::UTF_8) if @normalized_scheme
+ @normalized_scheme
+ end
+
+ ##
+ # Sets the scheme component for this URI.
+ #
+ # @param [String, #to_str] new_scheme The new scheme component.
+ def scheme=(new_scheme)
+ if new_scheme && !new_scheme.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_scheme.class} into String."
+ elsif new_scheme
+ new_scheme = new_scheme.to_str
+ end
+ if new_scheme && new_scheme !~ /\A[a-z][a-z0-9\.\+\-]*\z/i
+ raise InvalidURIError, "Invalid scheme format: '#{new_scheme}'"
+ end
+ @scheme = new_scheme
+ @scheme = nil if @scheme.to_s.strip.empty?
+
+ # Reset dependent values
+ remove_instance_variable(:@normalized_scheme) if defined?(@normalized_scheme)
+ remove_composite_values
+
+ # Ensure we haven't created an invalid URI
+ validate()
+ end
+
+ ##
+ # The user component for this URI.
+ #
+ # @return [String] The user component.
+ def user
+ return defined?(@user) ? @user : nil
+ end
+
+ ##
+ # The user component for this URI, normalized.
+ #
+ # @return [String] The user component, normalized.
+ def normalized_user
+ return nil unless self.user
+ return @normalized_user if defined?(@normalized_user)
+ @normalized_user ||= begin
+ if normalized_scheme =~ /https?/ && self.user.strip.empty? &&
+ (!self.password || self.password.strip.empty?)
+ nil
+ else
+ Addressable::URI.normalize_component(
+ self.user.strip,
+ Addressable::URI::NormalizeCharacterClasses::UNRESERVED
+ )
+ end
+ end
+ # All normalized values should be UTF-8
+ @normalized_user.force_encoding(Encoding::UTF_8) if @normalized_user
+ @normalized_user
+ end
+
+ ##
+ # Sets the user component for this URI.
+ #
+ # @param [String, #to_str] new_user The new user component.
+ def user=(new_user)
+ if new_user && !new_user.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_user.class} into String."
+ end
+ @user = new_user ? new_user.to_str : nil
+
+ # You can't have a nil user with a non-nil password
+ if password != nil
+ @user = EMPTY_STR if @user.nil?
+ end
+
+ # Reset dependent values
+ remove_instance_variable(:@userinfo) if defined?(@userinfo)
+ remove_instance_variable(:@normalized_userinfo) if defined?(@normalized_userinfo)
+ remove_instance_variable(:@authority) if defined?(@authority)
+ remove_instance_variable(:@normalized_user) if defined?(@normalized_user)
+ remove_composite_values
+
+ # Ensure we haven't created an invalid URI
+ validate()
+ end
+
+ ##
+ # The password component for this URI.
+ #
+ # @return [String] The password component.
+ def password
+ return defined?(@password) ? @password : nil
+ end
+
+ ##
+ # The password component for this URI, normalized.
+ #
+ # @return [String] The password component, normalized.
+ def normalized_password
+ return nil unless self.password
+ return @normalized_password if defined?(@normalized_password)
+ @normalized_password ||= begin
+ if self.normalized_scheme =~ /https?/ && self.password.strip.empty? &&
+ (!self.user || self.user.strip.empty?)
+ nil
+ else
+ Addressable::URI.normalize_component(
+ self.password.strip,
+ Addressable::URI::NormalizeCharacterClasses::UNRESERVED
+ )
+ end
+ end
+ # All normalized values should be UTF-8
+ if @normalized_password
+ @normalized_password.force_encoding(Encoding::UTF_8)
+ end
+ @normalized_password
+ end
+
+ ##
+ # Sets the password component for this URI.
+ #
+ # @param [String, #to_str] new_password The new password component.
+ def password=(new_password)
+ if new_password && !new_password.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_password.class} into String."
+ end
+ @password = new_password ? new_password.to_str : nil
+
+ # You can't have a nil user with a non-nil password
+ @password ||= nil
+ @user ||= nil
+ if @password != nil
+ @user = EMPTY_STR if @user.nil?
+ end
+
+ # Reset dependent values
+ remove_instance_variable(:@userinfo) if defined?(@userinfo)
+ remove_instance_variable(:@normalized_userinfo) if defined?(@normalized_userinfo)
+ remove_instance_variable(:@authority) if defined?(@authority)
+ remove_instance_variable(:@normalized_password) if defined?(@normalized_password)
+ remove_composite_values
+
+ # Ensure we haven't created an invalid URI
+ validate()
+ end
+
+ ##
+ # The userinfo component for this URI.
+ # Combines the user and password components.
+ #
+ # @return [String] The userinfo component.
+ def userinfo
+ current_user = self.user
+ current_password = self.password
+ (current_user || current_password) && @userinfo ||= begin
+ if current_user && current_password
+ "#{current_user}:#{current_password}"
+ elsif current_user && !current_password
+ "#{current_user}"
+ end
+ end
+ end
+
+ ##
+ # The userinfo component for this URI, normalized.
+ #
+ # @return [String] The userinfo component, normalized.
+ def normalized_userinfo
+ return nil unless self.userinfo
+ return @normalized_userinfo if defined?(@normalized_userinfo)
+ @normalized_userinfo ||= begin
+ current_user = self.normalized_user
+ current_password = self.normalized_password
+ if !current_user && !current_password
+ nil
+ elsif current_user && current_password
+ "#{current_user}:#{current_password}".dup
+ elsif current_user && !current_password
+ "#{current_user}".dup
+ end
+ end
+ # All normalized values should be UTF-8
+ if @normalized_userinfo
+ @normalized_userinfo.force_encoding(Encoding::UTF_8)
+ end
+ @normalized_userinfo
+ end
+
+ ##
+ # Sets the userinfo component for this URI.
+ #
+ # @param [String, #to_str] new_userinfo The new userinfo component.
+ def userinfo=(new_userinfo)
+ if new_userinfo && !new_userinfo.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_userinfo.class} into String."
+ end
+ new_user, new_password = if new_userinfo
+ [
+ new_userinfo.to_str.strip[/^(.*):/, 1],
+ new_userinfo.to_str.strip[/:(.*)$/, 1]
+ ]
+ else
+ [nil, nil]
+ end
+
+ # Password assigned first to ensure validity in case of nil
+ self.password = new_password
+ self.user = new_user
+
+ # Reset dependent values
+ remove_instance_variable(:@authority) if defined?(@authority)
+ remove_composite_values
+
+ # Ensure we haven't created an invalid URI
+ validate()
+ end
+
+ ##
+ # The host component for this URI.
+ #
+ # @return [String] The host component.
+ def host
+ return defined?(@host) ? @host : nil
+ end
+
+ ##
+ # The host component for this URI, normalized.
+ #
+ # @return [String] The host component, normalized.
+ def normalized_host
+ return nil unless self.host
+
+ @normalized_host ||= begin
+ if !self.host.strip.empty?
+ result = ::Addressable::IDNA.to_ascii(
+ URI.unencode_component(self.host.strip.downcase)
+ )
+ if result =~ /[^\.]\.$/
+ # Single trailing dots are unnecessary.
+ result = result[0...-1]
+ end
+ result = Addressable::URI.normalize_component(
+ result,
+ NormalizeCharacterClasses::HOST
+ )
+ result
+ else
+ EMPTY_STR.dup
+ end
+ end
+ # All normalized values should be UTF-8
+ if @normalized_host && !@normalized_host.empty?
+ @normalized_host.force_encoding(Encoding::UTF_8)
+ end
+ @normalized_host
+ end
+
+ ##
+ # Sets the host component for this URI.
+ #
+ # @param [String, #to_str] new_host The new host component.
+ def host=(new_host)
+ if new_host && !new_host.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_host.class} into String."
+ end
+ @host = new_host ? new_host.to_str : nil
+
+ # Reset dependent values
+ remove_instance_variable(:@authority) if defined?(@authority)
+ remove_instance_variable(:@normalized_host) if defined?(@normalized_host)
+ remove_composite_values
+
+ # Ensure we haven't created an invalid URI
+ validate()
+ end
+
+ ##
+ # This method is same as URI::Generic#host except
+ # brackets for IPv6 (and 'IPvFuture') addresses are removed.
+ #
+ # @see Addressable::URI#host
+ #
+ # @return [String] The hostname for this URI.
+ def hostname
+ v = self.host
+ /\A\[(.*)\]\z/ =~ v ? $1 : v
+ end
+
+ ##
+ # This method is same as URI::Generic#host= except
+ # the argument can be a bare IPv6 address (or 'IPvFuture').
+ #
+ # @see Addressable::URI#host=
+ #
+ # @param [String, #to_str] new_hostname The new hostname for this URI.
+ def hostname=(new_hostname)
+ if new_hostname &&
+ (new_hostname.respond_to?(:ipv4?) || new_hostname.respond_to?(:ipv6?))
+ new_hostname = new_hostname.to_s
+ elsif new_hostname && !new_hostname.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_hostname.class} into String."
+ end
+ v = new_hostname ? new_hostname.to_str : nil
+ v = "[#{v}]" if /\A\[.*\]\z/ !~ v && /:/ =~ v
+ self.host = v
+ end
+
+ ##
+ # Returns the top-level domain for this host.
+ #
+ # @example
+ # Addressable::URI.parse("http://www.example.co.uk").tld # => "co.uk"
+ def tld
+ PublicSuffix.parse(self.host, ignore_private: true).tld
+ end
+
+ ##
+ # Sets the top-level domain for this URI.
+ #
+ # @param [String, #to_str] new_tld The new top-level domain.
+ def tld=(new_tld)
+ replaced_tld = host.sub(/#{tld}\z/, new_tld)
+ self.host = PublicSuffix::Domain.new(replaced_tld).to_s
+ end
+
+ ##
+ # Returns the public suffix domain for this host.
+ #
+ # @example
+ # Addressable::URI.parse("http://www.example.co.uk").domain # => "example.co.uk"
+ def domain
+ PublicSuffix.domain(self.host, ignore_private: true)
+ end
+
+ ##
+ # The authority component for this URI.
+ # Combines the user, password, host, and port components.
+ #
+ # @return [String] The authority component.
+ def authority
+ self.host && @authority ||= begin
+ authority = String.new
+ if self.userinfo != nil
+ authority << "#{self.userinfo}@"
+ end
+ authority << self.host
+ if self.port != nil
+ authority << ":#{self.port}"
+ end
+ authority
+ end
+ end
+
+ ##
+ # The authority component for this URI, normalized.
+ #
+ # @return [String] The authority component, normalized.
+ def normalized_authority
+ return nil unless self.authority
+ @normalized_authority ||= begin
+ authority = String.new
+ if self.normalized_userinfo != nil
+ authority << "#{self.normalized_userinfo}@"
+ end
+ authority << self.normalized_host
+ if self.normalized_port != nil
+ authority << ":#{self.normalized_port}"
+ end
+ authority
+ end
+ # All normalized values should be UTF-8
+ if @normalized_authority
+ @normalized_authority.force_encoding(Encoding::UTF_8)
+ end
+ @normalized_authority
+ end
+
+ ##
+ # Sets the authority component for this URI.
+ #
+ # @param [String, #to_str] new_authority The new authority component.
+ def authority=(new_authority)
+ if new_authority
+ if !new_authority.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_authority.class} into String."
+ end
+ new_authority = new_authority.to_str
+ new_userinfo = new_authority[/^([^\[\]]*)@/, 1]
+ if new_userinfo
+ new_user = new_userinfo.strip[/^([^:]*):?/, 1]
+ new_password = new_userinfo.strip[/:(.*)$/, 1]
+ end
+ new_host = new_authority.sub(
+ /^([^\[\]]*)@/, EMPTY_STR
+ ).sub(
+ /:([^:@\[\]]*?)$/, EMPTY_STR
+ )
+ new_port =
+ new_authority[/:([^:@\[\]]*?)$/, 1]
+ end
+
+ # Password assigned first to ensure validity in case of nil
+ self.password = defined?(new_password) ? new_password : nil
+ self.user = defined?(new_user) ? new_user : nil
+ self.host = defined?(new_host) ? new_host : nil
+ self.port = defined?(new_port) ? new_port : nil
+
+ # Reset dependent values
+ remove_instance_variable(:@userinfo) if defined?(@userinfo)
+ remove_instance_variable(:@normalized_userinfo) if defined?(@normalized_userinfo)
+ remove_composite_values
+
+ # Ensure we haven't created an invalid URI
+ validate()
+ end
+
+ ##
+ # The origin for this URI, serialized to ASCII, as per
+ # RFC 6454, section 6.2.
+ #
+ # @return [String] The serialized origin.
+ def origin
+ if self.scheme && self.authority
+ if self.normalized_port
+ "#{self.normalized_scheme}://#{self.normalized_host}" +
+ ":#{self.normalized_port}"
+ else
+ "#{self.normalized_scheme}://#{self.normalized_host}"
+ end
+ else
+ "null"
+ end
+ end
+
+ ##
+ # Sets the origin for this URI, serialized to ASCII, as per
+ # RFC 6454, section 6.2. This assignment will reset the `userinfo`
+ # component.
+ #
+ # @param [String, #to_str] new_origin The new origin component.
+ def origin=(new_origin)
+ if new_origin
+ if !new_origin.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_origin.class} into String."
+ end
+ new_origin = new_origin.to_str
+ new_scheme = new_origin[/^([^:\/?#]+):\/\//, 1]
+ unless new_scheme
+ raise InvalidURIError, 'An origin cannot omit the scheme.'
+ end
+ new_host = new_origin[/:\/\/([^\/?#:]+)/, 1]
+ unless new_host
+ raise InvalidURIError, 'An origin cannot omit the host.'
+ end
+ new_port = new_origin[/:([^:@\[\]\/]*?)$/, 1]
+ end
+
+ self.scheme = defined?(new_scheme) ? new_scheme : nil
+ self.host = defined?(new_host) ? new_host : nil
+ self.port = defined?(new_port) ? new_port : nil
+ self.userinfo = nil
+
+ # Reset dependent values
+ remove_instance_variable(:@userinfo) if defined?(@userinfo)
+ remove_instance_variable(:@normalized_userinfo) if defined?(@normalized_userinfo)
+ remove_instance_variable(:@authority) if defined?(@authority)
+ remove_instance_variable(:@normalized_authority) if defined?(@normalized_authority)
+ remove_composite_values
+
+ # Ensure we haven't created an invalid URI
+ validate()
+ end
+
+ # Returns an array of known ip-based schemes. These schemes typically
+ # use a similar URI form:
+ # //:@:/
+ def self.ip_based_schemes
+ return self.port_mapping.keys
+ end
+
+ # Returns a hash of common IP-based schemes and their default port
+ # numbers. Adding new schemes to this hash, as necessary, will allow
+ # for better URI normalization.
+ def self.port_mapping
+ PORT_MAPPING
+ end
+
+ ##
+ # The port component for this URI.
+ # This is the port number actually given in the URI. This does not
+ # infer port numbers from default values.
+ #
+ # @return [Integer] The port component.
+ def port
+ return defined?(@port) ? @port : nil
+ end
+
+ ##
+ # The port component for this URI, normalized.
+ #
+ # @return [Integer] The port component, normalized.
+ def normalized_port
+ return nil unless self.port
+ return @normalized_port if defined?(@normalized_port)
+ @normalized_port ||= begin
+ if URI.port_mapping[self.normalized_scheme] == self.port
+ nil
+ else
+ self.port
+ end
+ end
+ end
+
+ ##
+ # Sets the port component for this URI.
+ #
+ # @param [String, Integer, #to_s] new_port The new port component.
+ def port=(new_port)
+ if new_port != nil && new_port.respond_to?(:to_str)
+ new_port = Addressable::URI.unencode_component(new_port.to_str)
+ end
+
+ if new_port.respond_to?(:valid_encoding?) && !new_port.valid_encoding?
+ raise InvalidURIError, "Invalid encoding in port"
+ end
+
+ if new_port != nil && !(new_port.to_s =~ /^\d+$/)
+ raise InvalidURIError,
+ "Invalid port number: #{new_port.inspect}"
+ end
+
+ @port = new_port.to_s.to_i
+ @port = nil if @port == 0
+
+ # Reset dependent values
+ remove_instance_variable(:@authority) if defined?(@authority)
+ remove_instance_variable(:@normalized_port) if defined?(@normalized_port)
+ remove_composite_values
+
+ # Ensure we haven't created an invalid URI
+ validate()
+ end
+
+ ##
+ # The inferred port component for this URI.
+ # This method will normalize to the default port for the URI's scheme if
+ # the port isn't explicitly specified in the URI.
+ #
+ # @return [Integer] The inferred port component.
+ def inferred_port
+ if self.port.to_i == 0
+ self.default_port
+ else
+ self.port.to_i
+ end
+ end
+
+ ##
+ # The default port for this URI's scheme.
+ # This method will always returns the default port for the URI's scheme
+ # regardless of the presence of an explicit port in the URI.
+ #
+ # @return [Integer] The default port.
+ def default_port
+ URI.port_mapping[self.scheme.strip.downcase] if self.scheme
+ end
+
+ ##
+ # The combination of components that represent a site.
+ # Combines the scheme, user, password, host, and port components.
+ # Primarily useful for HTTP and HTTPS.
+ #
+ # For example, "http://example.com/path?query"
would have a
+ # site
value of "http://example.com"
.
+ #
+ # @return [String] The components that identify a site.
+ def site
+ (self.scheme || self.authority) && @site ||= begin
+ site_string = "".dup
+ site_string << "#{self.scheme}:" if self.scheme != nil
+ site_string << "//#{self.authority}" if self.authority != nil
+ site_string
+ end
+ end
+
+ ##
+ # The normalized combination of components that represent a site.
+ # Combines the scheme, user, password, host, and port components.
+ # Primarily useful for HTTP and HTTPS.
+ #
+ # For example, "http://example.com/path?query"
would have a
+ # site
value of "http://example.com"
.
+ #
+ # @return [String] The normalized components that identify a site.
+ def normalized_site
+ return nil unless self.site
+ @normalized_site ||= begin
+ site_string = "".dup
+ if self.normalized_scheme != nil
+ site_string << "#{self.normalized_scheme}:"
+ end
+ if self.normalized_authority != nil
+ site_string << "//#{self.normalized_authority}"
+ end
+ site_string
+ end
+ # All normalized values should be UTF-8
+ @normalized_site.force_encoding(Encoding::UTF_8) if @normalized_site
+ @normalized_site
+ end
+
+ ##
+ # Sets the site value for this URI.
+ #
+ # @param [String, #to_str] new_site The new site value.
+ def site=(new_site)
+ if new_site
+ if !new_site.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_site.class} into String."
+ end
+ new_site = new_site.to_str
+ # These two regular expressions derived from the primary parsing
+ # expression
+ self.scheme = new_site[/^(?:([^:\/?#]+):)?(?:\/\/(?:[^\/?#]*))?$/, 1]
+ self.authority = new_site[
+ /^(?:(?:[^:\/?#]+):)?(?:\/\/([^\/?#]*))?$/, 1
+ ]
+ else
+ self.scheme = nil
+ self.authority = nil
+ end
+ end
+
+ ##
+ # The path component for this URI.
+ #
+ # @return [String] The path component.
+ def path
+ return defined?(@path) ? @path : EMPTY_STR
+ end
+
+ NORMPATH = /^(?!\/)[^\/:]*:.*$/
+ ##
+ # The path component for this URI, normalized.
+ #
+ # @return [String] The path component, normalized.
+ def normalized_path
+ @normalized_path ||= begin
+ path = self.path.to_s
+ if self.scheme == nil && path =~ NORMPATH
+ # Relative paths with colons in the first segment are ambiguous.
+ path = path.sub(":", "%2F")
+ end
+ # String#split(delimeter, -1) uses the more strict splitting behavior
+ # found by default in Python.
+ result = path.strip.split(SLASH, -1).map do |segment|
+ Addressable::URI.normalize_component(
+ segment,
+ Addressable::URI::NormalizeCharacterClasses::PCHAR
+ )
+ end.join(SLASH)
+
+ result = URI.normalize_path(result)
+ if result.empty? &&
+ ["http", "https", "ftp", "tftp"].include?(self.normalized_scheme)
+ result = SLASH.dup
+ end
+ result
+ end
+ # All normalized values should be UTF-8
+ @normalized_path.force_encoding(Encoding::UTF_8) if @normalized_path
+ @normalized_path
+ end
+
+ ##
+ # Sets the path component for this URI.
+ #
+ # @param [String, #to_str] new_path The new path component.
+ def path=(new_path)
+ if new_path && !new_path.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_path.class} into String."
+ end
+ @path = (new_path || EMPTY_STR).to_str
+ if !@path.empty? && @path[0..0] != SLASH && host != nil
+ @path = "/#{@path}"
+ end
+
+ # Reset dependent values
+ remove_instance_variable(:@normalized_path) if defined?(@normalized_path)
+ remove_composite_values
+
+ # Ensure we haven't created an invalid URI
+ validate()
+ end
+
+ ##
+ # The basename, if any, of the file in the path component.
+ #
+ # @return [String] The path's basename.
+ def basename
+ # Path cannot be nil
+ return File.basename(self.path).sub(/;[^\/]*$/, EMPTY_STR)
+ end
+
+ ##
+ # The extname, if any, of the file in the path component.
+ # Empty string if there is no extension.
+ #
+ # @return [String] The path's extname.
+ def extname
+ return nil unless self.path
+ return File.extname(self.basename)
+ end
+
+ ##
+ # The query component for this URI.
+ #
+ # @return [String] The query component.
+ def query
+ return defined?(@query) ? @query : nil
+ end
+
+ ##
+ # The query component for this URI, normalized.
+ #
+ # @return [String] The query component, normalized.
+ def normalized_query(*flags)
+ return nil unless self.query
+ return @normalized_query if defined?(@normalized_query)
+ @normalized_query ||= begin
+ modified_query_class = Addressable::URI::CharacterClasses::QUERY.dup
+ # Make sure possible key-value pair delimiters are escaped.
+ modified_query_class.sub!("\\&", "").sub!("\\;", "")
+ pairs = (query || "").split("&", -1)
+ pairs.delete_if(&:empty?).uniq! if flags.include?(:compacted)
+ pairs.sort! if flags.include?(:sorted)
+ component = pairs.map do |pair|
+ Addressable::URI.normalize_component(
+ pair,
+ Addressable::URI::NormalizeCharacterClasses::QUERY,
+ "+"
+ )
+ end.join("&")
+ component == "" ? nil : component
+ end
+ # All normalized values should be UTF-8
+ @normalized_query.force_encoding(Encoding::UTF_8) if @normalized_query
+ @normalized_query
+ end
+
+ ##
+ # Sets the query component for this URI.
+ #
+ # @param [String, #to_str] new_query The new query component.
+ def query=(new_query)
+ if new_query && !new_query.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_query.class} into String."
+ end
+ @query = new_query ? new_query.to_str : nil
+
+ # Reset dependent values
+ remove_instance_variable(:@normalized_query) if defined?(@normalized_query)
+ remove_composite_values
+ end
+
+ ##
+ # Converts the query component to a Hash value.
+ #
+ # @param [Class] return_type The return type desired. Value must be either
+ # `Hash` or `Array`.
+ #
+ # @return [Hash, Array, nil] The query string parsed as a Hash or Array
+ # or nil if the query string is blank.
+ #
+ # @example
+ # Addressable::URI.parse("?one=1&two=2&three=3").query_values
+ # #=> {"one" => "1", "two" => "2", "three" => "3"}
+ # Addressable::URI.parse("?one=two&one=three").query_values(Array)
+ # #=> [["one", "two"], ["one", "three"]]
+ # Addressable::URI.parse("?one=two&one=three").query_values(Hash)
+ # #=> {"one" => "three"}
+ # Addressable::URI.parse("?").query_values
+ # #=> {}
+ # Addressable::URI.parse("").query_values
+ # #=> nil
+ def query_values(return_type=Hash)
+ empty_accumulator = Array == return_type ? [] : {}
+ if return_type != Hash && return_type != Array
+ raise ArgumentError, "Invalid return type. Must be Hash or Array."
+ end
+ return nil if self.query == nil
+ split_query = self.query.split("&").map do |pair|
+ pair.split("=", 2) if pair && !pair.empty?
+ end.compact
+ return split_query.inject(empty_accumulator.dup) do |accu, pair|
+ # I'd rather use key/value identifiers instead of array lookups,
+ # but in this case I really want to maintain the exact pair structure,
+ # so it's best to make all changes in-place.
+ pair[0] = URI.unencode_component(pair[0])
+ if pair[1].respond_to?(:to_str)
+ value = pair[1].to_str
+ # I loathe the fact that I have to do this. Stupid HTML 4.01.
+ # Treating '+' as a space was just an unbelievably bad idea.
+ # There was nothing wrong with '%20'!
+ # If it ain't broke, don't fix it!
+ value = value.tr("+", " ") if ["http", "https", nil].include?(scheme)
+ pair[1] = URI.unencode_component(value)
+ end
+ if return_type == Hash
+ accu[pair[0]] = pair[1]
+ else
+ accu << pair
+ end
+ accu
+ end
+ end
+
+ ##
+ # Sets the query component for this URI from a Hash object.
+ # An empty Hash or Array will result in an empty query string.
+ #
+ # @param [Hash, #to_hash, Array] new_query_values The new query values.
+ #
+ # @example
+ # uri.query_values = {:a => "a", :b => ["c", "d", "e"]}
+ # uri.query
+ # # => "a=a&b=c&b=d&b=e"
+ # uri.query_values = [['a', 'a'], ['b', 'c'], ['b', 'd'], ['b', 'e']]
+ # uri.query
+ # # => "a=a&b=c&b=d&b=e"
+ # uri.query_values = [['a', 'a'], ['b', ['c', 'd', 'e']]]
+ # uri.query
+ # # => "a=a&b=c&b=d&b=e"
+ # uri.query_values = [['flag'], ['key', 'value']]
+ # uri.query
+ # # => "flag&key=value"
+ def query_values=(new_query_values)
+ if new_query_values == nil
+ self.query = nil
+ return nil
+ end
+
+ if !new_query_values.is_a?(Array)
+ if !new_query_values.respond_to?(:to_hash)
+ raise TypeError,
+ "Can't convert #{new_query_values.class} into Hash."
+ end
+ new_query_values = new_query_values.to_hash
+ new_query_values = new_query_values.map do |key, value|
+ key = key.to_s if key.kind_of?(Symbol)
+ [key, value]
+ end
+ # Useful default for OAuth and caching.
+ # Only to be used for non-Array inputs. Arrays should preserve order.
+ new_query_values.sort!
+ end
+
+ # new_query_values have form [['key1', 'value1'], ['key2', 'value2']]
+ buffer = "".dup
+ new_query_values.each do |key, value|
+ encoded_key = URI.encode_component(
+ key, CharacterClasses::UNRESERVED
+ )
+ if value == nil
+ buffer << "#{encoded_key}&"
+ elsif value.kind_of?(Array)
+ value.each do |sub_value|
+ encoded_value = URI.encode_component(
+ sub_value, CharacterClasses::UNRESERVED
+ )
+ buffer << "#{encoded_key}=#{encoded_value}&"
+ end
+ else
+ encoded_value = URI.encode_component(
+ value, CharacterClasses::UNRESERVED
+ )
+ buffer << "#{encoded_key}=#{encoded_value}&"
+ end
+ end
+ self.query = buffer.chop
+ end
+
+ ##
+ # The HTTP request URI for this URI. This is the path and the
+ # query string.
+ #
+ # @return [String] The request URI required for an HTTP request.
+ def request_uri
+ return nil if self.absolute? && self.scheme !~ /^https?$/i
+ return (
+ (!self.path.empty? ? self.path : SLASH) +
+ (self.query ? "?#{self.query}" : EMPTY_STR)
+ )
+ end
+
+ ##
+ # Sets the HTTP request URI for this URI.
+ #
+ # @param [String, #to_str] new_request_uri The new HTTP request URI.
+ def request_uri=(new_request_uri)
+ if !new_request_uri.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_request_uri.class} into String."
+ end
+ if self.absolute? && self.scheme !~ /^https?$/i
+ raise InvalidURIError,
+ "Cannot set an HTTP request URI for a non-HTTP URI."
+ end
+ new_request_uri = new_request_uri.to_str
+ path_component = new_request_uri[/^([^\?]*)\??(?:.*)$/, 1]
+ query_component = new_request_uri[/^(?:[^\?]*)\?(.*)$/, 1]
+ path_component = path_component.to_s
+ path_component = (!path_component.empty? ? path_component : SLASH)
+ self.path = path_component
+ self.query = query_component
+
+ # Reset dependent values
+ remove_composite_values
+ end
+
+ ##
+ # The fragment component for this URI.
+ #
+ # @return [String] The fragment component.
+ def fragment
+ return defined?(@fragment) ? @fragment : nil
+ end
+
+ ##
+ # The fragment component for this URI, normalized.
+ #
+ # @return [String] The fragment component, normalized.
+ def normalized_fragment
+ return nil unless self.fragment
+ return @normalized_fragment if defined?(@normalized_fragment)
+ @normalized_fragment ||= begin
+ component = Addressable::URI.normalize_component(
+ self.fragment,
+ Addressable::URI::NormalizeCharacterClasses::FRAGMENT
+ )
+ component == "" ? nil : component
+ end
+ # All normalized values should be UTF-8
+ if @normalized_fragment
+ @normalized_fragment.force_encoding(Encoding::UTF_8)
+ end
+ @normalized_fragment
+ end
+
+ ##
+ # Sets the fragment component for this URI.
+ #
+ # @param [String, #to_str] new_fragment The new fragment component.
+ def fragment=(new_fragment)
+ if new_fragment && !new_fragment.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{new_fragment.class} into String."
+ end
+ @fragment = new_fragment ? new_fragment.to_str : nil
+
+ # Reset dependent values
+ remove_instance_variable(:@normalized_fragment) if defined?(@normalized_fragment)
+ remove_composite_values
+
+ # Ensure we haven't created an invalid URI
+ validate()
+ end
+
+ ##
+ # Determines if the scheme indicates an IP-based protocol.
+ #
+ # @return [TrueClass, FalseClass]
+ # true
if the scheme indicates an IP-based protocol.
+ # false
otherwise.
+ def ip_based?
+ if self.scheme
+ return URI.ip_based_schemes.include?(
+ self.scheme.strip.downcase)
+ end
+ return false
+ end
+
+ ##
+ # Determines if the URI is relative.
+ #
+ # @return [TrueClass, FalseClass]
+ # true
if the URI is relative. false
+ # otherwise.
+ def relative?
+ return self.scheme.nil?
+ end
+
+ ##
+ # Determines if the URI is absolute.
+ #
+ # @return [TrueClass, FalseClass]
+ # true
if the URI is absolute. false
+ # otherwise.
+ def absolute?
+ return !relative?
+ end
+
+ ##
+ # Joins two URIs together.
+ #
+ # @param [String, Addressable::URI, #to_str] The URI to join with.
+ #
+ # @return [Addressable::URI] The joined URI.
+ def join(uri)
+ if !uri.respond_to?(:to_str)
+ raise TypeError, "Can't convert #{uri.class} into String."
+ end
+ if !uri.kind_of?(URI)
+ # Otherwise, convert to a String, then parse.
+ uri = URI.parse(uri.to_str)
+ end
+ if uri.to_s.empty?
+ return self.dup
+ end
+
+ joined_scheme = nil
+ joined_user = nil
+ joined_password = nil
+ joined_host = nil
+ joined_port = nil
+ joined_path = nil
+ joined_query = nil
+ joined_fragment = nil
+
+ # Section 5.2.2 of RFC 3986
+ if uri.scheme != nil
+ joined_scheme = uri.scheme
+ joined_user = uri.user
+ joined_password = uri.password
+ joined_host = uri.host
+ joined_port = uri.port
+ joined_path = URI.normalize_path(uri.path)
+ joined_query = uri.query
+ else
+ if uri.authority != nil
+ joined_user = uri.user
+ joined_password = uri.password
+ joined_host = uri.host
+ joined_port = uri.port
+ joined_path = URI.normalize_path(uri.path)
+ joined_query = uri.query
+ else
+ if uri.path == nil || uri.path.empty?
+ joined_path = self.path
+ if uri.query != nil
+ joined_query = uri.query
+ else
+ joined_query = self.query
+ end
+ else
+ if uri.path[0..0] == SLASH
+ joined_path = URI.normalize_path(uri.path)
+ else
+ base_path = self.path.dup
+ base_path = EMPTY_STR if base_path == nil
+ base_path = URI.normalize_path(base_path)
+
+ # Section 5.2.3 of RFC 3986
+ #
+ # Removes the right-most path segment from the base path.
+ if base_path.include?(SLASH)
+ base_path.sub!(/\/[^\/]+$/, SLASH)
+ else
+ base_path = EMPTY_STR
+ end
+
+ # If the base path is empty and an authority segment has been
+ # defined, use a base path of SLASH
+ if base_path.empty? && self.authority != nil
+ base_path = SLASH
+ end
+
+ joined_path = URI.normalize_path(base_path + uri.path)
+ end
+ joined_query = uri.query
+ end
+ joined_user = self.user
+ joined_password = self.password
+ joined_host = self.host
+ joined_port = self.port
+ end
+ joined_scheme = self.scheme
+ end
+ joined_fragment = uri.fragment
+
+ return self.class.new(
+ :scheme => joined_scheme,
+ :user => joined_user,
+ :password => joined_password,
+ :host => joined_host,
+ :port => joined_port,
+ :path => joined_path,
+ :query => joined_query,
+ :fragment => joined_fragment
+ )
+ end
+ alias_method :+, :join
+
+ ##
+ # Destructive form of join
.
+ #
+ # @param [String, Addressable::URI, #to_str] The URI to join with.
+ #
+ # @return [Addressable::URI] The joined URI.
+ #
+ # @see Addressable::URI#join
+ def join!(uri)
+ replace_self(self.join(uri))
+ end
+
+ ##
+ # Merges a URI with a Hash
of components.
+ # This method has different behavior from join
. Any
+ # components present in the hash
parameter will override the
+ # original components. The path component is not treated specially.
+ #
+ # @param [Hash, Addressable::URI, #to_hash] The components to merge with.
+ #
+ # @return [Addressable::URI] The merged URI.
+ #
+ # @see Hash#merge
+ def merge(hash)
+ if !hash.respond_to?(:to_hash)
+ raise TypeError, "Can't convert #{hash.class} into Hash."
+ end
+ hash = hash.to_hash
+
+ if hash.has_key?(:authority)
+ if (hash.keys & [:userinfo, :user, :password, :host, :port]).any?
+ raise ArgumentError,
+ "Cannot specify both an authority and any of the components " +
+ "within the authority."
+ end
+ end
+ if hash.has_key?(:userinfo)
+ if (hash.keys & [:user, :password]).any?
+ raise ArgumentError,
+ "Cannot specify both a userinfo and either the user or password."
+ end
+ end
+
+ uri = self.class.new
+ uri.defer_validation do
+ # Bunch of crazy logic required because of the composite components
+ # like userinfo and authority.
+ uri.scheme =
+ hash.has_key?(:scheme) ? hash[:scheme] : self.scheme
+ if hash.has_key?(:authority)
+ uri.authority =
+ hash.has_key?(:authority) ? hash[:authority] : self.authority
+ end
+ if hash.has_key?(:userinfo)
+ uri.userinfo =
+ hash.has_key?(:userinfo) ? hash[:userinfo] : self.userinfo
+ end
+ if !hash.has_key?(:userinfo) && !hash.has_key?(:authority)
+ uri.user =
+ hash.has_key?(:user) ? hash[:user] : self.user
+ uri.password =
+ hash.has_key?(:password) ? hash[:password] : self.password
+ end
+ if !hash.has_key?(:authority)
+ uri.host =
+ hash.has_key?(:host) ? hash[:host] : self.host
+ uri.port =
+ hash.has_key?(:port) ? hash[:port] : self.port
+ end
+ uri.path =
+ hash.has_key?(:path) ? hash[:path] : self.path
+ uri.query =
+ hash.has_key?(:query) ? hash[:query] : self.query
+ uri.fragment =
+ hash.has_key?(:fragment) ? hash[:fragment] : self.fragment
+ end
+
+ return uri
+ end
+
+ ##
+ # Destructive form of merge
.
+ #
+ # @param [Hash, Addressable::URI, #to_hash] The components to merge with.
+ #
+ # @return [Addressable::URI] The merged URI.
+ #
+ # @see Addressable::URI#merge
+ def merge!(uri)
+ replace_self(self.merge(uri))
+ end
+
+ ##
+ # Returns the shortest normalized relative form of this URI that uses the
+ # supplied URI as a base for resolution. Returns an absolute URI if
+ # necessary. This is effectively the opposite of route_to
.
+ #
+ # @param [String, Addressable::URI, #to_str] uri The URI to route from.
+ #
+ # @return [Addressable::URI]
+ # The normalized relative URI that is equivalent to the original URI.
+ def route_from(uri)
+ uri = URI.parse(uri).normalize
+ normalized_self = self.normalize
+ if normalized_self.relative?
+ raise ArgumentError, "Expected absolute URI, got: #{self.to_s}"
+ end
+ if uri.relative?
+ raise ArgumentError, "Expected absolute URI, got: #{uri.to_s}"
+ end
+ if normalized_self == uri
+ return Addressable::URI.parse("##{normalized_self.fragment}")
+ end
+ components = normalized_self.to_hash
+ if normalized_self.scheme == uri.scheme
+ components[:scheme] = nil
+ if normalized_self.authority == uri.authority
+ components[:user] = nil
+ components[:password] = nil
+ components[:host] = nil
+ components[:port] = nil
+ if normalized_self.path == uri.path
+ components[:path] = nil
+ if normalized_self.query == uri.query
+ components[:query] = nil
+ end
+ else
+ if uri.path != SLASH and components[:path]
+ self_splitted_path = split_path(components[:path])
+ uri_splitted_path = split_path(uri.path)
+ self_dir = self_splitted_path.shift
+ uri_dir = uri_splitted_path.shift
+ while !self_splitted_path.empty? && !uri_splitted_path.empty? and self_dir == uri_dir
+ self_dir = self_splitted_path.shift
+ uri_dir = uri_splitted_path.shift
+ end
+ components[:path] = (uri_splitted_path.fill('..') + [self_dir] + self_splitted_path).join(SLASH)
+ end
+ end
+ end
+ end
+ # Avoid network-path references.
+ if components[:host] != nil
+ components[:scheme] = normalized_self.scheme
+ end
+ return Addressable::URI.new(
+ :scheme => components[:scheme],
+ :user => components[:user],
+ :password => components[:password],
+ :host => components[:host],
+ :port => components[:port],
+ :path => components[:path],
+ :query => components[:query],
+ :fragment => components[:fragment]
+ )
+ end
+
+ ##
+ # Returns the shortest normalized relative form of the supplied URI that
+ # uses this URI as a base for resolution. Returns an absolute URI if
+ # necessary. This is effectively the opposite of route_from
.
+ #
+ # @param [String, Addressable::URI, #to_str] uri The URI to route to.
+ #
+ # @return [Addressable::URI]
+ # The normalized relative URI that is equivalent to the supplied URI.
+ def route_to(uri)
+ return URI.parse(uri).route_from(self)
+ end
+
+ ##
+ # Returns a normalized URI object.
+ #
+ # NOTE: This method does not attempt to fully conform to specifications.
+ # It exists largely to correct other people's failures to read the
+ # specifications, and also to deal with caching issues since several
+ # different URIs may represent the same resource and should not be
+ # cached multiple times.
+ #
+ # @return [Addressable::URI] The normalized URI.
+ def normalize
+ # This is a special exception for the frequently misused feed
+ # URI scheme.
+ if normalized_scheme == "feed"
+ if self.to_s =~ /^feed:\/*http:\/*/
+ return URI.parse(
+ self.to_s[/^feed:\/*(http:\/*.*)/, 1]
+ ).normalize
+ end
+ end
+
+ return self.class.new(
+ :scheme => normalized_scheme,
+ :authority => normalized_authority,
+ :path => normalized_path,
+ :query => normalized_query,
+ :fragment => normalized_fragment
+ )
+ end
+
+ ##
+ # Destructively normalizes this URI object.
+ #
+ # @return [Addressable::URI] The normalized URI.
+ #
+ # @see Addressable::URI#normalize
+ def normalize!
+ replace_self(self.normalize)
+ end
+
+ ##
+ # Creates a URI suitable for display to users. If semantic attacks are
+ # likely, the application should try to detect these and warn the user.
+ # See RFC 3986,
+ # section 7.6 for more information.
+ #
+ # @return [Addressable::URI] A URI suitable for display purposes.
+ def display_uri
+ display_uri = self.normalize
+ display_uri.host = ::Addressable::IDNA.to_unicode(display_uri.host)
+ return display_uri
+ end
+
+ ##
+ # Returns true
if the URI objects are equal. This method
+ # normalizes both URIs before doing the comparison, and allows comparison
+ # against Strings
.
+ #
+ # @param [Object] uri The URI to compare.
+ #
+ # @return [TrueClass, FalseClass]
+ # true
if the URIs are equivalent, false
+ # otherwise.
+ def ===(uri)
+ if uri.respond_to?(:normalize)
+ uri_string = uri.normalize.to_s
+ else
+ begin
+ uri_string = ::Addressable::URI.parse(uri).normalize.to_s
+ rescue InvalidURIError, TypeError
+ return false
+ end
+ end
+ return self.normalize.to_s == uri_string
+ end
+
+ ##
+ # Returns true
if the URI objects are equal. This method
+ # normalizes both URIs before doing the comparison.
+ #
+ # @param [Object] uri The URI to compare.
+ #
+ # @return [TrueClass, FalseClass]
+ # true
if the URIs are equivalent, false
+ # otherwise.
+ def ==(uri)
+ return false unless uri.kind_of?(URI)
+ return self.normalize.to_s == uri.normalize.to_s
+ end
+
+ ##
+ # Returns true
if the URI objects are equal. This method
+ # does NOT normalize either URI before doing the comparison.
+ #
+ # @param [Object] uri The URI to compare.
+ #
+ # @return [TrueClass, FalseClass]
+ # true
if the URIs are equivalent, false
+ # otherwise.
+ def eql?(uri)
+ return false unless uri.kind_of?(URI)
+ return self.to_s == uri.to_s
+ end
+
+ ##
+ # A hash value that will make a URI equivalent to its normalized
+ # form.
+ #
+ # @return [Integer] A hash of the URI.
+ def hash
+ @hash ||= self.to_s.hash * -1
+ end
+
+ ##
+ # Clones the URI object.
+ #
+ # @return [Addressable::URI] The cloned URI.
+ def dup
+ duplicated_uri = self.class.new(
+ :scheme => self.scheme ? self.scheme.dup : nil,
+ :user => self.user ? self.user.dup : nil,
+ :password => self.password ? self.password.dup : nil,
+ :host => self.host ? self.host.dup : nil,
+ :port => self.port,
+ :path => self.path ? self.path.dup : nil,
+ :query => self.query ? self.query.dup : nil,
+ :fragment => self.fragment ? self.fragment.dup : nil
+ )
+ return duplicated_uri
+ end
+
+ ##
+ # Omits components from a URI.
+ #
+ # @param [Symbol] *components The components to be omitted.
+ #
+ # @return [Addressable::URI] The URI with components omitted.
+ #
+ # @example
+ # uri = Addressable::URI.parse("http://example.com/path?query")
+ # #=> #
+ # uri.omit(:scheme, :authority)
+ # #=> #
+ def omit(*components)
+ invalid_components = components - [
+ :scheme, :user, :password, :userinfo, :host, :port, :authority,
+ :path, :query, :fragment
+ ]
+ unless invalid_components.empty?
+ raise ArgumentError,
+ "Invalid component names: #{invalid_components.inspect}."
+ end
+ duplicated_uri = self.dup
+ duplicated_uri.defer_validation do
+ components.each do |component|
+ duplicated_uri.send((component.to_s + "=").to_sym, nil)
+ end
+ duplicated_uri.user = duplicated_uri.normalized_user
+ end
+ duplicated_uri
+ end
+
+ ##
+ # Destructive form of omit.
+ #
+ # @param [Symbol] *components The components to be omitted.
+ #
+ # @return [Addressable::URI] The URI with components omitted.
+ #
+ # @see Addressable::URI#omit
+ def omit!(*components)
+ replace_self(self.omit(*components))
+ end
+
+ ##
+ # Determines if the URI is an empty string.
+ #
+ # @return [TrueClass, FalseClass]
+ # Returns true
if empty, false
otherwise.
+ def empty?
+ return self.to_s.empty?
+ end
+
+ ##
+ # Converts the URI to a String
.
+ #
+ # @return [String] The URI's String
representation.
+ def to_s
+ if self.scheme == nil && self.path != nil && !self.path.empty? &&
+ self.path =~ NORMPATH
+ raise InvalidURIError,
+ "Cannot assemble URI string with ambiguous path: '#{self.path}'"
+ end
+ @uri_string ||= begin
+ uri_string = String.new
+ uri_string << "#{self.scheme}:" if self.scheme != nil
+ uri_string << "//#{self.authority}" if self.authority != nil
+ uri_string << self.path.to_s
+ uri_string << "?#{self.query}" if self.query != nil
+ uri_string << "##{self.fragment}" if self.fragment != nil
+ uri_string.force_encoding(Encoding::UTF_8)
+ uri_string
+ end
+ end
+
+ ##
+ # URI's are glorified Strings
. Allow implicit conversion.
+ alias_method :to_str, :to_s
+
+ ##
+ # Returns a Hash of the URI components.
+ #
+ # @return [Hash] The URI as a Hash
of components.
+ def to_hash
+ return {
+ :scheme => self.scheme,
+ :user => self.user,
+ :password => self.password,
+ :host => self.host,
+ :port => self.port,
+ :path => self.path,
+ :query => self.query,
+ :fragment => self.fragment
+ }
+ end
+
+ ##
+ # Returns a String
representation of the URI object's state.
+ #
+ # @return [String] The URI object's state, as a String
.
+ def inspect
+ sprintf("#<%s:%#0x URI:%s>", URI.to_s, self.object_id, self.to_s)
+ end
+
+ ##
+ # This method allows you to make several changes to a URI simultaneously,
+ # which separately would cause validation errors, but in conjunction,
+ # are valid. The URI will be revalidated as soon as the entire block has
+ # been executed.
+ #
+ # @param [Proc] block
+ # A set of operations to perform on a given URI.
+ def defer_validation
+ raise LocalJumpError, "No block given." unless block_given?
+ @validation_deferred = true
+ yield
+ @validation_deferred = false
+ validate
+ return nil
+ end
+
+ protected
+ SELF_REF = '.'
+ PARENT = '..'
+
+ RULE_2A = /\/\.\/|\/\.$/
+ RULE_2B_2C = /\/([^\/]*)\/\.\.\/|\/([^\/]*)\/\.\.$/
+ RULE_2D = /^\.\.?\/?/
+ RULE_PREFIXED_PARENT = /^\/\.\.?\/|^(\/\.\.?)+\/?$/
+
+ ##
+ # Resolves paths to their simplest form.
+ #
+ # @param [String] path The path to normalize.
+ #
+ # @return [String] The normalized path.
+ def self.normalize_path(path)
+ # Section 5.2.4 of RFC 3986
+
+ return nil if path.nil?
+ normalized_path = path.dup
+ begin
+ mod = nil
+ mod ||= normalized_path.gsub!(RULE_2A, SLASH)
+
+ pair = normalized_path.match(RULE_2B_2C)
+ parent, current = pair[1], pair[2] if pair
+ if pair && ((parent != SELF_REF && parent != PARENT) ||
+ (current != SELF_REF && current != PARENT))
+ mod ||= normalized_path.gsub!(
+ Regexp.new(
+ "/#{Regexp.escape(parent.to_s)}/\\.\\./|" +
+ "(/#{Regexp.escape(current.to_s)}/\\.\\.$)"
+ ), SLASH
+ )
+ end
+
+ mod ||= normalized_path.gsub!(RULE_2D, EMPTY_STR)
+ # Non-standard, removes prefixed dotted segments from path.
+ mod ||= normalized_path.gsub!(RULE_PREFIXED_PARENT, SLASH)
+ end until mod.nil?
+
+ return normalized_path
+ end
+
+ ##
+ # Ensures that the URI is valid.
+ def validate
+ return if !!@validation_deferred
+ if self.scheme != nil && self.ip_based? &&
+ (self.host == nil || self.host.empty?) &&
+ (self.path == nil || self.path.empty?)
+ raise InvalidURIError,
+ "Absolute URI missing hierarchical segment: '#{self.to_s}'"
+ end
+ if self.host == nil
+ if self.port != nil ||
+ self.user != nil ||
+ self.password != nil
+ raise InvalidURIError, "Hostname not supplied: '#{self.to_s}'"
+ end
+ end
+ if self.path != nil && !self.path.empty? && self.path[0..0] != SLASH &&
+ self.authority != nil
+ raise InvalidURIError,
+ "Cannot have a relative path with an authority set: '#{self.to_s}'"
+ end
+ if self.path != nil && !self.path.empty? &&
+ self.path[0..1] == SLASH + SLASH && self.authority == nil
+ raise InvalidURIError,
+ "Cannot have a path with two leading slashes " +
+ "without an authority set: '#{self.to_s}'"
+ end
+ unreserved = CharacterClasses::UNRESERVED
+ sub_delims = CharacterClasses::SUB_DELIMS
+ if !self.host.nil? && (self.host =~ /[<>{}\/\\\?\#\@"[[:space:]]]/ ||
+ (self.host[/^\[(.*)\]$/, 1] != nil && self.host[/^\[(.*)\]$/, 1] !~
+ Regexp.new("^[#{unreserved}#{sub_delims}:]*$")))
+ raise InvalidURIError, "Invalid character in host: '#{self.host.to_s}'"
+ end
+ return nil
+ end
+
+ ##
+ # Replaces the internal state of self with the specified URI's state.
+ # Used in destructive operations to avoid massive code repetition.
+ #
+ # @param [Addressable::URI] uri The URI to replace self
with.
+ #
+ # @return [Addressable::URI] self
.
+ def replace_self(uri)
+ # Reset dependent values
+ instance_variables.each do |var|
+ if instance_variable_defined?(var) && var != :@validation_deferred
+ remove_instance_variable(var)
+ end
+ end
+
+ @scheme = uri.scheme
+ @user = uri.user
+ @password = uri.password
+ @host = uri.host
+ @port = uri.port
+ @path = uri.path
+ @query = uri.query
+ @fragment = uri.fragment
+ return self
+ end
+
+ ##
+ # Splits path string with "/" (slash).
+ # It is considered that there is empty string after last slash when
+ # path ends with slash.
+ #
+ # @param [String] path The path to split.
+ #
+ # @return [Array] An array of parts of path.
+ def split_path(path)
+ splitted = path.split(SLASH)
+ splitted << EMPTY_STR if path.end_with? SLASH
+ splitted
+ end
+
+ ##
+ # Resets composite values for the entire URI
+ #
+ # @api private
+ def remove_composite_values
+ remove_instance_variable(:@uri_string) if defined?(@uri_string)
+ remove_instance_variable(:@hash) if defined?(@hash)
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/version.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/version.rb
new file mode 100644
index 000000000..2efe4340f
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/version.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+# encoding:utf-8
+#--
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#++
+
+
+# Used to prevent the class/module from being loaded more than once
+if !defined?(Addressable::VERSION)
+ module Addressable
+ module VERSION
+ MAJOR = 2
+ MINOR = 8
+ TINY = 0
+
+ STRING = [MAJOR, MINOR, TINY].join('.')
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/idna_spec.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/idna_spec.rb
new file mode 100644
index 000000000..4104b3702
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/idna_spec.rb
@@ -0,0 +1,302 @@
+# frozen_string_literal: true
+
+# coding: utf-8
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+require "spec_helper"
+
+# Have to use RubyGems to load the idn gem.
+require "rubygems"
+
+require "addressable/idna"
+
+shared_examples_for "converting from unicode to ASCII" do
+ it "should convert 'www.google.com' correctly" do
+ expect(Addressable::IDNA.to_ascii("www.google.com")).to eq("www.google.com")
+ end
+
+ long = 'AcinusFallumTrompetumNullunCreditumVisumEstAtCuadLongumEtCefallum.com'
+ it "should convert '#{long}' correctly" do
+ expect(Addressable::IDNA.to_ascii(long)).to eq(long)
+ end
+
+ it "should convert 'www.詹姆斯.com' correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "www.詹姆斯.com"
+ )).to eq("www.xn--8ws00zhy3a.com")
+ end
+
+ it "should convert 'www.Iñtërnâtiônàlizætiøn.com' correctly" do
+ "www.Iñtërnâtiônàlizætiøn.com"
+ expect(Addressable::IDNA.to_ascii(
+ "www.I\xC3\xB1t\xC3\xABrn\xC3\xA2ti\xC3\xB4" +
+ "n\xC3\xA0liz\xC3\xA6ti\xC3\xB8n.com"
+ )).to eq("www.xn--itrntinliztin-vdb0a5exd8ewcye.com")
+ end
+
+ it "should convert 'www.Iñtërnâtiônàlizætiøn.com' correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "www.In\xCC\x83te\xCC\x88rna\xCC\x82tio\xCC\x82n" +
+ "a\xCC\x80liz\xC3\xA6ti\xC3\xB8n.com"
+ )).to eq("www.xn--itrntinliztin-vdb0a5exd8ewcye.com")
+ end
+
+ it "should convert " +
+ "'www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp' " +
+ "correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "www.\343\201\273\343\202\223\343\201\250\343\201\206\343\201\253\343" +
+ "\201\252\343\201\214\343\201\204\343\202\217\343\201\221\343\201\256" +
+ "\343\202\217\343\201\213\343\202\211\343\201\252\343\201\204\343\201" +
+ "\251\343\202\201\343\201\204\343\202\223\343\202\201\343\201\204\343" +
+ "\201\256\343\202\211\343\201\271\343\202\213\343\201\276\343\201\240" +
+ "\343\201\252\343\201\214\343\201\217\343\201\227\343\201\252\343\201" +
+ "\204\343\201\250\343\201\237\343\202\212\343\201\252\343\201\204." +
+ "w3.mag.keio.ac.jp"
+ )).to eq(
+ "www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3" +
+ "fg11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp"
+ )
+ end
+
+ it "should convert " +
+ "'www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp' " +
+ "correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "www.\343\201\273\343\202\223\343\201\250\343\201\206\343\201\253\343" +
+ "\201\252\343\201\213\343\202\231\343\201\204\343\202\217\343\201\221" +
+ "\343\201\256\343\202\217\343\201\213\343\202\211\343\201\252\343\201" +
+ "\204\343\201\250\343\202\231\343\202\201\343\201\204\343\202\223\343" +
+ "\202\201\343\201\204\343\201\256\343\202\211\343\201\270\343\202\231" +
+ "\343\202\213\343\201\276\343\201\237\343\202\231\343\201\252\343\201" +
+ "\213\343\202\231\343\201\217\343\201\227\343\201\252\343\201\204\343" +
+ "\201\250\343\201\237\343\202\212\343\201\252\343\201\204." +
+ "w3.mag.keio.ac.jp"
+ )).to eq(
+ "www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3" +
+ "fg11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp"
+ )
+ end
+
+ it "should convert '点心和烤鸭.w3.mag.keio.ac.jp' correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "点心和烤鸭.w3.mag.keio.ac.jp"
+ )).to eq("xn--0trv4xfvn8el34t.w3.mag.keio.ac.jp")
+ end
+
+ it "should convert '가각갂갃간갅갆갇갈갉힢힣.com' correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "가각갂갃간갅갆갇갈갉힢힣.com"
+ )).to eq("xn--o39acdefghijk5883jma.com")
+ end
+
+ it "should convert " +
+ "'\347\242\274\346\250\231\346\272\226\350" +
+ "\220\254\345\234\213\347\242\274.com' correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "\347\242\274\346\250\231\346\272\226\350" +
+ "\220\254\345\234\213\347\242\274.com"
+ )).to eq("xn--9cs565brid46mda086o.com")
+ end
+
+ it "should convert 'リ宠퐱〹.com' correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "\357\276\230\345\256\240\355\220\261\343\200\271.com"
+ )).to eq("xn--eek174hoxfpr4k.com")
+ end
+
+ it "should convert 'リ宠퐱卄.com' correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "\343\203\252\345\256\240\355\220\261\345\215\204.com"
+ )).to eq("xn--eek174hoxfpr4k.com")
+ end
+
+ it "should convert 'ᆵ' correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "\341\206\265"
+ )).to eq("xn--4ud")
+ end
+
+ it "should convert 'ᆵ' correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "\357\276\257"
+ )).to eq("xn--4ud")
+ end
+
+ it "should convert '🌹🌹🌹.ws' correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "\360\237\214\271\360\237\214\271\360\237\214\271.ws"
+ )).to eq("xn--2h8haa.ws")
+ end
+
+ it "should handle two adjacent '.'s correctly" do
+ expect(Addressable::IDNA.to_ascii(
+ "example..host"
+ )).to eq("example..host")
+ end
+end
+
+shared_examples_for "converting from ASCII to unicode" do
+ long = 'AcinusFallumTrompetumNullunCreditumVisumEstAtCuadLongumEtCefallum.com'
+ it "should convert '#{long}' correctly" do
+ expect(Addressable::IDNA.to_unicode(long)).to eq(long)
+ end
+
+ it "should return the identity conversion when punycode decode fails" do
+ expect(Addressable::IDNA.to_unicode("xn--zckp1cyg1.sblo.jp")).to eq(
+ "xn--zckp1cyg1.sblo.jp")
+ end
+
+ it "should return the identity conversion when the ACE prefix has no suffix" do
+ expect(Addressable::IDNA.to_unicode("xn--...-")).to eq("xn--...-")
+ end
+
+ it "should convert 'www.google.com' correctly" do
+ expect(Addressable::IDNA.to_unicode("www.google.com")).to eq(
+ "www.google.com")
+ end
+
+ it "should convert 'www.詹姆斯.com' correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "www.xn--8ws00zhy3a.com"
+ )).to eq("www.詹姆斯.com")
+ end
+
+ it "should convert '詹姆斯.com' correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "xn--8ws00zhy3a.com"
+ )).to eq("詹姆斯.com")
+ end
+
+ it "should convert 'www.iñtërnâtiônàlizætiøn.com' correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "www.xn--itrntinliztin-vdb0a5exd8ewcye.com"
+ )).to eq("www.iñtërnâtiônàlizætiøn.com")
+ end
+
+ it "should convert 'iñtërnâtiônàlizætiøn.com' correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "xn--itrntinliztin-vdb0a5exd8ewcye.com"
+ )).to eq("iñtërnâtiônàlizætiøn.com")
+ end
+
+ it "should convert " +
+ "'www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp' " +
+ "correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3" +
+ "fg11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp"
+ )).to eq(
+ "www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp"
+ )
+ end
+
+ it "should convert '点心和烤鸭.w3.mag.keio.ac.jp' correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "xn--0trv4xfvn8el34t.w3.mag.keio.ac.jp"
+ )).to eq("点心和烤鸭.w3.mag.keio.ac.jp")
+ end
+
+ it "should convert '가각갂갃간갅갆갇갈갉힢힣.com' correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "xn--o39acdefghijk5883jma.com"
+ )).to eq("가각갂갃간갅갆갇갈갉힢힣.com")
+ end
+
+ it "should convert " +
+ "'\347\242\274\346\250\231\346\272\226\350" +
+ "\220\254\345\234\213\347\242\274.com' correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "xn--9cs565brid46mda086o.com"
+ )).to eq(
+ "\347\242\274\346\250\231\346\272\226\350" +
+ "\220\254\345\234\213\347\242\274.com"
+ )
+ end
+
+ it "should convert 'リ宠퐱卄.com' correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "xn--eek174hoxfpr4k.com"
+ )).to eq("\343\203\252\345\256\240\355\220\261\345\215\204.com")
+ end
+
+ it "should convert 'ᆵ' correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "xn--4ud"
+ )).to eq("\341\206\265")
+ end
+
+ it "should convert '🌹🌹🌹.ws' correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "xn--2h8haa.ws"
+ )).to eq("\360\237\214\271\360\237\214\271\360\237\214\271.ws")
+ end
+
+ it "should handle two adjacent '.'s correctly" do
+ expect(Addressable::IDNA.to_unicode(
+ "example..host"
+ )).to eq("example..host")
+ end
+
+ it "should normalize 'string' correctly" do
+ expect(Addressable::IDNA.unicode_normalize_kc(:'string')).to eq("string")
+ expect(Addressable::IDNA.unicode_normalize_kc("string")).to eq("string")
+ end
+end
+
+describe Addressable::IDNA, "when using the pure-Ruby implementation" do
+ before do
+ Addressable.send(:remove_const, :IDNA)
+ load "addressable/idna/pure.rb"
+ end
+
+ it_should_behave_like "converting from unicode to ASCII"
+ it_should_behave_like "converting from ASCII to unicode"
+
+ begin
+ require "fiber"
+
+ it "should not blow up inside fibers" do
+ f = Fiber.new do
+ Addressable.send(:remove_const, :IDNA)
+ load "addressable/idna/pure.rb"
+ end
+ f.resume
+ end
+ rescue LoadError
+ # Fibers aren't supported in this version of Ruby, skip this test.
+ warn('Fibers unsupported.')
+ end
+end
+
+begin
+ require "idn"
+
+ describe Addressable::IDNA, "when using the native-code implementation" do
+ before do
+ Addressable.send(:remove_const, :IDNA)
+ load "addressable/idna/native.rb"
+ end
+
+ it_should_behave_like "converting from unicode to ASCII"
+ it_should_behave_like "converting from ASCII to unicode"
+ end
+rescue LoadError => error
+ raise error if ENV["CI"] && TestHelper.native_supported?
+
+ # Cannot test the native implementation without libidn support.
+ warn('Could not load native IDN implementation.')
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/net_http_compat_spec.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/net_http_compat_spec.rb
new file mode 100644
index 000000000..8663a8673
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/net_http_compat_spec.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+# coding: utf-8
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+require "spec_helper"
+
+require "addressable/uri"
+require "net/http"
+
+describe Net::HTTP do
+ it "should be compatible with Addressable" do
+ response_body =
+ Net::HTTP.get(Addressable::URI.parse('http://www.google.com/'))
+ expect(response_body).not_to be_nil
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/security_spec.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/security_spec.rb
new file mode 100644
index 000000000..601e8088e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/security_spec.rb
@@ -0,0 +1,59 @@
+# frozen_string_literal: true
+
+# coding: utf-8
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+require "spec_helper"
+
+require "addressable/uri"
+
+describe Addressable::URI, "when created with a URI known to cause crashes " +
+ "in certain browsers" do
+ it "should parse correctly" do
+ uri = Addressable::URI.parse('%%30%30')
+ expect(uri.path).to eq('%%30%30')
+ expect(uri.normalize.path).to eq('%2500')
+ end
+
+ it "should parse correctly as a full URI" do
+ uri = Addressable::URI.parse('http://www.example.com/%%30%30')
+ expect(uri.path).to eq('/%%30%30')
+ expect(uri.normalize.path).to eq('/%2500')
+ end
+end
+
+describe Addressable::URI, "when created with a URI known to cause crashes " +
+ "in certain browsers" do
+ it "should parse correctly" do
+ uri = Addressable::URI.parse('لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗')
+ expect(uri.path).to eq('لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗')
+ expect(uri.normalize.path).to eq(
+ '%D9%84%D9%8F%D8%B5%D9%91%D8%A8%D9%8F%D9%84%D9%8F%D9%84%D8%B5%D9%91' +
+ '%D8%A8%D9%8F%D8%B1%D8%B1%D9%8B%20%E0%A5%A3%20%E0%A5%A3h%20%E0%A5' +
+ '%A3%20%E0%A5%A3%20%E5%86%97'
+ )
+ end
+
+ it "should parse correctly as a full URI" do
+ uri = Addressable::URI.parse('http://www.example.com/لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗')
+ expect(uri.path).to eq('/لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗')
+ expect(uri.normalize.path).to eq(
+ '/%D9%84%D9%8F%D8%B5%D9%91%D8%A8%D9%8F%D9%84%D9%8F%D9%84%D8%B5%D9%91' +
+ '%D8%A8%D9%8F%D8%B1%D8%B1%D9%8B%20%E0%A5%A3%20%E0%A5%A3h%20%E0%A5' +
+ '%A3%20%E0%A5%A3%20%E5%86%97'
+ )
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/template_spec.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/template_spec.rb
new file mode 100644
index 000000000..d47589abf
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/template_spec.rb
@@ -0,0 +1,1460 @@
+# frozen_string_literal: true
+
+# coding: utf-8
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+require "spec_helper"
+
+require "bigdecimal"
+require "timeout"
+require "addressable/template"
+
+shared_examples_for 'expands' do |tests|
+ tests.each do |template, expansion|
+ exp = expansion.is_a?(Array) ? expansion.first : expansion
+ it "#{template} to #{exp}" do
+ tmpl = Addressable::Template.new(template).expand(subject)
+ if expansion.is_a?(Array)
+ expect(expansion.any?{|i| i == tmpl.to_str}).to be true
+ else
+ expect(tmpl.to_str).to eq(expansion)
+ end
+ end
+ end
+end
+
+describe "eql?" do
+ let(:template) { Addressable::Template.new('https://www.example.com/{foo}') }
+ it 'is equal when the pattern matches' do
+ other_template = Addressable::Template.new('https://www.example.com/{foo}')
+ expect(template).to be_eql(other_template)
+ expect(other_template).to be_eql(template)
+ end
+ it 'is not equal when the pattern differs' do
+ other_template = Addressable::Template.new('https://www.example.com/{bar}')
+ expect(template).to_not be_eql(other_template)
+ expect(other_template).to_not be_eql(template)
+ end
+ it 'is not equal to non-templates' do
+ uri = 'https://www.example.com/foo/bar'
+ addressable_template = Addressable::Template.new uri
+ addressable_uri = Addressable::URI.parse uri
+ expect(addressable_template).to_not be_eql(addressable_uri)
+ expect(addressable_uri).to_not be_eql(addressable_template)
+ end
+end
+
+describe "==" do
+ let(:template) { Addressable::Template.new('https://www.example.com/{foo}') }
+ it 'is equal when the pattern matches' do
+ other_template = Addressable::Template.new('https://www.example.com/{foo}')
+ expect(template).to eq other_template
+ expect(other_template).to eq template
+ end
+ it 'is not equal when the pattern differs' do
+ other_template = Addressable::Template.new('https://www.example.com/{bar}')
+ expect(template).not_to eq other_template
+ expect(other_template).not_to eq template
+ end
+ it 'is not equal to non-templates' do
+ uri = 'https://www.example.com/foo/bar'
+ addressable_template = Addressable::Template.new uri
+ addressable_uri = Addressable::URI.parse uri
+ expect(addressable_template).not_to eq addressable_uri
+ expect(addressable_uri).not_to eq addressable_template
+ end
+end
+
+describe "Type conversion" do
+ subject {
+ {
+ :var => true,
+ :hello => 1234,
+ :nothing => nil,
+ :sym => :symbolic,
+ :decimal => BigDecimal('1')
+ }
+ }
+
+ it_behaves_like 'expands', {
+ '{var}' => 'true',
+ '{hello}' => '1234',
+ '{nothing}' => '',
+ '{sym}' => 'symbolic',
+ '{decimal}' => RUBY_VERSION < '2.4.0' ? '0.1E1' : '0.1e1'
+ }
+end
+
+describe "Level 1:" do
+ subject {
+ {:var => "value", :hello => "Hello World!"}
+ }
+ it_behaves_like 'expands', {
+ '{var}' => 'value',
+ '{hello}' => 'Hello%20World%21'
+ }
+end
+
+describe "Level 2" do
+ subject {
+ {
+ :var => "value",
+ :hello => "Hello World!",
+ :path => "/foo/bar"
+ }
+ }
+ context "Operator +:" do
+ it_behaves_like 'expands', {
+ '{+var}' => 'value',
+ '{+hello}' => 'Hello%20World!',
+ '{+path}/here' => '/foo/bar/here',
+ 'here?ref={+path}' => 'here?ref=/foo/bar'
+ }
+ end
+ context "Operator #:" do
+ it_behaves_like 'expands', {
+ 'X{#var}' => 'X#value',
+ 'X{#hello}' => 'X#Hello%20World!'
+ }
+ end
+end
+
+describe "Level 3" do
+ subject {
+ {
+ :var => "value",
+ :hello => "Hello World!",
+ :empty => "",
+ :path => "/foo/bar",
+ :x => "1024",
+ :y => "768"
+ }
+ }
+ context "Operator nil (multiple vars):" do
+ it_behaves_like 'expands', {
+ 'map?{x,y}' => 'map?1024,768',
+ '{x,hello,y}' => '1024,Hello%20World%21,768'
+ }
+ end
+ context "Operator + (multiple vars):" do
+ it_behaves_like 'expands', {
+ '{+x,hello,y}' => '1024,Hello%20World!,768',
+ '{+path,x}/here' => '/foo/bar,1024/here'
+ }
+ end
+ context "Operator # (multiple vars):" do
+ it_behaves_like 'expands', {
+ '{#x,hello,y}' => '#1024,Hello%20World!,768',
+ '{#path,x}/here' => '#/foo/bar,1024/here'
+ }
+ end
+ context "Operator ." do
+ it_behaves_like 'expands', {
+ 'X{.var}' => 'X.value',
+ 'X{.x,y}' => 'X.1024.768'
+ }
+ end
+ context "Operator /" do
+ it_behaves_like 'expands', {
+ '{/var}' => '/value',
+ '{/var,x}/here' => '/value/1024/here'
+ }
+ end
+ context "Operator ;" do
+ it_behaves_like 'expands', {
+ '{;x,y}' => ';x=1024;y=768',
+ '{;x,y,empty}' => ';x=1024;y=768;empty'
+ }
+ end
+ context "Operator ?" do
+ it_behaves_like 'expands', {
+ '{?x,y}' => '?x=1024&y=768',
+ '{?x,y,empty}' => '?x=1024&y=768&empty='
+ }
+ end
+ context "Operator &" do
+ it_behaves_like 'expands', {
+ '?fixed=yes{&x}' => '?fixed=yes&x=1024',
+ '{&x,y,empty}' => '&x=1024&y=768&empty='
+ }
+ end
+end
+
+describe "Level 4" do
+ subject {
+ {
+ :var => "value",
+ :hello => "Hello World!",
+ :path => "/foo/bar",
+ :semi => ";",
+ :list => %w(red green blue),
+ :keys => {"semi" => ';', "dot" => '.', "comma" => ','}
+ }
+ }
+ context "Expansion with value modifiers" do
+ it_behaves_like 'expands', {
+ '{var:3}' => 'val',
+ '{var:30}' => 'value',
+ '{list}' => 'red,green,blue',
+ '{list*}' => 'red,green,blue',
+ '{keys}' => [
+ 'semi,%3B,dot,.,comma,%2C',
+ 'dot,.,semi,%3B,comma,%2C',
+ 'comma,%2C,semi,%3B,dot,.',
+ 'semi,%3B,comma,%2C,dot,.',
+ 'dot,.,comma,%2C,semi,%3B',
+ 'comma,%2C,dot,.,semi,%3B'
+ ],
+ '{keys*}' => [
+ 'semi=%3B,dot=.,comma=%2C',
+ 'dot=.,semi=%3B,comma=%2C',
+ 'comma=%2C,semi=%3B,dot=.',
+ 'semi=%3B,comma=%2C,dot=.',
+ 'dot=.,comma=%2C,semi=%3B',
+ 'comma=%2C,dot=.,semi=%3B'
+ ]
+ }
+ end
+ context "Operator + with value modifiers" do
+ it_behaves_like 'expands', {
+ '{+path:6}/here' => '/foo/b/here',
+ '{+list}' => 'red,green,blue',
+ '{+list*}' => 'red,green,blue',
+ '{+keys}' => [
+ 'semi,;,dot,.,comma,,',
+ 'dot,.,semi,;,comma,,',
+ 'comma,,,semi,;,dot,.',
+ 'semi,;,comma,,,dot,.',
+ 'dot,.,comma,,,semi,;',
+ 'comma,,,dot,.,semi,;'
+ ],
+ '{+keys*}' => [
+ 'semi=;,dot=.,comma=,',
+ 'dot=.,semi=;,comma=,',
+ 'comma=,,semi=;,dot=.',
+ 'semi=;,comma=,,dot=.',
+ 'dot=.,comma=,,semi=;',
+ 'comma=,,dot=.,semi=;'
+ ]
+ }
+ end
+ context "Operator # with value modifiers" do
+ it_behaves_like 'expands', {
+ '{#path:6}/here' => '#/foo/b/here',
+ '{#list}' => '#red,green,blue',
+ '{#list*}' => '#red,green,blue',
+ '{#keys}' => [
+ '#semi,;,dot,.,comma,,',
+ '#dot,.,semi,;,comma,,',
+ '#comma,,,semi,;,dot,.',
+ '#semi,;,comma,,,dot,.',
+ '#dot,.,comma,,,semi,;',
+ '#comma,,,dot,.,semi,;'
+ ],
+ '{#keys*}' => [
+ '#semi=;,dot=.,comma=,',
+ '#dot=.,semi=;,comma=,',
+ '#comma=,,semi=;,dot=.',
+ '#semi=;,comma=,,dot=.',
+ '#dot=.,comma=,,semi=;',
+ '#comma=,,dot=.,semi=;'
+ ]
+ }
+ end
+ context "Operator . with value modifiers" do
+ it_behaves_like 'expands', {
+ 'X{.var:3}' => 'X.val',
+ 'X{.list}' => 'X.red,green,blue',
+ 'X{.list*}' => 'X.red.green.blue',
+ 'X{.keys}' => [
+ 'X.semi,%3B,dot,.,comma,%2C',
+ 'X.dot,.,semi,%3B,comma,%2C',
+ 'X.comma,%2C,semi,%3B,dot,.',
+ 'X.semi,%3B,comma,%2C,dot,.',
+ 'X.dot,.,comma,%2C,semi,%3B',
+ 'X.comma,%2C,dot,.,semi,%3B'
+ ],
+ 'X{.keys*}' => [
+ 'X.semi=%3B.dot=..comma=%2C',
+ 'X.dot=..semi=%3B.comma=%2C',
+ 'X.comma=%2C.semi=%3B.dot=.',
+ 'X.semi=%3B.comma=%2C.dot=.',
+ 'X.dot=..comma=%2C.semi=%3B',
+ 'X.comma=%2C.dot=..semi=%3B'
+ ]
+ }
+ end
+ context "Operator / with value modifiers" do
+ it_behaves_like 'expands', {
+ '{/var:1,var}' => '/v/value',
+ '{/list}' => '/red,green,blue',
+ '{/list*}' => '/red/green/blue',
+ '{/list*,path:4}' => '/red/green/blue/%2Ffoo',
+ '{/keys}' => [
+ '/semi,%3B,dot,.,comma,%2C',
+ '/dot,.,semi,%3B,comma,%2C',
+ '/comma,%2C,semi,%3B,dot,.',
+ '/semi,%3B,comma,%2C,dot,.',
+ '/dot,.,comma,%2C,semi,%3B',
+ '/comma,%2C,dot,.,semi,%3B'
+ ],
+ '{/keys*}' => [
+ '/semi=%3B/dot=./comma=%2C',
+ '/dot=./semi=%3B/comma=%2C',
+ '/comma=%2C/semi=%3B/dot=.',
+ '/semi=%3B/comma=%2C/dot=.',
+ '/dot=./comma=%2C/semi=%3B',
+ '/comma=%2C/dot=./semi=%3B'
+ ]
+ }
+ end
+ context "Operator ; with value modifiers" do
+ it_behaves_like 'expands', {
+ '{;hello:5}' => ';hello=Hello',
+ '{;list}' => ';list=red,green,blue',
+ '{;list*}' => ';list=red;list=green;list=blue',
+ '{;keys}' => [
+ ';keys=semi,%3B,dot,.,comma,%2C',
+ ';keys=dot,.,semi,%3B,comma,%2C',
+ ';keys=comma,%2C,semi,%3B,dot,.',
+ ';keys=semi,%3B,comma,%2C,dot,.',
+ ';keys=dot,.,comma,%2C,semi,%3B',
+ ';keys=comma,%2C,dot,.,semi,%3B'
+ ],
+ '{;keys*}' => [
+ ';semi=%3B;dot=.;comma=%2C',
+ ';dot=.;semi=%3B;comma=%2C',
+ ';comma=%2C;semi=%3B;dot=.',
+ ';semi=%3B;comma=%2C;dot=.',
+ ';dot=.;comma=%2C;semi=%3B',
+ ';comma=%2C;dot=.;semi=%3B'
+ ]
+ }
+ end
+ context "Operator ? with value modifiers" do
+ it_behaves_like 'expands', {
+ '{?var:3}' => '?var=val',
+ '{?list}' => '?list=red,green,blue',
+ '{?list*}' => '?list=red&list=green&list=blue',
+ '{?keys}' => [
+ '?keys=semi,%3B,dot,.,comma,%2C',
+ '?keys=dot,.,semi,%3B,comma,%2C',
+ '?keys=comma,%2C,semi,%3B,dot,.',
+ '?keys=semi,%3B,comma,%2C,dot,.',
+ '?keys=dot,.,comma,%2C,semi,%3B',
+ '?keys=comma,%2C,dot,.,semi,%3B'
+ ],
+ '{?keys*}' => [
+ '?semi=%3B&dot=.&comma=%2C',
+ '?dot=.&semi=%3B&comma=%2C',
+ '?comma=%2C&semi=%3B&dot=.',
+ '?semi=%3B&comma=%2C&dot=.',
+ '?dot=.&comma=%2C&semi=%3B',
+ '?comma=%2C&dot=.&semi=%3B'
+ ]
+ }
+ end
+ context "Operator & with value modifiers" do
+ it_behaves_like 'expands', {
+ '{&var:3}' => '&var=val',
+ '{&list}' => '&list=red,green,blue',
+ '{&list*}' => '&list=red&list=green&list=blue',
+ '{&keys}' => [
+ '&keys=semi,%3B,dot,.,comma,%2C',
+ '&keys=dot,.,semi,%3B,comma,%2C',
+ '&keys=comma,%2C,semi,%3B,dot,.',
+ '&keys=semi,%3B,comma,%2C,dot,.',
+ '&keys=dot,.,comma,%2C,semi,%3B',
+ '&keys=comma,%2C,dot,.,semi,%3B'
+ ],
+ '{&keys*}' => [
+ '&semi=%3B&dot=.&comma=%2C',
+ '&dot=.&semi=%3B&comma=%2C',
+ '&comma=%2C&semi=%3B&dot=.',
+ '&semi=%3B&comma=%2C&dot=.',
+ '&dot=.&comma=%2C&semi=%3B',
+ '&comma=%2C&dot=.&semi=%3B'
+ ]
+ }
+ end
+end
+describe "Modifiers" do
+ subject {
+ {
+ :var => "value",
+ :semi => ";",
+ :year => %w(1965 2000 2012),
+ :dom => %w(example com)
+ }
+ }
+ context "length" do
+ it_behaves_like 'expands', {
+ '{var:3}' => 'val',
+ '{var:30}' => 'value',
+ '{var}' => 'value',
+ '{semi}' => '%3B',
+ '{semi:2}' => '%3B'
+ }
+ end
+ context "explode" do
+ it_behaves_like 'expands', {
+ 'find{?year*}' => 'find?year=1965&year=2000&year=2012',
+ 'www{.dom*}' => 'www.example.com',
+ }
+ end
+end
+describe "Expansion" do
+ subject {
+ {
+ :count => ["one", "two", "three"],
+ :dom => ["example", "com"],
+ :dub => "me/too",
+ :hello => "Hello World!",
+ :half => "50%",
+ :var => "value",
+ :who => "fred",
+ :base => "http://example.com/home/",
+ :path => "/foo/bar",
+ :list => ["red", "green", "blue"],
+ :keys => {"semi" => ";","dot" => ".","comma" => ","},
+ :v => "6",
+ :x => "1024",
+ :y => "768",
+ :empty => "",
+ :empty_keys => {},
+ :undef => nil
+ }
+ }
+ context "concatenation" do
+ it_behaves_like 'expands', {
+ '{count}' => 'one,two,three',
+ '{count*}' => 'one,two,three',
+ '{/count}' => '/one,two,three',
+ '{/count*}' => '/one/two/three',
+ '{;count}' => ';count=one,two,three',
+ '{;count*}' => ';count=one;count=two;count=three',
+ '{?count}' => '?count=one,two,three',
+ '{?count*}' => '?count=one&count=two&count=three',
+ '{&count*}' => '&count=one&count=two&count=three'
+ }
+ end
+ context "simple expansion" do
+ it_behaves_like 'expands', {
+ '{var}' => 'value',
+ '{hello}' => 'Hello%20World%21',
+ '{half}' => '50%25',
+ 'O{empty}X' => 'OX',
+ 'O{undef}X' => 'OX',
+ '{x,y}' => '1024,768',
+ '{x,hello,y}' => '1024,Hello%20World%21,768',
+ '?{x,empty}' => '?1024,',
+ '?{x,undef}' => '?1024',
+ '?{undef,y}' => '?768',
+ '{var:3}' => 'val',
+ '{var:30}' => 'value',
+ '{list}' => 'red,green,blue',
+ '{list*}' => 'red,green,blue',
+ '{keys}' => [
+ 'semi,%3B,dot,.,comma,%2C',
+ 'dot,.,semi,%3B,comma,%2C',
+ 'comma,%2C,semi,%3B,dot,.',
+ 'semi,%3B,comma,%2C,dot,.',
+ 'dot,.,comma,%2C,semi,%3B',
+ 'comma,%2C,dot,.,semi,%3B'
+ ],
+ '{keys*}' => [
+ 'semi=%3B,dot=.,comma=%2C',
+ 'dot=.,semi=%3B,comma=%2C',
+ 'comma=%2C,semi=%3B,dot=.',
+ 'semi=%3B,comma=%2C,dot=.',
+ 'dot=.,comma=%2C,semi=%3B',
+ 'comma=%2C,dot=.,semi=%3B'
+ ]
+ }
+ end
+ context "reserved expansion (+)" do
+ it_behaves_like 'expands', {
+ '{+var}' => 'value',
+ '{+hello}' => 'Hello%20World!',
+ '{+half}' => '50%25',
+ '{base}index' => 'http%3A%2F%2Fexample.com%2Fhome%2Findex',
+ '{+base}index' => 'http://example.com/home/index',
+ 'O{+empty}X' => 'OX',
+ 'O{+undef}X' => 'OX',
+ '{+path}/here' => '/foo/bar/here',
+ 'here?ref={+path}' => 'here?ref=/foo/bar',
+ 'up{+path}{var}/here' => 'up/foo/barvalue/here',
+ '{+x,hello,y}' => '1024,Hello%20World!,768',
+ '{+path,x}/here' => '/foo/bar,1024/here',
+ '{+path:6}/here' => '/foo/b/here',
+ '{+list}' => 'red,green,blue',
+ '{+list*}' => 'red,green,blue',
+ '{+keys}' => [
+ 'semi,;,dot,.,comma,,',
+ 'dot,.,semi,;,comma,,',
+ 'comma,,,semi,;,dot,.',
+ 'semi,;,comma,,,dot,.',
+ 'dot,.,comma,,,semi,;',
+ 'comma,,,dot,.,semi,;'
+ ],
+ '{+keys*}' => [
+ 'semi=;,dot=.,comma=,',
+ 'dot=.,semi=;,comma=,',
+ 'comma=,,semi=;,dot=.',
+ 'semi=;,comma=,,dot=.',
+ 'dot=.,comma=,,semi=;',
+ 'comma=,,dot=.,semi=;'
+ ]
+ }
+ end
+ context "fragment expansion (#)" do
+ it_behaves_like 'expands', {
+ '{#var}' => '#value',
+ '{#hello}' => '#Hello%20World!',
+ '{#half}' => '#50%25',
+ 'foo{#empty}' => 'foo#',
+ 'foo{#undef}' => 'foo',
+ '{#x,hello,y}' => '#1024,Hello%20World!,768',
+ '{#path,x}/here' => '#/foo/bar,1024/here',
+ '{#path:6}/here' => '#/foo/b/here',
+ '{#list}' => '#red,green,blue',
+ '{#list*}' => '#red,green,blue',
+ '{#keys}' => [
+ '#semi,;,dot,.,comma,,',
+ '#dot,.,semi,;,comma,,',
+ '#comma,,,semi,;,dot,.',
+ '#semi,;,comma,,,dot,.',
+ '#dot,.,comma,,,semi,;',
+ '#comma,,,dot,.,semi,;'
+ ],
+ '{#keys*}' => [
+ '#semi=;,dot=.,comma=,',
+ '#dot=.,semi=;,comma=,',
+ '#comma=,,semi=;,dot=.',
+ '#semi=;,comma=,,dot=.',
+ '#dot=.,comma=,,semi=;',
+ '#comma=,,dot=.,semi=;'
+ ]
+ }
+ end
+ context "label expansion (.)" do
+ it_behaves_like 'expands', {
+ '{.who}' => '.fred',
+ '{.who,who}' => '.fred.fred',
+ '{.half,who}' => '.50%25.fred',
+ 'www{.dom*}' => 'www.example.com',
+ 'X{.var}' => 'X.value',
+ 'X{.empty}' => 'X.',
+ 'X{.undef}' => 'X',
+ 'X{.var:3}' => 'X.val',
+ 'X{.list}' => 'X.red,green,blue',
+ 'X{.list*}' => 'X.red.green.blue',
+ 'X{.keys}' => [
+ 'X.semi,%3B,dot,.,comma,%2C',
+ 'X.dot,.,semi,%3B,comma,%2C',
+ 'X.comma,%2C,semi,%3B,dot,.',
+ 'X.semi,%3B,comma,%2C,dot,.',
+ 'X.dot,.,comma,%2C,semi,%3B',
+ 'X.comma,%2C,dot,.,semi,%3B'
+ ],
+ 'X{.keys*}' => [
+ 'X.semi=%3B.dot=..comma=%2C',
+ 'X.dot=..semi=%3B.comma=%2C',
+ 'X.comma=%2C.semi=%3B.dot=.',
+ 'X.semi=%3B.comma=%2C.dot=.',
+ 'X.dot=..comma=%2C.semi=%3B',
+ 'X.comma=%2C.dot=..semi=%3B'
+ ],
+ 'X{.empty_keys}' => 'X',
+ 'X{.empty_keys*}' => 'X'
+ }
+ end
+ context "path expansion (/)" do
+ it_behaves_like 'expands', {
+ '{/who}' => '/fred',
+ '{/who,who}' => '/fred/fred',
+ '{/half,who}' => '/50%25/fred',
+ '{/who,dub}' => '/fred/me%2Ftoo',
+ '{/var}' => '/value',
+ '{/var,empty}' => '/value/',
+ '{/var,undef}' => '/value',
+ '{/var,x}/here' => '/value/1024/here',
+ '{/var:1,var}' => '/v/value',
+ '{/list}' => '/red,green,blue',
+ '{/list*}' => '/red/green/blue',
+ '{/list*,path:4}' => '/red/green/blue/%2Ffoo',
+ '{/keys}' => [
+ '/semi,%3B,dot,.,comma,%2C',
+ '/dot,.,semi,%3B,comma,%2C',
+ '/comma,%2C,semi,%3B,dot,.',
+ '/semi,%3B,comma,%2C,dot,.',
+ '/dot,.,comma,%2C,semi,%3B',
+ '/comma,%2C,dot,.,semi,%3B'
+ ],
+ '{/keys*}' => [
+ '/semi=%3B/dot=./comma=%2C',
+ '/dot=./semi=%3B/comma=%2C',
+ '/comma=%2C/semi=%3B/dot=.',
+ '/semi=%3B/comma=%2C/dot=.',
+ '/dot=./comma=%2C/semi=%3B',
+ '/comma=%2C/dot=./semi=%3B'
+ ]
+ }
+ end
+ context "path-style expansion (;)" do
+ it_behaves_like 'expands', {
+ '{;who}' => ';who=fred',
+ '{;half}' => ';half=50%25',
+ '{;empty}' => ';empty',
+ '{;v,empty,who}' => ';v=6;empty;who=fred',
+ '{;v,bar,who}' => ';v=6;who=fred',
+ '{;x,y}' => ';x=1024;y=768',
+ '{;x,y,empty}' => ';x=1024;y=768;empty',
+ '{;x,y,undef}' => ';x=1024;y=768',
+ '{;hello:5}' => ';hello=Hello',
+ '{;list}' => ';list=red,green,blue',
+ '{;list*}' => ';list=red;list=green;list=blue',
+ '{;keys}' => [
+ ';keys=semi,%3B,dot,.,comma,%2C',
+ ';keys=dot,.,semi,%3B,comma,%2C',
+ ';keys=comma,%2C,semi,%3B,dot,.',
+ ';keys=semi,%3B,comma,%2C,dot,.',
+ ';keys=dot,.,comma,%2C,semi,%3B',
+ ';keys=comma,%2C,dot,.,semi,%3B'
+ ],
+ '{;keys*}' => [
+ ';semi=%3B;dot=.;comma=%2C',
+ ';dot=.;semi=%3B;comma=%2C',
+ ';comma=%2C;semi=%3B;dot=.',
+ ';semi=%3B;comma=%2C;dot=.',
+ ';dot=.;comma=%2C;semi=%3B',
+ ';comma=%2C;dot=.;semi=%3B'
+ ]
+ }
+ end
+ context "form query expansion (?)" do
+ it_behaves_like 'expands', {
+ '{?who}' => '?who=fred',
+ '{?half}' => '?half=50%25',
+ '{?x,y}' => '?x=1024&y=768',
+ '{?x,y,empty}' => '?x=1024&y=768&empty=',
+ '{?x,y,undef}' => '?x=1024&y=768',
+ '{?var:3}' => '?var=val',
+ '{?list}' => '?list=red,green,blue',
+ '{?list*}' => '?list=red&list=green&list=blue',
+ '{?keys}' => [
+ '?keys=semi,%3B,dot,.,comma,%2C',
+ '?keys=dot,.,semi,%3B,comma,%2C',
+ '?keys=comma,%2C,semi,%3B,dot,.',
+ '?keys=semi,%3B,comma,%2C,dot,.',
+ '?keys=dot,.,comma,%2C,semi,%3B',
+ '?keys=comma,%2C,dot,.,semi,%3B'
+ ],
+ '{?keys*}' => [
+ '?semi=%3B&dot=.&comma=%2C',
+ '?dot=.&semi=%3B&comma=%2C',
+ '?comma=%2C&semi=%3B&dot=.',
+ '?semi=%3B&comma=%2C&dot=.',
+ '?dot=.&comma=%2C&semi=%3B',
+ '?comma=%2C&dot=.&semi=%3B'
+ ]
+ }
+ end
+ context "form query expansion (&)" do
+ it_behaves_like 'expands', {
+ '{&who}' => '&who=fred',
+ '{&half}' => '&half=50%25',
+ '?fixed=yes{&x}' => '?fixed=yes&x=1024',
+ '{&x,y,empty}' => '&x=1024&y=768&empty=',
+ '{&x,y,undef}' => '&x=1024&y=768',
+ '{&var:3}' => '&var=val',
+ '{&list}' => '&list=red,green,blue',
+ '{&list*}' => '&list=red&list=green&list=blue',
+ '{&keys}' => [
+ '&keys=semi,%3B,dot,.,comma,%2C',
+ '&keys=dot,.,semi,%3B,comma,%2C',
+ '&keys=comma,%2C,semi,%3B,dot,.',
+ '&keys=semi,%3B,comma,%2C,dot,.',
+ '&keys=dot,.,comma,%2C,semi,%3B',
+ '&keys=comma,%2C,dot,.,semi,%3B'
+ ],
+ '{&keys*}' => [
+ '&semi=%3B&dot=.&comma=%2C',
+ '&dot=.&semi=%3B&comma=%2C',
+ '&comma=%2C&semi=%3B&dot=.',
+ '&semi=%3B&comma=%2C&dot=.',
+ '&dot=.&comma=%2C&semi=%3B',
+ '&comma=%2C&dot=.&semi=%3B'
+ ]
+ }
+ end
+ context "non-string key in match data" do
+ subject {Addressable::Template.new("http://example.com/{one}")}
+
+ it "raises TypeError" do
+ expect { subject.expand(Object.new => "1") }.to raise_error TypeError
+ end
+ end
+end
+
+class ExampleTwoProcessor
+ def self.restore(name, value)
+ return value.gsub(/-/, " ") if name == "query"
+ return value
+ end
+
+ def self.match(name)
+ return ".*?" if name == "first"
+ return ".*"
+ end
+ def self.validate(name, value)
+ return !!(value =~ /^[\w ]+$/) if name == "query"
+ return true
+ end
+
+ def self.transform(name, value)
+ return value.gsub(/ /, "+") if name == "query"
+ return value
+ end
+end
+
+class DumbProcessor
+ def self.match(name)
+ return ".*?" if name == "first"
+ end
+end
+
+describe Addressable::Template do
+ describe 'initialize' do
+ context 'with a non-string' do
+ it 'raises a TypeError' do
+ expect { Addressable::Template.new(nil) }.to raise_error(TypeError)
+ end
+ end
+ end
+
+ describe 'freeze' do
+ subject { Addressable::Template.new("http://example.com/{first}/{+second}/") }
+ it 'freezes the template' do
+ expect(subject.freeze).to be_frozen
+ end
+ end
+
+ describe "Matching" do
+ let(:uri){
+ Addressable::URI.parse(
+ "http://example.com/search/an-example-search-query/"
+ )
+ }
+ let(:uri2){
+ Addressable::URI.parse("http://example.com/a/b/c/")
+ }
+ let(:uri3){
+ Addressable::URI.parse("http://example.com/;a=1;b=2;c=3;first=foo")
+ }
+ let(:uri4){
+ Addressable::URI.parse("http://example.com/?a=1&b=2&c=3&first=foo")
+ }
+ let(:uri5){
+ "http://example.com/foo"
+ }
+ context "first uri with ExampleTwoProcessor" do
+ subject {
+ Addressable::Template.new(
+ "http://example.com/search/{query}/"
+ ).match(uri, ExampleTwoProcessor)
+ }
+ its(:variables){ should == ["query"] }
+ its(:captures){ should == ["an example search query"] }
+ end
+
+ context "second uri with ExampleTwoProcessor" do
+ subject {
+ Addressable::Template.new(
+ "http://example.com/{first}/{+second}/"
+ ).match(uri2, ExampleTwoProcessor)
+ }
+ its(:variables){ should == ["first", "second"] }
+ its(:captures){ should == ["a", "b/c"] }
+ end
+
+ context "second uri with DumbProcessor" do
+ subject {
+ Addressable::Template.new(
+ "http://example.com/{first}/{+second}/"
+ ).match(uri2, DumbProcessor)
+ }
+ its(:variables){ should == ["first", "second"] }
+ its(:captures){ should == ["a", "b/c"] }
+ end
+
+ context "second uri" do
+ subject {
+ Addressable::Template.new(
+ "http://example.com/{first}{/second*}/"
+ ).match(uri2)
+ }
+ its(:variables){ should == ["first", "second"] }
+ its(:captures){ should == ["a", ["b","c"]] }
+ end
+ context "third uri" do
+ subject {
+ Addressable::Template.new(
+ "http://example.com/{;hash*,first}"
+ ).match(uri3)
+ }
+ its(:variables){ should == ["hash", "first"] }
+ its(:captures){ should == [
+ {"a" => "1", "b" => "2", "c" => "3", "first" => "foo"}, nil] }
+ end
+ # Note that this expansion is impossible to revert deterministically - the
+ # * operator means first could have been a key of hash or a separate key.
+ # Semantically, a separate key is more likely, but both are possible.
+ context "fourth uri" do
+ subject {
+ Addressable::Template.new(
+ "http://example.com/{?hash*,first}"
+ ).match(uri4)
+ }
+ its(:variables){ should == ["hash", "first"] }
+ its(:captures){ should == [
+ {"a" => "1", "b" => "2", "c" => "3", "first"=> "foo"}, nil] }
+ end
+ context "fifth uri" do
+ subject {
+ Addressable::Template.new(
+ "http://example.com/{path}{?hash*,first}"
+ ).match(uri5)
+ }
+ its(:variables){ should == ["path", "hash", "first"] }
+ its(:captures){ should == ["foo", nil, nil] }
+ end
+ end
+
+ describe 'match' do
+ subject { Addressable::Template.new('http://example.com/first/second/') }
+ context 'when the URI is the same as the template' do
+ it 'returns the match data itself with an empty mapping' do
+ uri = Addressable::URI.parse('http://example.com/first/second/')
+ match_data = subject.match(uri)
+ expect(match_data).to be_an Addressable::Template::MatchData
+ expect(match_data.uri).to eq(uri)
+ expect(match_data.template).to eq(subject)
+ expect(match_data.mapping).to be_empty
+ expect(match_data.inspect).to be_an String
+ end
+ end
+ end
+
+ describe "extract" do
+ let(:template) {
+ Addressable::Template.new(
+ "http://{host}{/segments*}/{?one,two,bogus}{#fragment}"
+ )
+ }
+ let(:uri){ "http://example.com/a/b/c/?one=1&two=2#foo" }
+ let(:uri2){ "http://example.com/a/b/c/#foo" }
+ it "should be able to extract with queries" do
+ expect(template.extract(uri)).to eq({
+ "host" => "example.com",
+ "segments" => %w(a b c),
+ "one" => "1",
+ "bogus" => nil,
+ "two" => "2",
+ "fragment" => "foo"
+ })
+ end
+ it "should be able to extract without queries" do
+ expect(template.extract(uri2)).to eq({
+ "host" => "example.com",
+ "segments" => %w(a b c),
+ "one" => nil,
+ "bogus" => nil,
+ "two" => nil,
+ "fragment" => "foo"
+ })
+ end
+
+ context "issue #137" do
+ subject { Addressable::Template.new('/path{?page,per_page}') }
+
+ it "can match empty" do
+ data = subject.extract("/path")
+ expect(data["page"]).to eq(nil)
+ expect(data["per_page"]).to eq(nil)
+ expect(data.keys.sort).to eq(['page', 'per_page'])
+ end
+
+ it "can match first var" do
+ data = subject.extract("/path?page=1")
+ expect(data["page"]).to eq("1")
+ expect(data["per_page"]).to eq(nil)
+ expect(data.keys.sort).to eq(['page', 'per_page'])
+ end
+
+ it "can match second var" do
+ data = subject.extract("/path?per_page=1")
+ expect(data["page"]).to eq(nil)
+ expect(data["per_page"]).to eq("1")
+ expect(data.keys.sort).to eq(['page', 'per_page'])
+ end
+
+ it "can match both vars" do
+ data = subject.extract("/path?page=2&per_page=1")
+ expect(data["page"]).to eq("2")
+ expect(data["per_page"]).to eq("1")
+ expect(data.keys.sort).to eq(['page', 'per_page'])
+ end
+ end
+ end
+
+ describe "Partial expand with symbols" do
+ context "partial_expand with two simple values" do
+ subject {
+ Addressable::Template.new("http://example.com/{one}/{two}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand(:one => "1").pattern).to eq(
+ "http://example.com/1/{two}/"
+ )
+ end
+ end
+ context "partial_expand query with missing param in middle" do
+ subject {
+ Addressable::Template.new("http://example.com/{?one,two,three}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand(:one => "1", :three => "3").pattern).to eq(
+ "http://example.com/?one=1{&two}&three=3/"
+ )
+ end
+ end
+ context "partial_expand form style query with missing param at beginning" do
+ subject {
+ Addressable::Template.new("http://example.com/{?one,two}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand(:two => "2").pattern).to eq(
+ "http://example.com/?two=2{&one}/"
+ )
+ end
+ end
+ context "issue #307 - partial_expand form query with nil params" do
+ subject do
+ Addressable::Template.new("http://example.com/{?one,two,three}/")
+ end
+ it "builds a new pattern with two=nil" do
+ expect(subject.partial_expand(two: nil).pattern).to eq(
+ "http://example.com/{?one}{&three}/"
+ )
+ end
+ it "builds a new pattern with one=nil and two=nil" do
+ expect(subject.partial_expand(one: nil, two: nil).pattern).to eq(
+ "http://example.com/{?three}/"
+ )
+ end
+ it "builds a new pattern with one=1 and two=nil" do
+ expect(subject.partial_expand(one: 1, two: nil).pattern).to eq(
+ "http://example.com/?one=1{&three}/"
+ )
+ end
+ it "builds a new pattern with one=nil and two=2" do
+ expect(subject.partial_expand(one: nil, two: 2).pattern).to eq(
+ "http://example.com/?two=2{&three}/"
+ )
+ end
+ it "builds a new pattern with one=nil" do
+ expect(subject.partial_expand(one: nil).pattern).to eq(
+ "http://example.com/{?two}{&three}/"
+ )
+ end
+ end
+ context "partial_expand with query string" do
+ subject {
+ Addressable::Template.new("http://example.com/{?two,one}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand(:one => "1").pattern).to eq(
+ "http://example.com/?one=1{&two}/"
+ )
+ end
+ end
+ context "partial_expand with path operator" do
+ subject {
+ Addressable::Template.new("http://example.com{/one,two}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand(:one => "1").pattern).to eq(
+ "http://example.com/1{/two}/"
+ )
+ end
+ end
+ context "partial expand with unicode values" do
+ subject do
+ Addressable::Template.new("http://example.com/{resource}/{query}/")
+ end
+ it "normalizes unicode by default" do
+ template = subject.partial_expand("query" => "Cafe\u0301")
+ expect(template.pattern).to eq(
+ "http://example.com/{resource}/Caf%C3%A9/"
+ )
+ end
+
+ it "does not normalize unicode when byte semantics requested" do
+ template = subject.partial_expand({"query" => "Cafe\u0301"}, nil, false)
+ expect(template.pattern).to eq(
+ "http://example.com/{resource}/Cafe%CC%81/"
+ )
+ end
+ end
+ end
+ describe "Partial expand with strings" do
+ context "partial_expand with two simple values" do
+ subject {
+ Addressable::Template.new("http://example.com/{one}/{two}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand("one" => "1").pattern).to eq(
+ "http://example.com/1/{two}/"
+ )
+ end
+ end
+ context "partial_expand query with missing param in middle" do
+ subject {
+ Addressable::Template.new("http://example.com/{?one,two,three}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand("one" => "1", "three" => "3").pattern).to eq(
+ "http://example.com/?one=1{&two}&three=3/"
+ )
+ end
+ end
+ context "partial_expand with query string" do
+ subject {
+ Addressable::Template.new("http://example.com/{?two,one}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand("one" => "1").pattern).to eq(
+ "http://example.com/?one=1{&two}/"
+ )
+ end
+ end
+ context "partial_expand with path operator" do
+ subject {
+ Addressable::Template.new("http://example.com{/one,two}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand("one" => "1").pattern).to eq(
+ "http://example.com/1{/two}/"
+ )
+ end
+ end
+ end
+ describe "Expand" do
+ context "expand with unicode values" do
+ subject do
+ Addressable::Template.new("http://example.com/search/{query}/")
+ end
+ it "normalizes unicode by default" do
+ uri = subject.expand("query" => "Cafe\u0301").to_str
+ expect(uri).to eq("http://example.com/search/Caf%C3%A9/")
+ end
+
+ it "does not normalize unicode when byte semantics requested" do
+ uri = subject.expand({ "query" => "Cafe\u0301" }, nil, false).to_str
+ expect(uri).to eq("http://example.com/search/Cafe%CC%81/")
+ end
+ end
+ context "expand with a processor" do
+ subject {
+ Addressable::Template.new("http://example.com/search/{query}/")
+ }
+ it "processes spaces" do
+ expect(subject.expand({"query" => "an example search query"},
+ ExampleTwoProcessor).to_str).to eq(
+ "http://example.com/search/an+example+search+query/"
+ )
+ end
+ it "validates" do
+ expect{
+ subject.expand({"query" => "Bogus!"},
+ ExampleTwoProcessor).to_str
+ }.to raise_error(Addressable::Template::InvalidTemplateValueError)
+ end
+ end
+ context "partial_expand query with missing param in middle" do
+ subject {
+ Addressable::Template.new("http://example.com/{?one,two,three}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand("one" => "1", "three" => "3").pattern).to eq(
+ "http://example.com/?one=1{&two}&three=3/"
+ )
+ end
+ end
+ context "partial_expand with query string" do
+ subject {
+ Addressable::Template.new("http://example.com/{?two,one}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand("one" => "1").pattern).to eq(
+ "http://example.com/?one=1{&two}/"
+ )
+ end
+ end
+ context "partial_expand with path operator" do
+ subject {
+ Addressable::Template.new("http://example.com{/one,two}/")
+ }
+ it "builds a new pattern" do
+ expect(subject.partial_expand("one" => "1").pattern).to eq(
+ "http://example.com/1{/two}/"
+ )
+ end
+ end
+ end
+ context "Matching with operators" do
+ describe "Level 1:" do
+ subject { Addressable::Template.new("foo{foo}/{bar}baz") }
+ it "can match" do
+ data = subject.match("foofoo/bananabaz")
+ expect(data.mapping["foo"]).to eq("foo")
+ expect(data.mapping["bar"]).to eq("banana")
+ end
+ it "can fail" do
+ expect(subject.match("bar/foo")).to be_nil
+ expect(subject.match("foobaz")).to be_nil
+ end
+ it "can match empty" do
+ data = subject.match("foo/baz")
+ expect(data.mapping["foo"]).to eq(nil)
+ expect(data.mapping["bar"]).to eq(nil)
+ end
+ it "lists vars" do
+ expect(subject.variables).to eq(["foo", "bar"])
+ end
+ end
+
+ describe "Level 2:" do
+ subject { Addressable::Template.new("foo{+foo}{#bar}baz") }
+ it "can match" do
+ data = subject.match("foo/test/banana#bazbaz")
+ expect(data.mapping["foo"]).to eq("/test/banana")
+ expect(data.mapping["bar"]).to eq("baz")
+ end
+ it "can match empty level 2 #" do
+ data = subject.match("foo/test/bananabaz")
+ expect(data.mapping["foo"]).to eq("/test/banana")
+ expect(data.mapping["bar"]).to eq(nil)
+ data = subject.match("foo/test/banana#baz")
+ expect(data.mapping["foo"]).to eq("/test/banana")
+ expect(data.mapping["bar"]).to eq("")
+ end
+ it "can match empty level 2 +" do
+ data = subject.match("foobaz")
+ expect(data.mapping["foo"]).to eq(nil)
+ expect(data.mapping["bar"]).to eq(nil)
+ data = subject.match("foo#barbaz")
+ expect(data.mapping["foo"]).to eq(nil)
+ expect(data.mapping["bar"]).to eq("bar")
+ end
+ it "lists vars" do
+ expect(subject.variables).to eq(["foo", "bar"])
+ end
+ end
+
+ describe "Level 3:" do
+ context "no operator" do
+ subject { Addressable::Template.new("foo{foo,bar}baz") }
+ it "can match" do
+ data = subject.match("foofoo,barbaz")
+ expect(data.mapping["foo"]).to eq("foo")
+ expect(data.mapping["bar"]).to eq("bar")
+ end
+ it "lists vars" do
+ expect(subject.variables).to eq(["foo", "bar"])
+ end
+ end
+ context "+ operator" do
+ subject { Addressable::Template.new("foo{+foo,bar}baz") }
+ it "can match" do
+ data = subject.match("foofoo/bar,barbaz")
+ expect(data.mapping["bar"]).to eq("foo/bar,bar")
+ expect(data.mapping["foo"]).to eq("")
+ end
+ it "lists vars" do
+ expect(subject.variables).to eq(["foo", "bar"])
+ end
+ end
+ context ". operator" do
+ subject { Addressable::Template.new("foo{.foo,bar}baz") }
+ it "can match" do
+ data = subject.match("foo.foo.barbaz")
+ expect(data.mapping["foo"]).to eq("foo")
+ expect(data.mapping["bar"]).to eq("bar")
+ end
+ it "lists vars" do
+ expect(subject.variables).to eq(["foo", "bar"])
+ end
+ end
+ context "/ operator" do
+ subject { Addressable::Template.new("foo{/foo,bar}baz") }
+ it "can match" do
+ data = subject.match("foo/foo/barbaz")
+ expect(data.mapping["foo"]).to eq("foo")
+ expect(data.mapping["bar"]).to eq("bar")
+ end
+ it "lists vars" do
+ expect(subject.variables).to eq(["foo", "bar"])
+ end
+ end
+ context "; operator" do
+ subject { Addressable::Template.new("foo{;foo,bar,baz}baz") }
+ it "can match" do
+ data = subject.match("foo;foo=bar%20baz;bar=foo;bazbaz")
+ expect(data.mapping["foo"]).to eq("bar baz")
+ expect(data.mapping["bar"]).to eq("foo")
+ expect(data.mapping["baz"]).to eq("")
+ end
+ it "lists vars" do
+ expect(subject.variables).to eq(%w(foo bar baz))
+ end
+ end
+ context "? operator" do
+ context "test" do
+ subject { Addressable::Template.new("foo{?foo,bar}baz") }
+ it "can match" do
+ data = subject.match("foo?foo=bar%20baz&bar=foobaz")
+ expect(data.mapping["foo"]).to eq("bar baz")
+ expect(data.mapping["bar"]).to eq("foo")
+ end
+ it "lists vars" do
+ expect(subject.variables).to eq(%w(foo bar))
+ end
+ end
+
+ context "issue #137" do
+ subject { Addressable::Template.new('/path{?page,per_page}') }
+
+ it "can match empty" do
+ data = subject.match("/path")
+ expect(data.mapping["page"]).to eq(nil)
+ expect(data.mapping["per_page"]).to eq(nil)
+ expect(data.mapping.keys.sort).to eq(['page', 'per_page'])
+ end
+
+ it "can match first var" do
+ data = subject.match("/path?page=1")
+ expect(data.mapping["page"]).to eq("1")
+ expect(data.mapping["per_page"]).to eq(nil)
+ expect(data.mapping.keys.sort).to eq(['page', 'per_page'])
+ end
+
+ it "can match second var" do
+ data = subject.match("/path?per_page=1")
+ expect(data.mapping["page"]).to eq(nil)
+ expect(data.mapping["per_page"]).to eq("1")
+ expect(data.mapping.keys.sort).to eq(['page', 'per_page'])
+ end
+
+ it "can match both vars" do
+ data = subject.match("/path?page=2&per_page=1")
+ expect(data.mapping["page"]).to eq("2")
+ expect(data.mapping["per_page"]).to eq("1")
+ expect(data.mapping.keys.sort).to eq(['page', 'per_page'])
+ end
+ end
+
+ context "issue #71" do
+ subject { Addressable::Template.new("http://cyberscore.dev/api/users{?username}") }
+ it "can match" do
+ data = subject.match("http://cyberscore.dev/api/users?username=foobaz")
+ expect(data.mapping["username"]).to eq("foobaz")
+ end
+ it "lists vars" do
+ expect(subject.variables).to eq(%w(username))
+ expect(subject.keys).to eq(%w(username))
+ end
+ end
+ end
+ context "& operator" do
+ subject { Addressable::Template.new("foo{&foo,bar}baz") }
+ it "can match" do
+ data = subject.match("foo&foo=bar%20baz&bar=foobaz")
+ expect(data.mapping["foo"]).to eq("bar baz")
+ expect(data.mapping["bar"]).to eq("foo")
+ end
+ it "lists vars" do
+ expect(subject.variables).to eq(%w(foo bar))
+ end
+ end
+ end
+ end
+
+ context "support regexes:" do
+ context "EXPRESSION" do
+ subject { Addressable::Template::EXPRESSION }
+ it "should be able to match an expression" do
+ expect(subject).to match("{foo}")
+ expect(subject).to match("{foo,9}")
+ expect(subject).to match("{foo.bar,baz}")
+ expect(subject).to match("{+foo.bar,baz}")
+ expect(subject).to match("{foo,foo%20bar}")
+ expect(subject).to match("{#foo:20,baz*}")
+ expect(subject).to match("stuff{#foo:20,baz*}things")
+ end
+ it "should fail on non vars" do
+ expect(subject).not_to match("!{foo")
+ expect(subject).not_to match("{foo.bar.}")
+ expect(subject).not_to match("!{}")
+ end
+ end
+ context "VARNAME" do
+ subject { Addressable::Template::VARNAME }
+ it "should be able to match a variable" do
+ expect(subject).to match("foo")
+ expect(subject).to match("9")
+ expect(subject).to match("foo.bar")
+ expect(subject).to match("foo_bar")
+ expect(subject).to match("foo_bar.baz")
+ expect(subject).to match("foo%20bar")
+ expect(subject).to match("foo%20bar.baz")
+ end
+ it "should fail on non vars" do
+ expect(subject).not_to match("!foo")
+ expect(subject).not_to match("foo.bar.")
+ expect(subject).not_to match("foo%2%00bar")
+ expect(subject).not_to match("foo_ba%r")
+ expect(subject).not_to match("foo_bar*")
+ expect(subject).not_to match("foo_bar:20")
+ end
+
+ it 'should parse in a reasonable time' do
+ expect do
+ Timeout.timeout(0.1) do
+ expect(subject).not_to match("0"*25 + "!")
+ end
+ end.not_to raise_error
+ end
+ end
+ context "VARIABLE_LIST" do
+ subject { Addressable::Template::VARIABLE_LIST }
+ it "should be able to match a variable list" do
+ expect(subject).to match("foo,bar")
+ expect(subject).to match("foo")
+ expect(subject).to match("foo,bar*,baz")
+ expect(subject).to match("foo.bar,bar_baz*,baz:12")
+ end
+ it "should fail on non vars" do
+ expect(subject).not_to match(",foo,bar*,baz")
+ expect(subject).not_to match("foo,*bar,baz")
+ expect(subject).not_to match("foo,,bar*,baz")
+ end
+ end
+ context "VARSPEC" do
+ subject { Addressable::Template::VARSPEC }
+ it "should be able to match a variable with modifier" do
+ expect(subject).to match("9:8")
+ expect(subject).to match("foo.bar*")
+ expect(subject).to match("foo_bar:12")
+ expect(subject).to match("foo_bar.baz*")
+ expect(subject).to match("foo%20bar:12")
+ expect(subject).to match("foo%20bar.baz*")
+ end
+ it "should fail on non vars" do
+ expect(subject).not_to match("!foo")
+ expect(subject).not_to match("*foo")
+ expect(subject).not_to match("fo*o")
+ expect(subject).not_to match("fo:o")
+ expect(subject).not_to match("foo:")
+ end
+ end
+ end
+end
+
+describe Addressable::Template::MatchData do
+ let(:template) { Addressable::Template.new('{foo}/{bar}') }
+ subject(:its) { template.match('ab/cd') }
+ its(:uri) { should == Addressable::URI.parse('ab/cd') }
+ its(:template) { should == template }
+ its(:mapping) { should == { 'foo' => 'ab', 'bar' => 'cd' } }
+ its(:variables) { should == ['foo', 'bar'] }
+ its(:keys) { should == ['foo', 'bar'] }
+ its(:names) { should == ['foo', 'bar'] }
+ its(:values) { should == ['ab', 'cd'] }
+ its(:captures) { should == ['ab', 'cd'] }
+ its(:to_a) { should == ['ab/cd', 'ab', 'cd'] }
+ its(:to_s) { should == 'ab/cd' }
+ its(:string) { should == its.to_s }
+ its(:pre_match) { should == "" }
+ its(:post_match) { should == "" }
+
+ describe 'values_at' do
+ it 'returns an array with the values' do
+ expect(its.values_at(0, 2)).to eq(['ab/cd', 'cd'])
+ end
+ it 'allows mixing integer an string keys' do
+ expect(its.values_at('foo', 1)).to eq(['ab', 'ab'])
+ end
+ it 'accepts unknown keys' do
+ expect(its.values_at('baz', 'foo')).to eq([nil, 'ab'])
+ end
+ end
+
+ describe '[]' do
+ context 'string key' do
+ it 'returns the corresponding capture' do
+ expect(its['foo']).to eq('ab')
+ expect(its['bar']).to eq('cd')
+ end
+ it 'returns nil for unknown keys' do
+ expect(its['baz']).to be_nil
+ end
+ end
+ context 'symbol key' do
+ it 'returns the corresponding capture' do
+ expect(its[:foo]).to eq('ab')
+ expect(its[:bar]).to eq('cd')
+ end
+ it 'returns nil for unknown keys' do
+ expect(its[:baz]).to be_nil
+ end
+ end
+ context 'integer key' do
+ it 'returns the full URI for index 0' do
+ expect(its[0]).to eq('ab/cd')
+ end
+ it 'returns the corresponding capture' do
+ expect(its[1]).to eq('ab')
+ expect(its[2]).to eq('cd')
+ end
+ it 'returns nil for unknown keys' do
+ expect(its[3]).to be_nil
+ end
+ end
+ context 'other key' do
+ it 'raises an exception' do
+ expect { its[Object.new] }.to raise_error(TypeError)
+ end
+ end
+ context 'with length' do
+ it 'returns an array starting at index with given length' do
+ expect(its[0, 2]).to eq(['ab/cd', 'ab'])
+ expect(its[2, 1]).to eq(['cd'])
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/uri_spec.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/uri_spec.rb
new file mode 100644
index 000000000..00baaacf9
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/uri_spec.rb
@@ -0,0 +1,6665 @@
+# frozen_string_literal: true
+
+# coding: utf-8
+# Copyright (C) Bob Aman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+require "spec_helper"
+
+require "addressable/uri"
+require "uri"
+require "ipaddr"
+
+if !"".respond_to?("force_encoding")
+ class String
+ def force_encoding(encoding)
+ @encoding = encoding
+ end
+
+ def encoding
+ @encoding ||= Encoding::ASCII_8BIT
+ end
+ end
+
+ class Encoding
+ def initialize(name)
+ @name = name
+ end
+
+ def to_s
+ return @name
+ end
+
+ UTF_8 = Encoding.new("UTF-8")
+ ASCII_8BIT = Encoding.new("US-ASCII")
+ end
+end
+
+module Fake
+ module URI
+ class HTTP
+ def initialize(uri)
+ @uri = uri
+ end
+
+ def to_s
+ return @uri.to_s
+ end
+
+ alias :to_str :to_s
+ end
+ end
+end
+
+describe Addressable::URI, "when created with a non-numeric port number" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:port => "bogus")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when created with a invalid encoded port number" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:port => "%eb")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when created with a non-string scheme" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:scheme => :bogus)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when created with a non-string user" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:user => :bogus)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when created with a non-string password" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:password => :bogus)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when created with a non-string userinfo" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:userinfo => :bogus)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when created with a non-string host" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:host => :bogus)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when created with a non-string authority" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:authority => :bogus)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when created with a non-string path" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:path => :bogus)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when created with a non-string query" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:query => :bogus)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when created with a non-string fragment" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:fragment => :bogus)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when created with a scheme but no hierarchical " +
+ "segment" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.parse("http:")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "quote handling" do
+ describe 'in host name' do
+ it "should raise an error for single quote" do
+ expect do
+ Addressable::URI.parse("http://local\"host/")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+ end
+end
+
+describe Addressable::URI, "newline normalization" do
+ it "should not accept newlines in scheme" do
+ expect do
+ Addressable::URI.parse("ht%0atp://localhost/")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should not unescape newline in path" do
+ uri = Addressable::URI.parse("http://localhost/%0a").normalize
+ expect(uri.to_s).to eq("http://localhost/%0A")
+ end
+
+ it "should not unescape newline in hostname" do
+ uri = Addressable::URI.parse("http://local%0ahost/").normalize
+ expect(uri.to_s).to eq("http://local%0Ahost/")
+ end
+
+ it "should not unescape newline in username" do
+ uri = Addressable::URI.parse("http://foo%0abar@localhost/").normalize
+ expect(uri.to_s).to eq("http://foo%0Abar@localhost/")
+ end
+
+ it "should not unescape newline in username" do
+ uri = Addressable::URI.parse("http://example:foo%0abar@example/").normalize
+ expect(uri.to_s).to eq("http://example:foo%0Abar@example/")
+ end
+
+ it "should not accept newline in hostname" do
+ uri = Addressable::URI.parse("http://localhost/")
+ expect do
+ uri.host = "local\nhost"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when created with ambiguous path" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.parse("::http")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when created with an invalid host" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:host => "")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when created with a host consisting of " +
+ "sub-delims characters" do
+ it "should not raise an error" do
+ expect do
+ Addressable::URI.new(
+ :host => Addressable::URI::CharacterClasses::SUB_DELIMS.gsub(/\\/, '')
+ )
+ end.not_to raise_error
+ end
+end
+
+describe Addressable::URI, "when created with a host consisting of " +
+ "unreserved characters" do
+ it "should not raise an error" do
+ expect do
+ Addressable::URI.new(
+ :host => Addressable::URI::CharacterClasses::UNRESERVED.gsub(/\\/, '')
+ )
+ end.not_to raise_error
+ end
+end
+
+describe Addressable::URI, "when created from nil components" do
+ before do
+ @uri = Addressable::URI.new
+ end
+
+ it "should have a nil site value" do
+ expect(@uri.site).to eq(nil)
+ end
+
+ it "should have an empty path" do
+ expect(@uri.path).to eq("")
+ end
+
+ it "should be an empty uri" do
+ expect(@uri.to_s).to eq("")
+ end
+
+ it "should have a nil default port" do
+ expect(@uri.default_port).to eq(nil)
+ end
+
+ it "should be empty" do
+ expect(@uri).to be_empty
+ end
+
+ it "should raise an error if the scheme is set to whitespace" do
+ expect do
+ @uri.scheme = "\t \n"
+ end.to raise_error(Addressable::URI::InvalidURIError, /'\t \n'/)
+ end
+
+ it "should raise an error if the scheme is set to all digits" do
+ expect do
+ @uri.scheme = "123"
+ end.to raise_error(Addressable::URI::InvalidURIError, /'123'/)
+ end
+
+ it "should raise an error if the scheme begins with a digit" do
+ expect do
+ @uri.scheme = "1scheme"
+ end.to raise_error(Addressable::URI::InvalidURIError, /'1scheme'/)
+ end
+
+ it "should raise an error if the scheme begins with a plus" do
+ expect do
+ @uri.scheme = "+scheme"
+ end.to raise_error(Addressable::URI::InvalidURIError, /'\+scheme'/)
+ end
+
+ it "should raise an error if the scheme begins with a dot" do
+ expect do
+ @uri.scheme = ".scheme"
+ end.to raise_error(Addressable::URI::InvalidURIError, /'\.scheme'/)
+ end
+
+ it "should raise an error if the scheme begins with a dash" do
+ expect do
+ @uri.scheme = "-scheme"
+ end.to raise_error(Addressable::URI::InvalidURIError, /'-scheme'/)
+ end
+
+ it "should raise an error if the scheme contains an illegal character" do
+ expect do
+ @uri.scheme = "scheme!"
+ end.to raise_error(Addressable::URI::InvalidURIError, /'scheme!'/)
+ end
+
+ it "should raise an error if the scheme contains whitespace" do
+ expect do
+ @uri.scheme = "sch eme"
+ end.to raise_error(Addressable::URI::InvalidURIError, /'sch eme'/)
+ end
+
+ it "should raise an error if the scheme contains a newline" do
+ expect do
+ @uri.scheme = "sch\neme"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should raise an error if set into an invalid state" do
+ expect do
+ @uri.user = "user"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should raise an error if set into an invalid state" do
+ expect do
+ @uri.password = "pass"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should raise an error if set into an invalid state" do
+ expect do
+ @uri.scheme = "http"
+ @uri.fragment = "fragment"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should raise an error if set into an invalid state" do
+ expect do
+ @uri.fragment = "fragment"
+ @uri.scheme = "http"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when initialized from individual components" do
+ before do
+ @uri = Addressable::URI.new(
+ :scheme => "http",
+ :user => "user",
+ :password => "password",
+ :host => "example.com",
+ :port => 8080,
+ :path => "/path",
+ :query => "query=value",
+ :fragment => "fragment"
+ )
+ end
+
+ it "returns 'http' for #scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "returns 'http' for #normalized_scheme" do
+ expect(@uri.normalized_scheme).to eq("http")
+ end
+
+ it "returns 'user' for #user" do
+ expect(@uri.user).to eq("user")
+ end
+
+ it "returns 'user' for #normalized_user" do
+ expect(@uri.normalized_user).to eq("user")
+ end
+
+ it "returns 'password' for #password" do
+ expect(@uri.password).to eq("password")
+ end
+
+ it "returns 'password' for #normalized_password" do
+ expect(@uri.normalized_password).to eq("password")
+ end
+
+ it "returns 'user:password' for #userinfo" do
+ expect(@uri.userinfo).to eq("user:password")
+ end
+
+ it "returns 'user:password' for #normalized_userinfo" do
+ expect(@uri.normalized_userinfo).to eq("user:password")
+ end
+
+ it "returns 'example.com' for #host" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "returns 'example.com' for #normalized_host" do
+ expect(@uri.normalized_host).to eq("example.com")
+ end
+
+ it "returns 'com' for #tld" do
+ expect(@uri.tld).to eq("com")
+ end
+
+ it "returns 'user:password@example.com:8080' for #authority" do
+ expect(@uri.authority).to eq("user:password@example.com:8080")
+ end
+
+ it "returns 'user:password@example.com:8080' for #normalized_authority" do
+ expect(@uri.normalized_authority).to eq("user:password@example.com:8080")
+ end
+
+ it "returns 8080 for #port" do
+ expect(@uri.port).to eq(8080)
+ end
+
+ it "returns 8080 for #normalized_port" do
+ expect(@uri.normalized_port).to eq(8080)
+ end
+
+ it "returns 80 for #default_port" do
+ expect(@uri.default_port).to eq(80)
+ end
+
+ it "returns 'http://user:password@example.com:8080' for #site" do
+ expect(@uri.site).to eq("http://user:password@example.com:8080")
+ end
+
+ it "returns 'http://user:password@example.com:8080' for #normalized_site" do
+ expect(@uri.normalized_site).to eq("http://user:password@example.com:8080")
+ end
+
+ it "returns '/path' for #path" do
+ expect(@uri.path).to eq("/path")
+ end
+
+ it "returns '/path' for #normalized_path" do
+ expect(@uri.normalized_path).to eq("/path")
+ end
+
+ it "returns 'query=value' for #query" do
+ expect(@uri.query).to eq("query=value")
+ end
+
+ it "returns 'query=value' for #normalized_query" do
+ expect(@uri.normalized_query).to eq("query=value")
+ end
+
+ it "returns 'fragment' for #fragment" do
+ expect(@uri.fragment).to eq("fragment")
+ end
+
+ it "returns 'fragment' for #normalized_fragment" do
+ expect(@uri.normalized_fragment).to eq("fragment")
+ end
+
+ it "returns #hash" do
+ expect(@uri.hash).not_to be nil
+ end
+
+ it "returns #to_s" do
+ expect(@uri.to_s).to eq(
+ "http://user:password@example.com:8080/path?query=value#fragment"
+ )
+ end
+
+ it "should not be empty" do
+ expect(@uri).not_to be_empty
+ end
+
+ it "should not be frozen" do
+ expect(@uri).not_to be_frozen
+ end
+
+ it "should allow destructive operations" do
+ expect { @uri.normalize! }.not_to raise_error
+ end
+end
+
+describe Addressable::URI, "when initialized from " +
+ "frozen individual components" do
+ before do
+ @uri = Addressable::URI.new(
+ :scheme => "http".freeze,
+ :user => "user".freeze,
+ :password => "password".freeze,
+ :host => "example.com".freeze,
+ :port => "8080".freeze,
+ :path => "/path".freeze,
+ :query => "query=value".freeze,
+ :fragment => "fragment".freeze
+ )
+ end
+
+ it "returns 'http' for #scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "returns 'http' for #normalized_scheme" do
+ expect(@uri.normalized_scheme).to eq("http")
+ end
+
+ it "returns 'user' for #user" do
+ expect(@uri.user).to eq("user")
+ end
+
+ it "returns 'user' for #normalized_user" do
+ expect(@uri.normalized_user).to eq("user")
+ end
+
+ it "returns 'password' for #password" do
+ expect(@uri.password).to eq("password")
+ end
+
+ it "returns 'password' for #normalized_password" do
+ expect(@uri.normalized_password).to eq("password")
+ end
+
+ it "returns 'user:password' for #userinfo" do
+ expect(@uri.userinfo).to eq("user:password")
+ end
+
+ it "returns 'user:password' for #normalized_userinfo" do
+ expect(@uri.normalized_userinfo).to eq("user:password")
+ end
+
+ it "returns 'example.com' for #host" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "returns 'example.com' for #normalized_host" do
+ expect(@uri.normalized_host).to eq("example.com")
+ end
+
+ it "returns 'user:password@example.com:8080' for #authority" do
+ expect(@uri.authority).to eq("user:password@example.com:8080")
+ end
+
+ it "returns 'user:password@example.com:8080' for #normalized_authority" do
+ expect(@uri.normalized_authority).to eq("user:password@example.com:8080")
+ end
+
+ it "returns 8080 for #port" do
+ expect(@uri.port).to eq(8080)
+ end
+
+ it "returns 8080 for #normalized_port" do
+ expect(@uri.normalized_port).to eq(8080)
+ end
+
+ it "returns 80 for #default_port" do
+ expect(@uri.default_port).to eq(80)
+ end
+
+ it "returns 'http://user:password@example.com:8080' for #site" do
+ expect(@uri.site).to eq("http://user:password@example.com:8080")
+ end
+
+ it "returns 'http://user:password@example.com:8080' for #normalized_site" do
+ expect(@uri.normalized_site).to eq("http://user:password@example.com:8080")
+ end
+
+ it "returns '/path' for #path" do
+ expect(@uri.path).to eq("/path")
+ end
+
+ it "returns '/path' for #normalized_path" do
+ expect(@uri.normalized_path).to eq("/path")
+ end
+
+ it "returns 'query=value' for #query" do
+ expect(@uri.query).to eq("query=value")
+ end
+
+ it "returns 'query=value' for #normalized_query" do
+ expect(@uri.normalized_query).to eq("query=value")
+ end
+
+ it "returns 'fragment' for #fragment" do
+ expect(@uri.fragment).to eq("fragment")
+ end
+
+ it "returns 'fragment' for #normalized_fragment" do
+ expect(@uri.normalized_fragment).to eq("fragment")
+ end
+
+ it "returns #hash" do
+ expect(@uri.hash).not_to be nil
+ end
+
+ it "returns #to_s" do
+ expect(@uri.to_s).to eq(
+ "http://user:password@example.com:8080/path?query=value#fragment"
+ )
+ end
+
+ it "should not be empty" do
+ expect(@uri).not_to be_empty
+ end
+
+ it "should not be frozen" do
+ expect(@uri).not_to be_frozen
+ end
+
+ it "should allow destructive operations" do
+ expect { @uri.normalize! }.not_to raise_error
+ end
+end
+
+describe Addressable::URI, "when parsed from a frozen string" do
+ before do
+ @uri = Addressable::URI.parse(
+ "http://user:password@example.com:8080/path?query=value#fragment".freeze
+ )
+ end
+
+ it "returns 'http' for #scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "returns 'http' for #normalized_scheme" do
+ expect(@uri.normalized_scheme).to eq("http")
+ end
+
+ it "returns 'user' for #user" do
+ expect(@uri.user).to eq("user")
+ end
+
+ it "returns 'user' for #normalized_user" do
+ expect(@uri.normalized_user).to eq("user")
+ end
+
+ it "returns 'password' for #password" do
+ expect(@uri.password).to eq("password")
+ end
+
+ it "returns 'password' for #normalized_password" do
+ expect(@uri.normalized_password).to eq("password")
+ end
+
+ it "returns 'user:password' for #userinfo" do
+ expect(@uri.userinfo).to eq("user:password")
+ end
+
+ it "returns 'user:password' for #normalized_userinfo" do
+ expect(@uri.normalized_userinfo).to eq("user:password")
+ end
+
+ it "returns 'example.com' for #host" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "returns 'example.com' for #normalized_host" do
+ expect(@uri.normalized_host).to eq("example.com")
+ end
+
+ it "returns 'user:password@example.com:8080' for #authority" do
+ expect(@uri.authority).to eq("user:password@example.com:8080")
+ end
+
+ it "returns 'user:password@example.com:8080' for #normalized_authority" do
+ expect(@uri.normalized_authority).to eq("user:password@example.com:8080")
+ end
+
+ it "returns 8080 for #port" do
+ expect(@uri.port).to eq(8080)
+ end
+
+ it "returns 8080 for #normalized_port" do
+ expect(@uri.normalized_port).to eq(8080)
+ end
+
+ it "returns 80 for #default_port" do
+ expect(@uri.default_port).to eq(80)
+ end
+
+ it "returns 'http://user:password@example.com:8080' for #site" do
+ expect(@uri.site).to eq("http://user:password@example.com:8080")
+ end
+
+ it "returns 'http://user:password@example.com:8080' for #normalized_site" do
+ expect(@uri.normalized_site).to eq("http://user:password@example.com:8080")
+ end
+
+ it "returns '/path' for #path" do
+ expect(@uri.path).to eq("/path")
+ end
+
+ it "returns '/path' for #normalized_path" do
+ expect(@uri.normalized_path).to eq("/path")
+ end
+
+ it "returns 'query=value' for #query" do
+ expect(@uri.query).to eq("query=value")
+ end
+
+ it "returns 'query=value' for #normalized_query" do
+ expect(@uri.normalized_query).to eq("query=value")
+ end
+
+ it "returns 'fragment' for #fragment" do
+ expect(@uri.fragment).to eq("fragment")
+ end
+
+ it "returns 'fragment' for #normalized_fragment" do
+ expect(@uri.normalized_fragment).to eq("fragment")
+ end
+
+ it "returns #hash" do
+ expect(@uri.hash).not_to be nil
+ end
+
+ it "returns #to_s" do
+ expect(@uri.to_s).to eq(
+ "http://user:password@example.com:8080/path?query=value#fragment"
+ )
+ end
+
+ it "should not be empty" do
+ expect(@uri).not_to be_empty
+ end
+
+ it "should not be frozen" do
+ expect(@uri).not_to be_frozen
+ end
+
+ it "should allow destructive operations" do
+ expect { @uri.normalize! }.not_to raise_error
+ end
+end
+
+describe Addressable::URI, "when frozen" do
+ before do
+ @uri = Addressable::URI.new.freeze
+ end
+
+ it "returns nil for #scheme" do
+ expect(@uri.scheme).to eq(nil)
+ end
+
+ it "returns nil for #normalized_scheme" do
+ expect(@uri.normalized_scheme).to eq(nil)
+ end
+
+ it "returns nil for #user" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "returns nil for #normalized_user" do
+ expect(@uri.normalized_user).to eq(nil)
+ end
+
+ it "returns nil for #password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "returns nil for #normalized_password" do
+ expect(@uri.normalized_password).to eq(nil)
+ end
+
+ it "returns nil for #userinfo" do
+ expect(@uri.userinfo).to eq(nil)
+ end
+
+ it "returns nil for #normalized_userinfo" do
+ expect(@uri.normalized_userinfo).to eq(nil)
+ end
+
+ it "returns nil for #host" do
+ expect(@uri.host).to eq(nil)
+ end
+
+ it "returns nil for #normalized_host" do
+ expect(@uri.normalized_host).to eq(nil)
+ end
+
+ it "returns nil for #authority" do
+ expect(@uri.authority).to eq(nil)
+ end
+
+ it "returns nil for #normalized_authority" do
+ expect(@uri.normalized_authority).to eq(nil)
+ end
+
+ it "returns nil for #port" do
+ expect(@uri.port).to eq(nil)
+ end
+
+ it "returns nil for #normalized_port" do
+ expect(@uri.normalized_port).to eq(nil)
+ end
+
+ it "returns nil for #default_port" do
+ expect(@uri.default_port).to eq(nil)
+ end
+
+ it "returns nil for #site" do
+ expect(@uri.site).to eq(nil)
+ end
+
+ it "returns nil for #normalized_site" do
+ expect(@uri.normalized_site).to eq(nil)
+ end
+
+ it "returns '' for #path" do
+ expect(@uri.path).to eq('')
+ end
+
+ it "returns '' for #normalized_path" do
+ expect(@uri.normalized_path).to eq('')
+ end
+
+ it "returns nil for #query" do
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "returns nil for #normalized_query" do
+ expect(@uri.normalized_query).to eq(nil)
+ end
+
+ it "returns nil for #fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+
+ it "returns nil for #normalized_fragment" do
+ expect(@uri.normalized_fragment).to eq(nil)
+ end
+
+ it "returns #hash" do
+ expect(@uri.hash).not_to be nil
+ end
+
+ it "returns #to_s" do
+ expect(@uri.to_s).to eq('')
+ end
+
+ it "should be empty" do
+ expect(@uri).to be_empty
+ end
+
+ it "should be frozen" do
+ expect(@uri).to be_frozen
+ end
+
+ it "should not be frozen after duping" do
+ expect(@uri.dup).not_to be_frozen
+ end
+
+ it "should not allow destructive operations" do
+ expect { @uri.normalize! }.to raise_error { |error|
+ expect(error.message).to match(/can't modify frozen/)
+ expect(error).to satisfy { |e| RuntimeError === e || TypeError === e }
+ }
+ end
+end
+
+describe Addressable::URI, "when frozen" do
+ before do
+ @uri = Addressable::URI.parse(
+ "HTTP://example.com.:%38%30/%70a%74%68?a=%31#1%323"
+ ).freeze
+ end
+
+ it "returns 'HTTP' for #scheme" do
+ expect(@uri.scheme).to eq("HTTP")
+ end
+
+ it "returns 'http' for #normalized_scheme" do
+ expect(@uri.normalized_scheme).to eq("http")
+ expect(@uri.normalize.scheme).to eq("http")
+ end
+
+ it "returns nil for #user" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "returns nil for #normalized_user" do
+ expect(@uri.normalized_user).to eq(nil)
+ end
+
+ it "returns nil for #password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "returns nil for #normalized_password" do
+ expect(@uri.normalized_password).to eq(nil)
+ end
+
+ it "returns nil for #userinfo" do
+ expect(@uri.userinfo).to eq(nil)
+ end
+
+ it "returns nil for #normalized_userinfo" do
+ expect(@uri.normalized_userinfo).to eq(nil)
+ end
+
+ it "returns 'example.com.' for #host" do
+ expect(@uri.host).to eq("example.com.")
+ end
+
+ it "returns nil for #normalized_host" do
+ expect(@uri.normalized_host).to eq("example.com")
+ expect(@uri.normalize.host).to eq("example.com")
+ end
+
+ it "returns 'example.com.:80' for #authority" do
+ expect(@uri.authority).to eq("example.com.:80")
+ end
+
+ it "returns 'example.com:80' for #normalized_authority" do
+ expect(@uri.normalized_authority).to eq("example.com")
+ expect(@uri.normalize.authority).to eq("example.com")
+ end
+
+ it "returns 80 for #port" do
+ expect(@uri.port).to eq(80)
+ end
+
+ it "returns nil for #normalized_port" do
+ expect(@uri.normalized_port).to eq(nil)
+ expect(@uri.normalize.port).to eq(nil)
+ end
+
+ it "returns 80 for #default_port" do
+ expect(@uri.default_port).to eq(80)
+ end
+
+ it "returns 'HTTP://example.com.:80' for #site" do
+ expect(@uri.site).to eq("HTTP://example.com.:80")
+ end
+
+ it "returns 'http://example.com' for #normalized_site" do
+ expect(@uri.normalized_site).to eq("http://example.com")
+ expect(@uri.normalize.site).to eq("http://example.com")
+ end
+
+ it "returns '/%70a%74%68' for #path" do
+ expect(@uri.path).to eq("/%70a%74%68")
+ end
+
+ it "returns '/path' for #normalized_path" do
+ expect(@uri.normalized_path).to eq("/path")
+ expect(@uri.normalize.path).to eq("/path")
+ end
+
+ it "returns 'a=%31' for #query" do
+ expect(@uri.query).to eq("a=%31")
+ end
+
+ it "returns 'a=1' for #normalized_query" do
+ expect(@uri.normalized_query).to eq("a=1")
+ expect(@uri.normalize.query).to eq("a=1")
+ end
+
+ it "returns '/%70a%74%68?a=%31' for #request_uri" do
+ expect(@uri.request_uri).to eq("/%70a%74%68?a=%31")
+ end
+
+ it "returns '1%323' for #fragment" do
+ expect(@uri.fragment).to eq("1%323")
+ end
+
+ it "returns '123' for #normalized_fragment" do
+ expect(@uri.normalized_fragment).to eq("123")
+ expect(@uri.normalize.fragment).to eq("123")
+ end
+
+ it "returns #hash" do
+ expect(@uri.hash).not_to be nil
+ end
+
+ it "returns #to_s" do
+ expect(@uri.to_s).to eq('HTTP://example.com.:80/%70a%74%68?a=%31#1%323')
+ expect(@uri.normalize.to_s).to eq('http://example.com/path?a=1#123')
+ end
+
+ it "should not be empty" do
+ expect(@uri).not_to be_empty
+ end
+
+ it "should be frozen" do
+ expect(@uri).to be_frozen
+ end
+
+ it "should not be frozen after duping" do
+ expect(@uri.dup).not_to be_frozen
+ end
+
+ it "should not allow destructive operations" do
+ expect { @uri.normalize! }.to raise_error { |error|
+ expect(error.message).to match(/can't modify frozen/)
+ expect(error).to satisfy { |e| RuntimeError === e || TypeError === e }
+ }
+ end
+end
+
+describe Addressable::URI, "when created from string components" do
+ before do
+ @uri = Addressable::URI.new(
+ :scheme => "http", :host => "example.com"
+ )
+ end
+
+ it "should have a site value of 'http://example.com'" do
+ expect(@uri.site).to eq("http://example.com")
+ end
+
+ it "should be equal to the equivalent parsed URI" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com"))
+ end
+
+ it "should raise an error if invalid components omitted" do
+ expect do
+ @uri.omit(:bogus)
+ end.to raise_error(ArgumentError)
+ expect do
+ @uri.omit(:scheme, :bogus, :path)
+ end.to raise_error(ArgumentError)
+ end
+end
+
+describe Addressable::URI, "when created with a nil host but " +
+ "non-nil authority components" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:user => "user", :password => "pass", :port => 80)
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when created with both an authority and a user" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(
+ :user => "user", :authority => "user@example.com:80"
+ )
+ end.to raise_error(ArgumentError)
+ end
+end
+
+describe Addressable::URI, "when created with an authority and no port" do
+ before do
+ @uri = Addressable::URI.new(:authority => "user@example.com")
+ end
+
+ it "should not infer a port" do
+ expect(@uri.port).to eq(nil)
+ expect(@uri.default_port).to eq(nil)
+ expect(@uri.inferred_port).to eq(nil)
+ end
+
+ it "should have a site value of '//user@example.com'" do
+ expect(@uri.site).to eq("//user@example.com")
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when created with a host with trailing dots" do
+ before do
+ @uri = Addressable::URI.new(:authority => "example...")
+ end
+
+ it "should have a stable normalized form" do
+ expect(@uri.normalize.normalize.normalize.host).to eq(
+ @uri.normalize.host
+ )
+ end
+end
+
+describe Addressable::URI, "when created with a host with a backslash" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:authority => "example\\example")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when created with a host with a slash" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:authority => "example/example")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when created with a host with a space" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:authority => "example example")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when created with both a userinfo and a user" do
+ it "should raise an error" do
+ expect do
+ Addressable::URI.new(:user => "user", :userinfo => "user:pass")
+ end.to raise_error(ArgumentError)
+ end
+end
+
+describe Addressable::URI, "when created with a path that hasn't been " +
+ "prefixed with a '/' but a host specified" do
+ before do
+ @uri = Addressable::URI.new(
+ :scheme => "http", :host => "example.com", :path => "path"
+ )
+ end
+
+ it "should prefix a '/' to the path" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com/path"))
+ end
+
+ it "should have a site value of 'http://example.com'" do
+ expect(@uri.site).to eq("http://example.com")
+ end
+
+ it "should have an origin of 'http://example.com" do
+ expect(@uri.origin).to eq('http://example.com')
+ end
+end
+
+describe Addressable::URI, "when created with a path that hasn't been " +
+ "prefixed with a '/' but no host specified" do
+ before do
+ @uri = Addressable::URI.new(
+ :scheme => "http", :path => "path"
+ )
+ end
+
+ it "should not prefix a '/' to the path" do
+ expect(@uri).to eq(Addressable::URI.parse("http:path"))
+ end
+
+ it "should have a site value of 'http:'" do
+ expect(@uri.site).to eq("http:")
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when parsed from an Addressable::URI object" do
+ it "should not have unexpected side-effects" do
+ original_uri = Addressable::URI.parse("http://example.com/")
+ new_uri = Addressable::URI.parse(original_uri)
+ new_uri.host = 'www.example.com'
+ expect(new_uri.host).to eq('www.example.com')
+ expect(new_uri.to_s).to eq('http://www.example.com/')
+ expect(original_uri.host).to eq('example.com')
+ expect(original_uri.to_s).to eq('http://example.com/')
+ end
+
+ it "should not have unexpected side-effects" do
+ original_uri = Addressable::URI.parse("http://example.com/")
+ new_uri = Addressable::URI.heuristic_parse(original_uri)
+ new_uri.host = 'www.example.com'
+ expect(new_uri.host).to eq('www.example.com')
+ expect(new_uri.to_s).to eq('http://www.example.com/')
+ expect(original_uri.host).to eq('example.com')
+ expect(original_uri.to_s).to eq('http://example.com/')
+ end
+
+ it "should not have unexpected side-effects" do
+ original_uri = Addressable::URI.parse("http://example.com/")
+ new_uri = Addressable::URI.parse(original_uri)
+ new_uri.origin = 'https://www.example.com:8080'
+ expect(new_uri.host).to eq('www.example.com')
+ expect(new_uri.to_s).to eq('https://www.example.com:8080/')
+ expect(original_uri.host).to eq('example.com')
+ expect(original_uri.to_s).to eq('http://example.com/')
+ end
+
+ it "should not have unexpected side-effects" do
+ original_uri = Addressable::URI.parse("http://example.com/")
+ new_uri = Addressable::URI.heuristic_parse(original_uri)
+ new_uri.origin = 'https://www.example.com:8080'
+ expect(new_uri.host).to eq('www.example.com')
+ expect(new_uri.to_s).to eq('https://www.example.com:8080/')
+ expect(original_uri.host).to eq('example.com')
+ expect(original_uri.to_s).to eq('http://example.com/')
+ end
+end
+
+describe Addressable::URI, "when parsed from something that looks " +
+ "like a URI object" do
+ it "should parse without error" do
+ uri = Addressable::URI.parse(Fake::URI::HTTP.new("http://example.com/"))
+ expect do
+ Addressable::URI.parse(uri)
+ end.not_to raise_error
+ end
+end
+
+describe Addressable::URI, "when parsed from a standard library URI object" do
+ it "should parse without error" do
+ uri = Addressable::URI.parse(URI.parse("http://example.com/"))
+ expect do
+ Addressable::URI.parse(uri)
+ end.not_to raise_error
+ end
+end
+
+describe Addressable::URI, "when parsed from ''" do
+ before do
+ @uri = Addressable::URI.parse("")
+ end
+
+ it "should have no scheme" do
+ expect(@uri.scheme).to eq(nil)
+ end
+
+ it "should not be considered to be ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should have a path of ''" do
+ expect(@uri.path).to eq("")
+ end
+
+ it "should have a request URI of '/'" do
+ expect(@uri.request_uri).to eq("/")
+ end
+
+ it "should be considered relative" do
+ expect(@uri).to be_relative
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+# Section 1.1.2 of RFC 3986
+describe Addressable::URI, "when parsed from " +
+ "'ftp://ftp.is.co.za/rfc/rfc1808.txt'" do
+ before do
+ @uri = Addressable::URI.parse("ftp://ftp.is.co.za/rfc/rfc1808.txt")
+ end
+
+ it "should use the 'ftp' scheme" do
+ expect(@uri.scheme).to eq("ftp")
+ end
+
+ it "should be considered to be ip-based" do
+ expect(@uri).to be_ip_based
+ end
+
+ it "should have a host of 'ftp.is.co.za'" do
+ expect(@uri.host).to eq("ftp.is.co.za")
+ end
+
+ it "should have inferred_port of 21" do
+ expect(@uri.inferred_port).to eq(21)
+ end
+
+ it "should have a path of '/rfc/rfc1808.txt'" do
+ expect(@uri.path).to eq("/rfc/rfc1808.txt")
+ end
+
+ it "should not have a request URI" do
+ expect(@uri.request_uri).to eq(nil)
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have an origin of 'ftp://ftp.is.co.za'" do
+ expect(@uri.origin).to eq('ftp://ftp.is.co.za')
+ end
+end
+
+# Section 1.1.2 of RFC 3986
+describe Addressable::URI, "when parsed from " +
+ "'http://www.ietf.org/rfc/rfc2396.txt'" do
+ before do
+ @uri = Addressable::URI.parse("http://www.ietf.org/rfc/rfc2396.txt")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should be considered to be ip-based" do
+ expect(@uri).to be_ip_based
+ end
+
+ it "should have a host of 'www.ietf.org'" do
+ expect(@uri.host).to eq("www.ietf.org")
+ end
+
+ it "should have inferred_port of 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have a path of '/rfc/rfc2396.txt'" do
+ expect(@uri.path).to eq("/rfc/rfc2396.txt")
+ end
+
+ it "should have a request URI of '/rfc/rfc2396.txt'" do
+ expect(@uri.request_uri).to eq("/rfc/rfc2396.txt")
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should correctly omit components" do
+ expect(@uri.omit(:scheme).to_s).to eq("//www.ietf.org/rfc/rfc2396.txt")
+ expect(@uri.omit(:path).to_s).to eq("http://www.ietf.org")
+ end
+
+ it "should correctly omit components destructively" do
+ @uri.omit!(:scheme)
+ expect(@uri.to_s).to eq("//www.ietf.org/rfc/rfc2396.txt")
+ end
+
+ it "should have an origin of 'http://www.ietf.org'" do
+ expect(@uri.origin).to eq('http://www.ietf.org')
+ end
+end
+
+# Section 1.1.2 of RFC 3986
+describe Addressable::URI, "when parsed from " +
+ "'ldap://[2001:db8::7]/c=GB?objectClass?one'" do
+ before do
+ @uri = Addressable::URI.parse("ldap://[2001:db8::7]/c=GB?objectClass?one")
+ end
+
+ it "should use the 'ldap' scheme" do
+ expect(@uri.scheme).to eq("ldap")
+ end
+
+ it "should be considered to be ip-based" do
+ expect(@uri).to be_ip_based
+ end
+
+ it "should have a host of '[2001:db8::7]'" do
+ expect(@uri.host).to eq("[2001:db8::7]")
+ end
+
+ it "should have inferred_port of 389" do
+ expect(@uri.inferred_port).to eq(389)
+ end
+
+ it "should have a path of '/c=GB'" do
+ expect(@uri.path).to eq("/c=GB")
+ end
+
+ it "should not have a request URI" do
+ expect(@uri.request_uri).to eq(nil)
+ end
+
+ it "should not allow request URI assignment" do
+ expect do
+ @uri.request_uri = "/"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should have a query of 'objectClass?one'" do
+ expect(@uri.query).to eq("objectClass?one")
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should correctly omit components" do
+ expect(@uri.omit(:scheme, :authority).to_s).to eq("/c=GB?objectClass?one")
+ expect(@uri.omit(:path).to_s).to eq("ldap://[2001:db8::7]?objectClass?one")
+ end
+
+ it "should correctly omit components destructively" do
+ @uri.omit!(:scheme, :authority)
+ expect(@uri.to_s).to eq("/c=GB?objectClass?one")
+ end
+
+ it "should raise an error if omission would create an invalid URI" do
+ expect do
+ @uri.omit(:authority, :path)
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should have an origin of 'ldap://[2001:db8::7]'" do
+ expect(@uri.origin).to eq('ldap://[2001:db8::7]')
+ end
+end
+
+# Section 1.1.2 of RFC 3986
+describe Addressable::URI, "when parsed from " +
+ "'mailto:John.Doe@example.com'" do
+ before do
+ @uri = Addressable::URI.parse("mailto:John.Doe@example.com")
+ end
+
+ it "should use the 'mailto' scheme" do
+ expect(@uri.scheme).to eq("mailto")
+ end
+
+ it "should not be considered to be ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should not have an inferred_port" do
+ expect(@uri.inferred_port).to eq(nil)
+ end
+
+ it "should have a path of 'John.Doe@example.com'" do
+ expect(@uri.path).to eq("John.Doe@example.com")
+ end
+
+ it "should not have a request URI" do
+ expect(@uri.request_uri).to eq(nil)
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+# Section 2 of RFC 6068
+describe Addressable::URI, "when parsed from " +
+ "'mailto:?to=addr1@an.example,addr2@an.example'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "mailto:?to=addr1@an.example,addr2@an.example"
+ )
+ end
+
+ it "should use the 'mailto' scheme" do
+ expect(@uri.scheme).to eq("mailto")
+ end
+
+ it "should not be considered to be ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should not have an inferred_port" do
+ expect(@uri.inferred_port).to eq(nil)
+ end
+
+ it "should have a path of ''" do
+ expect(@uri.path).to eq("")
+ end
+
+ it "should not have a request URI" do
+ expect(@uri.request_uri).to eq(nil)
+ end
+
+ it "should have the To: field value parameterized" do
+ expect(@uri.query_values(Hash)["to"]).to eq(
+ "addr1@an.example,addr2@an.example"
+ )
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+# Section 1.1.2 of RFC 3986
+describe Addressable::URI, "when parsed from " +
+ "'news:comp.infosystems.www.servers.unix'" do
+ before do
+ @uri = Addressable::URI.parse("news:comp.infosystems.www.servers.unix")
+ end
+
+ it "should use the 'news' scheme" do
+ expect(@uri.scheme).to eq("news")
+ end
+
+ it "should not have an inferred_port" do
+ expect(@uri.inferred_port).to eq(nil)
+ end
+
+ it "should not be considered to be ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should have a path of 'comp.infosystems.www.servers.unix'" do
+ expect(@uri.path).to eq("comp.infosystems.www.servers.unix")
+ end
+
+ it "should not have a request URI" do
+ expect(@uri.request_uri).to eq(nil)
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+# Section 1.1.2 of RFC 3986
+describe Addressable::URI, "when parsed from " +
+ "'tel:+1-816-555-1212'" do
+ before do
+ @uri = Addressable::URI.parse("tel:+1-816-555-1212")
+ end
+
+ it "should use the 'tel' scheme" do
+ expect(@uri.scheme).to eq("tel")
+ end
+
+ it "should not be considered to be ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should not have an inferred_port" do
+ expect(@uri.inferred_port).to eq(nil)
+ end
+
+ it "should have a path of '+1-816-555-1212'" do
+ expect(@uri.path).to eq("+1-816-555-1212")
+ end
+
+ it "should not have a request URI" do
+ expect(@uri.request_uri).to eq(nil)
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+# Section 1.1.2 of RFC 3986
+describe Addressable::URI, "when parsed from " +
+ "'telnet://192.0.2.16:80/'" do
+ before do
+ @uri = Addressable::URI.parse("telnet://192.0.2.16:80/")
+ end
+
+ it "should use the 'telnet' scheme" do
+ expect(@uri.scheme).to eq("telnet")
+ end
+
+ it "should have a host of '192.0.2.16'" do
+ expect(@uri.host).to eq("192.0.2.16")
+ end
+
+ it "should have a port of 80" do
+ expect(@uri.port).to eq(80)
+ end
+
+ it "should have a inferred_port of 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have a default_port of 23" do
+ expect(@uri.default_port).to eq(23)
+ end
+
+ it "should be considered to be ip-based" do
+ expect(@uri).to be_ip_based
+ end
+
+ it "should have a path of '/'" do
+ expect(@uri.path).to eq("/")
+ end
+
+ it "should not have a request URI" do
+ expect(@uri.request_uri).to eq(nil)
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have an origin of 'telnet://192.0.2.16:80'" do
+ expect(@uri.origin).to eq('telnet://192.0.2.16:80')
+ end
+end
+
+# Section 1.1.2 of RFC 3986
+describe Addressable::URI, "when parsed from " +
+ "'urn:oasis:names:specification:docbook:dtd:xml:4.1.2'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "urn:oasis:names:specification:docbook:dtd:xml:4.1.2")
+ end
+
+ it "should use the 'urn' scheme" do
+ expect(@uri.scheme).to eq("urn")
+ end
+
+ it "should not have an inferred_port" do
+ expect(@uri.inferred_port).to eq(nil)
+ end
+
+ it "should not be considered to be ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should have a path of " +
+ "'oasis:names:specification:docbook:dtd:xml:4.1.2'" do
+ expect(@uri.path).to eq("oasis:names:specification:docbook:dtd:xml:4.1.2")
+ end
+
+ it "should not have a request URI" do
+ expect(@uri.request_uri).to eq(nil)
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when heuristically parsed from " +
+ "'192.0.2.16:8000/path'" do
+ before do
+ @uri = Addressable::URI.heuristic_parse("192.0.2.16:8000/path")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have a host of '192.0.2.16'" do
+ expect(@uri.host).to eq("192.0.2.16")
+ end
+
+ it "should have a port of '8000'" do
+ expect(@uri.port).to eq(8000)
+ end
+
+ it "should be considered to be ip-based" do
+ expect(@uri).to be_ip_based
+ end
+
+ it "should have a path of '/path'" do
+ expect(@uri.path).to eq("/path")
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have an origin of 'http://192.0.2.16:8000'" do
+ expect(@uri.origin).to eq('http://192.0.2.16:8000')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com")
+ end
+
+ it "when inspected, should have the correct URI" do
+ expect(@uri.inspect).to include("http://example.com")
+ end
+
+ it "when inspected, should have the correct class name" do
+ expect(@uri.inspect).to include("Addressable::URI")
+ end
+
+ it "when inspected, should have the correct object id" do
+ expect(@uri.inspect).to include("%#0x" % @uri.object_id)
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should be considered to be ip-based" do
+ expect(@uri).to be_ip_based
+ end
+
+ it "should have an authority segment of 'example.com'" do
+ expect(@uri.authority).to eq("example.com")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should be considered ip-based" do
+ expect(@uri).to be_ip_based
+ end
+
+ it "should have no username" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should not have a specified port" do
+ expect(@uri.port).to eq(nil)
+ end
+
+ it "should have an empty path" do
+ expect(@uri.path).to eq("")
+ end
+
+ it "should have no query string" do
+ expect(@uri.query).to eq(nil)
+ expect(@uri.query_values).to eq(nil)
+ end
+
+ it "should have a request URI of '/'" do
+ expect(@uri.request_uri).to eq("/")
+ end
+
+ it "should have no fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+
+ it "should be considered absolute" do
+ expect(@uri).to be_absolute
+ end
+
+ it "should not be considered relative" do
+ expect(@uri).not_to be_relative
+ end
+
+ it "should not be exactly equal to 42" do
+ expect(@uri.eql?(42)).to eq(false)
+ end
+
+ it "should not be equal to 42" do
+ expect(@uri == 42).to eq(false)
+ end
+
+ it "should not be roughly equal to 42" do
+ expect(@uri === 42).to eq(false)
+ end
+
+ it "should be exactly equal to http://example.com" do
+ expect(@uri.eql?(Addressable::URI.parse("http://example.com"))).to eq(true)
+ end
+
+ it "should be roughly equal to http://example.com/" do
+ expect(@uri === Addressable::URI.parse("http://example.com/")).to eq(true)
+ end
+
+ it "should be roughly equal to the string 'http://example.com/'" do
+ expect(@uri === "http://example.com/").to eq(true)
+ end
+
+ it "should not be roughly equal to the string " +
+ "'http://example.com:bogus/'" do
+ expect do
+ expect(@uri === "http://example.com:bogus/").to eq(false)
+ end.not_to raise_error
+ end
+
+ it "should result in itself when joined with itself" do
+ expect(@uri.join(@uri).to_s).to eq("http://example.com")
+ expect(@uri.join!(@uri).to_s).to eq("http://example.com")
+ end
+
+ it "should be equivalent to http://EXAMPLE.com" do
+ expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.com"))
+ end
+
+ it "should be equivalent to http://EXAMPLE.com:80/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.com:80/"))
+ end
+
+ it "should have the same hash as http://example.com" do
+ expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com").hash)
+ end
+
+ it "should have the same hash as http://EXAMPLE.com after assignment" do
+ @uri.origin = "http://EXAMPLE.com"
+ expect(@uri.hash).to eq(Addressable::URI.parse("http://EXAMPLE.com").hash)
+ end
+
+ it "should have a different hash from http://EXAMPLE.com" do
+ expect(@uri.hash).not_to eq(Addressable::URI.parse("http://EXAMPLE.com").hash)
+ end
+
+ it "should not allow origin assignment without scheme" do
+ expect do
+ @uri.origin = "example.com"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should not allow origin assignment without host" do
+ expect do
+ @uri.origin = "http://"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should not allow origin assignment with bogus type" do
+ expect do
+ @uri.origin = :bogus
+ end.to raise_error(TypeError)
+ end
+
+ # Section 6.2.3 of RFC 3986
+ it "should be equivalent to http://example.com/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com/"))
+ end
+
+ # Section 6.2.3 of RFC 3986
+ it "should be equivalent to http://example.com:/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com:/"))
+ end
+
+ # Section 6.2.3 of RFC 3986
+ it "should be equivalent to http://example.com:80/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com:80/"))
+ end
+
+ # Section 6.2.2.1 of RFC 3986
+ it "should be equivalent to http://EXAMPLE.COM/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.COM/"))
+ end
+
+ it "should have a route of '/path/' to 'http://example.com/path/'" do
+ expect(@uri.route_to("http://example.com/path/")).to eq(
+ Addressable::URI.parse("/path/")
+ )
+ end
+
+ it "should have a route of '..' from 'http://example.com/path/'" do
+ expect(@uri.route_from("http://example.com/path/")).to eq(
+ Addressable::URI.parse("..")
+ )
+ end
+
+ it "should have a route of '#' to 'http://example.com/'" do
+ expect(@uri.route_to("http://example.com/")).to eq(
+ Addressable::URI.parse("#")
+ )
+ end
+
+ it "should have a route of 'http://elsewhere.com/' to " +
+ "'http://elsewhere.com/'" do
+ expect(@uri.route_to("http://elsewhere.com/")).to eq(
+ Addressable::URI.parse("http://elsewhere.com/")
+ )
+ end
+
+ it "when joined with 'relative/path' should be " +
+ "'http://example.com/relative/path'" do
+ expect(@uri.join('relative/path')).to eq(
+ Addressable::URI.parse("http://example.com/relative/path")
+ )
+ end
+
+ it "when joined with a bogus object a TypeError should be raised" do
+ expect do
+ @uri.join(42)
+ end.to raise_error(TypeError)
+ end
+
+ it "should have the correct username after assignment" do
+ @uri.user = "newuser"
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq(nil)
+ expect(@uri.to_s).to eq("http://newuser@example.com")
+ end
+
+ it "should have the correct username after assignment" do
+ @uri.user = "user@123!"
+ expect(@uri.user).to eq("user@123!")
+ expect(@uri.normalized_user).to eq("user%40123%21")
+ expect(@uri.password).to eq(nil)
+ expect(@uri.normalize.to_s).to eq("http://user%40123%21@example.com/")
+ end
+
+ it "should have the correct password after assignment" do
+ @uri.password = "newpass"
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.user).to eq("")
+ expect(@uri.to_s).to eq("http://:newpass@example.com")
+ end
+
+ it "should have the correct password after assignment" do
+ @uri.password = "#secret@123!"
+ expect(@uri.password).to eq("#secret@123!")
+ expect(@uri.normalized_password).to eq("%23secret%40123%21")
+ expect(@uri.user).to eq("")
+ expect(@uri.normalize.to_s).to eq("http://:%23secret%40123%21@example.com/")
+ expect(@uri.omit(:password).to_s).to eq("http://example.com")
+ end
+
+ it "should have the correct user/pass after repeated assignment" do
+ @uri.user = nil
+ expect(@uri.user).to eq(nil)
+ @uri.password = "newpass"
+ expect(@uri.password).to eq("newpass")
+ # Username cannot be nil if the password is set
+ expect(@uri.user).to eq("")
+ expect(@uri.to_s).to eq("http://:newpass@example.com")
+ @uri.user = "newuser"
+ expect(@uri.user).to eq("newuser")
+ @uri.password = nil
+ expect(@uri.password).to eq(nil)
+ expect(@uri.to_s).to eq("http://newuser@example.com")
+ @uri.user = "newuser"
+ expect(@uri.user).to eq("newuser")
+ @uri.password = ""
+ expect(@uri.password).to eq("")
+ expect(@uri.to_s).to eq("http://newuser:@example.com")
+ @uri.password = "newpass"
+ expect(@uri.password).to eq("newpass")
+ @uri.user = nil
+ # Username cannot be nil if the password is set
+ expect(@uri.user).to eq("")
+ expect(@uri.to_s).to eq("http://:newpass@example.com")
+ end
+
+ it "should have the correct user/pass after userinfo assignment" do
+ @uri.user = "newuser"
+ expect(@uri.user).to eq("newuser")
+ @uri.password = "newpass"
+ expect(@uri.password).to eq("newpass")
+ @uri.userinfo = nil
+ expect(@uri.userinfo).to eq(nil)
+ expect(@uri.user).to eq(nil)
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should correctly convert to a hash" do
+ expect(@uri.to_hash).to eq({
+ :scheme => "http",
+ :user => nil,
+ :password => nil,
+ :host => "example.com",
+ :port => nil,
+ :path => "",
+ :query => nil,
+ :fragment => nil
+ })
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+
+ it "should have an origin of 'http://example.com'" do
+ expect(@uri.origin).to eq('http://example.com')
+ end
+end
+
+# Section 5.1.2 of RFC 2616
+describe Addressable::URI, "when parsed from " +
+ "'HTTP://www.w3.org/pub/WWW/TheProject.html'" do
+ before do
+ @uri = Addressable::URI.parse("HTTP://www.w3.org/pub/WWW/TheProject.html")
+ end
+
+ it "should have the correct request URI" do
+ expect(@uri.request_uri).to eq("/pub/WWW/TheProject.html")
+ end
+
+ it "should have the correct request URI after assignment" do
+ @uri.request_uri = "/pub/WWW/TheProject.html?"
+ expect(@uri.request_uri).to eq("/pub/WWW/TheProject.html?")
+ expect(@uri.path).to eq("/pub/WWW/TheProject.html")
+ expect(@uri.query).to eq("")
+ end
+
+ it "should have the correct request URI after assignment" do
+ @uri.request_uri = "/some/where/else.html"
+ expect(@uri.request_uri).to eq("/some/where/else.html")
+ expect(@uri.path).to eq("/some/where/else.html")
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should have the correct request URI after assignment" do
+ @uri.request_uri = "/some/where/else.html?query?string"
+ expect(@uri.request_uri).to eq("/some/where/else.html?query?string")
+ expect(@uri.path).to eq("/some/where/else.html")
+ expect(@uri.query).to eq("query?string")
+ end
+
+ it "should have the correct request URI after assignment" do
+ @uri.request_uri = "?x=y"
+ expect(@uri.request_uri).to eq("/?x=y")
+ expect(@uri.path).to eq("/")
+ expect(@uri.query).to eq("x=y")
+ end
+
+ it "should raise an error if the site value is set to something bogus" do
+ expect do
+ @uri.site = 42
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise an error if the request URI is set to something bogus" do
+ expect do
+ @uri.request_uri = 42
+ end.to raise_error(TypeError)
+ end
+
+ it "should correctly convert to a hash" do
+ expect(@uri.to_hash).to eq({
+ :scheme => "HTTP",
+ :user => nil,
+ :password => nil,
+ :host => "www.w3.org",
+ :port => nil,
+ :path => "/pub/WWW/TheProject.html",
+ :query => nil,
+ :fragment => nil
+ })
+ end
+
+ it "should have an origin of 'http://www.w3.org'" do
+ expect(@uri.origin).to eq('http://www.w3.org')
+ end
+end
+
+describe Addressable::URI, "when parsing IPv6 addresses" do
+ it "should not raise an error for " +
+ "'http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/'" do
+ Addressable::URI.parse("http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/")
+ end
+
+ it "should not raise an error for " +
+ "'http://[fe80:0:0:0:200:f8ff:fe21:67cf]/'" do
+ Addressable::URI.parse("http://[fe80:0:0:0:200:f8ff:fe21:67cf]/")
+ end
+
+ it "should not raise an error for " +
+ "'http://[fe80::200:f8ff:fe21:67cf]/'" do
+ Addressable::URI.parse("http://[fe80::200:f8ff:fe21:67cf]/")
+ end
+
+ it "should not raise an error for " +
+ "'http://[::1]/'" do
+ Addressable::URI.parse("http://[::1]/")
+ end
+
+ it "should not raise an error for " +
+ "'http://[fe80::1]/'" do
+ Addressable::URI.parse("http://[fe80::1]/")
+ end
+
+ it "should raise an error for " +
+ "'http://[]/'" do
+ expect do
+ Addressable::URI.parse("http://[]/")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when parsing IPv6 address" do
+ subject { Addressable::URI.parse("http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/") }
+ its(:host) { should == '[3ffe:1900:4545:3:200:f8ff:fe21:67cf]' }
+ its(:hostname) { should == '3ffe:1900:4545:3:200:f8ff:fe21:67cf' }
+end
+
+describe Addressable::URI, "when assigning IPv6 address" do
+ it "should allow to set bare IPv6 address as hostname" do
+ uri = Addressable::URI.parse("http://[::1]/")
+ uri.hostname = '3ffe:1900:4545:3:200:f8ff:fe21:67cf'
+ expect(uri.to_s).to eq('http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/')
+ end
+
+ it "should allow to set bare IPv6 address as hostname with IPAddr object" do
+ uri = Addressable::URI.parse("http://[::1]/")
+ uri.hostname = IPAddr.new('3ffe:1900:4545:3:200:f8ff:fe21:67cf')
+ expect(uri.to_s).to eq('http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/')
+ end
+
+ it "should not allow to set bare IPv6 address as host" do
+ uri = Addressable::URI.parse("http://[::1]/")
+ skip "not checked"
+ expect do
+ uri.host = '3ffe:1900:4545:3:200:f8ff:fe21:67cf'
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when parsing IPvFuture addresses" do
+ it "should not raise an error for " +
+ "'http://[v9.3ffe:1900:4545:3:200:f8ff:fe21:67cf]/'" do
+ Addressable::URI.parse("http://[v9.3ffe:1900:4545:3:200:f8ff:fe21:67cf]/")
+ end
+
+ it "should not raise an error for " +
+ "'http://[vff.fe80:0:0:0:200:f8ff:fe21:67cf]/'" do
+ Addressable::URI.parse("http://[vff.fe80:0:0:0:200:f8ff:fe21:67cf]/")
+ end
+
+ it "should not raise an error for " +
+ "'http://[v12.fe80::200:f8ff:fe21:67cf]/'" do
+ Addressable::URI.parse("http://[v12.fe80::200:f8ff:fe21:67cf]/")
+ end
+
+ it "should not raise an error for " +
+ "'http://[va0.::1]/'" do
+ Addressable::URI.parse("http://[va0.::1]/")
+ end
+
+ it "should not raise an error for " +
+ "'http://[v255.fe80::1]/'" do
+ Addressable::URI.parse("http://[v255.fe80::1]/")
+ end
+
+ it "should raise an error for " +
+ "'http://[v0.]/'" do
+ expect do
+ Addressable::URI.parse("http://[v0.]/")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/")
+ end
+
+ # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence
+ it "should be equivalent to http://example.com" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com"))
+ end
+
+ # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence
+ it "should be equivalent to HTTP://example.com/" do
+ expect(@uri).to eq(Addressable::URI.parse("HTTP://example.com/"))
+ end
+
+ # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence
+ it "should be equivalent to http://example.com:/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com:/"))
+ end
+
+ # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence
+ it "should be equivalent to http://example.com:80/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com:80/"))
+ end
+
+ # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence
+ it "should be equivalent to http://Example.com/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://Example.com/"))
+ end
+
+ it "should have the correct username after assignment" do
+ @uri.user = nil
+ expect(@uri.user).to eq(nil)
+ expect(@uri.password).to eq(nil)
+ expect(@uri.to_s).to eq("http://example.com/")
+ end
+
+ it "should have the correct password after assignment" do
+ @uri.password = nil
+ expect(@uri.password).to eq(nil)
+ expect(@uri.user).to eq(nil)
+ expect(@uri.to_s).to eq("http://example.com/")
+ end
+
+ it "should have a request URI of '/'" do
+ expect(@uri.request_uri).to eq("/")
+ end
+
+ it "should correctly convert to a hash" do
+ expect(@uri.to_hash).to eq({
+ :scheme => "http",
+ :user => nil,
+ :password => nil,
+ :host => "example.com",
+ :port => nil,
+ :path => "/",
+ :query => nil,
+ :fragment => nil
+ })
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+
+ it "should have the same hash as its duplicate" do
+ expect(@uri.hash).to eq(@uri.dup.hash)
+ end
+
+ it "should have a different hash from its equivalent String value" do
+ expect(@uri.hash).not_to eq(@uri.to_s.hash)
+ end
+
+ it "should have the same hash as an equal URI" do
+ expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com/").hash)
+ end
+
+ it "should be equivalent to http://EXAMPLE.com" do
+ expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.com"))
+ end
+
+ it "should be equivalent to http://EXAMPLE.com:80/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.com:80/"))
+ end
+
+ it "should have the same hash as http://example.com/" do
+ expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com/").hash)
+ end
+
+ it "should have the same hash as http://example.com after assignment" do
+ @uri.path = ""
+ expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com").hash)
+ end
+
+ it "should have the same hash as http://example.com/? after assignment" do
+ @uri.query = ""
+ expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com/?").hash)
+ end
+
+ it "should have the same hash as http://example.com/? after assignment" do
+ @uri.query_values = {}
+ expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com/?").hash)
+ end
+
+ it "should have the same hash as http://example.com/# after assignment" do
+ @uri.fragment = ""
+ expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com/#").hash)
+ end
+
+ it "should have a different hash from http://example.com" do
+ expect(@uri.hash).not_to eq(Addressable::URI.parse("http://example.com").hash)
+ end
+
+ it "should have an origin of 'http://example.com'" do
+ expect(@uri.origin).to eq('http://example.com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com?#'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com?#")
+ end
+
+ it "should correctly convert to a hash" do
+ expect(@uri.to_hash).to eq({
+ :scheme => "http",
+ :user => nil,
+ :password => nil,
+ :host => "example.com",
+ :port => nil,
+ :path => "",
+ :query => "",
+ :fragment => ""
+ })
+ end
+
+ it "should have a request URI of '/?'" do
+ expect(@uri.request_uri).to eq("/?")
+ end
+
+ it "should normalize to 'http://example.com/'" do
+ expect(@uri.normalize.to_s).to eq("http://example.com/")
+ end
+
+ it "should have an origin of 'http://example.com'" do
+ expect(@uri.origin).to eq("http://example.com")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://@example.com/'" do
+ before do
+ @uri = Addressable::URI.parse("http://@example.com/")
+ end
+
+ it "should be equivalent to http://example.com" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com"))
+ end
+
+ it "should correctly convert to a hash" do
+ expect(@uri.to_hash).to eq({
+ :scheme => "http",
+ :user => "",
+ :password => nil,
+ :host => "example.com",
+ :port => nil,
+ :path => "/",
+ :query => nil,
+ :fragment => nil
+ })
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+
+ it "should have an origin of 'http://example.com'" do
+ expect(@uri.origin).to eq('http://example.com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com./'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com./")
+ end
+
+ it "should be equivalent to http://example.com" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com"))
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+
+ it "should have an origin of 'http://example.com'" do
+ expect(@uri.origin).to eq('http://example.com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://:@example.com/'" do
+ before do
+ @uri = Addressable::URI.parse("http://:@example.com/")
+ end
+
+ it "should be equivalent to http://example.com" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com"))
+ end
+
+ it "should correctly convert to a hash" do
+ expect(@uri.to_hash).to eq({
+ :scheme => "http",
+ :user => "",
+ :password => "",
+ :host => "example.com",
+ :port => nil,
+ :path => "/",
+ :query => nil,
+ :fragment => nil
+ })
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+
+ it "should have an origin of 'http://example.com'" do
+ expect(@uri.origin).to eq('http://example.com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'HTTP://EXAMPLE.COM/'" do
+ before do
+ @uri = Addressable::URI.parse("HTTP://EXAMPLE.COM/")
+ end
+
+ it "should be equivalent to http://example.com" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com"))
+ end
+
+ it "should correctly convert to a hash" do
+ expect(@uri.to_hash).to eq({
+ :scheme => "HTTP",
+ :user => nil,
+ :password => nil,
+ :host => "EXAMPLE.COM",
+ :port => nil,
+ :path => "/",
+ :query => nil,
+ :fragment => nil
+ })
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+
+ it "should have an origin of 'http://example.com'" do
+ expect(@uri.origin).to eq('http://example.com')
+ end
+
+ it "should have a tld of 'com'" do
+ expect(@uri.tld).to eq('com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://www.example.co.uk/'" do
+ before do
+ @uri = Addressable::URI.parse("http://www.example.co.uk/")
+ end
+
+ it "should have an origin of 'http://www.example.co.uk'" do
+ expect(@uri.origin).to eq('http://www.example.co.uk')
+ end
+
+ it "should have a tld of 'co.uk'" do
+ expect(@uri.tld).to eq('co.uk')
+ end
+
+ it "should have a domain of 'example.co.uk'" do
+ expect(@uri.domain).to eq('example.co.uk')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://sub_domain.blogspot.com/'" do
+ before do
+ @uri = Addressable::URI.parse("http://sub_domain.blogspot.com/")
+ end
+
+ it "should have an origin of 'http://sub_domain.blogspot.com'" do
+ expect(@uri.origin).to eq('http://sub_domain.blogspot.com')
+ end
+
+ it "should have a tld of 'com'" do
+ expect(@uri.tld).to eq('com')
+ end
+
+ it "should have a domain of 'blogspot.com'" do
+ expect(@uri.domain).to eq('blogspot.com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/~smith/'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/~smith/")
+ end
+
+ # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence
+ it "should be equivalent to http://example.com/%7Esmith/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com/%7Esmith/"))
+ end
+
+ # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence
+ it "should be equivalent to http://example.com/%7esmith/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com/%7esmith/"))
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/%E8'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/%E8")
+ end
+
+ it "should not raise an exception when normalized" do
+ expect do
+ @uri.normalize
+ end.not_to raise_error
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should not change if encoded with the normalizing algorithm" do
+ expect(Addressable::URI.normalized_encode(@uri).to_s).to eq(
+ "http://example.com/%E8"
+ )
+ expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be ===
+ "http://example.com/%E8"
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/path%2Fsegment/'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/path%2Fsegment/")
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should be equal to 'http://example.com/path%2Fsegment/'" do
+ expect(@uri.normalize).to be_eql(
+ Addressable::URI.parse("http://example.com/path%2Fsegment/")
+ )
+ end
+
+ it "should not be equal to 'http://example.com/path/segment/'" do
+ expect(@uri).not_to eq(
+ Addressable::URI.parse("http://example.com/path/segment/")
+ )
+ end
+
+ it "should not be equal to 'http://example.com/path/segment/'" do
+ expect(@uri.normalize).not_to be_eql(
+ Addressable::URI.parse("http://example.com/path/segment/")
+ )
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?%F6'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?%F6")
+ end
+
+ it "should not raise an exception when normalized" do
+ expect do
+ @uri.normalize
+ end.not_to raise_error
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should not change if encoded with the normalizing algorithm" do
+ expect(Addressable::URI.normalized_encode(@uri).to_s).to eq(
+ "http://example.com/?%F6"
+ )
+ expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be ===
+ "http://example.com/?%F6"
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/#%F6'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/#%F6")
+ end
+
+ it "should not raise an exception when normalized" do
+ expect do
+ @uri.normalize
+ end.not_to raise_error
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should not change if encoded with the normalizing algorithm" do
+ expect(Addressable::URI.normalized_encode(@uri).to_s).to eq(
+ "http://example.com/#%F6"
+ )
+ expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be ===
+ "http://example.com/#%F6"
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/%C3%87'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/%C3%87")
+ end
+
+ # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence
+ it "should be equivalent to 'http://example.com/C%CC%A7'" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com/C%CC%A7"))
+ end
+
+ it "should not change if encoded with the normalizing algorithm" do
+ expect(Addressable::URI.normalized_encode(@uri).to_s).to eq(
+ "http://example.com/%C3%87"
+ )
+ expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be ===
+ "http://example.com/%C3%87"
+ end
+
+ it "should raise an error if encoding with an unexpected return type" do
+ expect do
+ Addressable::URI.normalized_encode(@uri, Integer)
+ end.to raise_error(TypeError)
+ end
+
+ it "if percent encoded should be 'http://example.com/C%25CC%25A7'" do
+ expect(Addressable::URI.encode(@uri).to_s).to eq(
+ "http://example.com/%25C3%2587"
+ )
+ end
+
+ it "if percent encoded should be 'http://example.com/C%25CC%25A7'" do
+ expect(Addressable::URI.encode(@uri, Addressable::URI)).to eq(
+ Addressable::URI.parse("http://example.com/%25C3%2587")
+ )
+ end
+
+ it "should raise an error if encoding with an unexpected return type" do
+ expect do
+ Addressable::URI.encode(@uri, Integer)
+ end.to raise_error(TypeError)
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?q=string'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?q=string")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have an authority segment of 'example.com'" do
+ expect(@uri.authority).to eq("example.com")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should have no username" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have a path of '/'" do
+ expect(@uri.path).to eq("/")
+ end
+
+ it "should have a query string of 'q=string'" do
+ expect(@uri.query).to eq("q=string")
+ end
+
+ it "should have no fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+
+ it "should be considered absolute" do
+ expect(@uri).to be_absolute
+ end
+
+ it "should not be considered relative" do
+ expect(@uri).not_to be_relative
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com:80/'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com:80/")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have an authority segment of 'example.com:80'" do
+ expect(@uri.authority).to eq("example.com:80")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should have no username" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have explicit port 80" do
+ expect(@uri.port).to eq(80)
+ end
+
+ it "should have a path of '/'" do
+ expect(@uri.path).to eq("/")
+ end
+
+ it "should have no query string" do
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should have no fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+
+ it "should be considered absolute" do
+ expect(@uri).to be_absolute
+ end
+
+ it "should not be considered relative" do
+ expect(@uri).not_to be_relative
+ end
+
+ it "should be exactly equal to http://example.com:80/" do
+ expect(@uri.eql?(Addressable::URI.parse("http://example.com:80/"))).to eq(true)
+ end
+
+ it "should be roughly equal to http://example.com/" do
+ expect(@uri === Addressable::URI.parse("http://example.com/")).to eq(true)
+ end
+
+ it "should be roughly equal to the string 'http://example.com/'" do
+ expect(@uri === "http://example.com/").to eq(true)
+ end
+
+ it "should not be roughly equal to the string " +
+ "'http://example.com:bogus/'" do
+ expect do
+ expect(@uri === "http://example.com:bogus/").to eq(false)
+ end.not_to raise_error
+ end
+
+ it "should result in itself when joined with itself" do
+ expect(@uri.join(@uri).to_s).to eq("http://example.com:80/")
+ expect(@uri.join!(@uri).to_s).to eq("http://example.com:80/")
+ end
+
+ # Section 6.2.3 of RFC 3986
+ it "should be equal to http://example.com/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com/"))
+ end
+
+ # Section 6.2.3 of RFC 3986
+ it "should be equal to http://example.com:/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com:/"))
+ end
+
+ # Section 6.2.3 of RFC 3986
+ it "should be equal to http://example.com:80/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://example.com:80/"))
+ end
+
+ # Section 6.2.2.1 of RFC 3986
+ it "should be equal to http://EXAMPLE.COM/" do
+ expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.COM/"))
+ end
+
+ it "should correctly convert to a hash" do
+ expect(@uri.to_hash).to eq({
+ :scheme => "http",
+ :user => nil,
+ :password => nil,
+ :host => "example.com",
+ :port => 80,
+ :path => "/",
+ :query => nil,
+ :fragment => nil
+ })
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+
+ it "should have an origin of 'http://example.com'" do
+ expect(@uri.origin).to eq('http://example.com')
+ end
+
+ it "should not change if encoded with the normalizing algorithm" do
+ expect(Addressable::URI.normalized_encode(@uri).to_s).to eq(
+ "http://example.com:80/"
+ )
+ expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be ===
+ "http://example.com:80/"
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com:8080/'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com:8080/")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have an authority segment of 'example.com:8080'" do
+ expect(@uri.authority).to eq("example.com:8080")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should have no username" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should use port 8080" do
+ expect(@uri.inferred_port).to eq(8080)
+ end
+
+ it "should have explicit port 8080" do
+ expect(@uri.port).to eq(8080)
+ end
+
+ it "should have default port 80" do
+ expect(@uri.default_port).to eq(80)
+ end
+
+ it "should have a path of '/'" do
+ expect(@uri.path).to eq("/")
+ end
+
+ it "should have no query string" do
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should have no fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+
+ it "should be considered absolute" do
+ expect(@uri).to be_absolute
+ end
+
+ it "should not be considered relative" do
+ expect(@uri).not_to be_relative
+ end
+
+ it "should be exactly equal to http://example.com:8080/" do
+ expect(@uri.eql?(Addressable::URI.parse(
+ "http://example.com:8080/"))).to eq(true)
+ end
+
+ it "should have a route of 'http://example.com:8080/' from " +
+ "'http://example.com/path/to/'" do
+ expect(@uri.route_from("http://example.com/path/to/")).to eq(
+ Addressable::URI.parse("http://example.com:8080/")
+ )
+ end
+
+ it "should have a route of 'http://example.com:8080/' from " +
+ "'http://example.com:80/path/to/'" do
+ expect(@uri.route_from("http://example.com:80/path/to/")).to eq(
+ Addressable::URI.parse("http://example.com:8080/")
+ )
+ end
+
+ it "should have a route of '../../' from " +
+ "'http://example.com:8080/path/to/'" do
+ expect(@uri.route_from("http://example.com:8080/path/to/")).to eq(
+ Addressable::URI.parse("../../")
+ )
+ end
+
+ it "should have a route of 'http://example.com:8080/' from " +
+ "'http://user:pass@example.com/path/to/'" do
+ expect(@uri.route_from("http://user:pass@example.com/path/to/")).to eq(
+ Addressable::URI.parse("http://example.com:8080/")
+ )
+ end
+
+ it "should correctly convert to a hash" do
+ expect(@uri.to_hash).to eq({
+ :scheme => "http",
+ :user => nil,
+ :password => nil,
+ :host => "example.com",
+ :port => 8080,
+ :path => "/",
+ :query => nil,
+ :fragment => nil
+ })
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+
+ it "should have an origin of 'http://example.com:8080'" do
+ expect(@uri.origin).to eq('http://example.com:8080')
+ end
+
+ it "should not change if encoded with the normalizing algorithm" do
+ expect(Addressable::URI.normalized_encode(@uri).to_s).to eq(
+ "http://example.com:8080/"
+ )
+ expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be ===
+ "http://example.com:8080/"
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com:%38%30/'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com:%38%30/")
+ end
+
+ it "should have the correct port" do
+ expect(@uri.port).to eq(80)
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ it "should normalize to 'http://example.com/'" do
+ expect(@uri.normalize.to_s).to eq("http://example.com/")
+ end
+
+ it "should have an origin of 'http://example.com'" do
+ expect(@uri.origin).to eq('http://example.com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/%2E/'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/%2E/")
+ end
+
+ it "should be considered to be in normal form" do
+ skip(
+ 'path segment normalization should happen before ' +
+ 'percent escaping normalization'
+ )
+ @uri.normalize.should be_eql(@uri)
+ end
+
+ it "should normalize to 'http://example.com/%2E/'" do
+ skip(
+ 'path segment normalization should happen before ' +
+ 'percent escaping normalization'
+ )
+ expect(@uri.normalize).to eq("http://example.com/%2E/")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/..'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/..")
+ end
+
+ it "should have the correct port" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ it "should normalize to 'http://example.com/'" do
+ expect(@uri.normalize.to_s).to eq("http://example.com/")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/../..'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/../..")
+ end
+
+ it "should have the correct port" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ it "should normalize to 'http://example.com/'" do
+ expect(@uri.normalize.to_s).to eq("http://example.com/")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/path(/..'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/path(/..")
+ end
+
+ it "should have the correct port" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ it "should normalize to 'http://example.com/'" do
+ expect(@uri.normalize.to_s).to eq("http://example.com/")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/(path)/..'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/(path)/..")
+ end
+
+ it "should have the correct port" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ it "should normalize to 'http://example.com/'" do
+ expect(@uri.normalize.to_s).to eq("http://example.com/")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/path(/../'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/path(/../")
+ end
+
+ it "should have the correct port" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ it "should normalize to 'http://example.com/'" do
+ expect(@uri.normalize.to_s).to eq("http://example.com/")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/(path)/../'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/(path)/../")
+ end
+
+ it "should have the correct port" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ it "should normalize to 'http://example.com/'" do
+ expect(@uri.normalize.to_s).to eq("http://example.com/")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'/..//example.com'" do
+ before do
+ @uri = Addressable::URI.parse("/..//example.com")
+ end
+
+ it "should become invalid when normalized" do
+ expect do
+ @uri.normalize
+ end.to raise_error(Addressable::URI::InvalidURIError, /authority/)
+ end
+
+ it "should have a path of '/..//example.com'" do
+ expect(@uri.path).to eq("/..//example.com")
+ end
+end
+
+describe Addressable::URI, "when parsed from '/a/b/c/./../../g'" do
+ before do
+ @uri = Addressable::URI.parse("/a/b/c/./../../g")
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ # Section 5.2.4 of RFC 3986
+ it "should normalize to '/a/g'" do
+ expect(@uri.normalize.to_s).to eq("/a/g")
+ end
+end
+
+describe Addressable::URI, "when parsed from 'mid/content=5/../6'" do
+ before do
+ @uri = Addressable::URI.parse("mid/content=5/../6")
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ # Section 5.2.4 of RFC 3986
+ it "should normalize to 'mid/6'" do
+ expect(@uri.normalize.to_s).to eq("mid/6")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://www.example.com///../'" do
+ before do
+ @uri = Addressable::URI.parse('http://www.example.com///../')
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+
+ it "should normalize to 'http://www.example.com//'" do
+ expect(@uri.normalize.to_s).to eq("http://www.example.com//")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/path/to/resource/'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/path/to/resource/")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have an authority segment of 'example.com'" do
+ expect(@uri.authority).to eq("example.com")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should have no username" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have a path of '/path/to/resource/'" do
+ expect(@uri.path).to eq("/path/to/resource/")
+ end
+
+ it "should have no query string" do
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should have no fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+
+ it "should be considered absolute" do
+ expect(@uri).to be_absolute
+ end
+
+ it "should not be considered relative" do
+ expect(@uri).not_to be_relative
+ end
+
+ it "should be exactly equal to http://example.com:8080/" do
+ expect(@uri.eql?(Addressable::URI.parse(
+ "http://example.com/path/to/resource/"))).to eq(true)
+ end
+
+ it "should have a route of 'resource/' from " +
+ "'http://example.com/path/to/'" do
+ expect(@uri.route_from("http://example.com/path/to/")).to eq(
+ Addressable::URI.parse("resource/")
+ )
+ end
+
+ it "should have a route of '../' from " +
+ "'http://example.com/path/to/resource/sub'" do
+ expect(@uri.route_from("http://example.com/path/to/resource/sub")).to eq(
+ Addressable::URI.parse("../")
+ )
+ end
+
+
+ it "should have a route of 'resource/' from " +
+ "'http://example.com/path/to/another'" do
+ expect(@uri.route_from("http://example.com/path/to/another")).to eq(
+ Addressable::URI.parse("resource/")
+ )
+ end
+
+ it "should have a route of 'resource/' from " +
+ "'http://example.com/path/to/res'" do
+ expect(@uri.route_from("http://example.com/path/to/res")).to eq(
+ Addressable::URI.parse("resource/")
+ )
+ end
+
+ it "should have a route of 'resource/' from " +
+ "'http://example.com:80/path/to/'" do
+ expect(@uri.route_from("http://example.com:80/path/to/")).to eq(
+ Addressable::URI.parse("resource/")
+ )
+ end
+
+ it "should have a route of 'http://example.com/path/to/' from " +
+ "'http://example.com:8080/path/to/'" do
+ expect(@uri.route_from("http://example.com:8080/path/to/")).to eq(
+ Addressable::URI.parse("http://example.com/path/to/resource/")
+ )
+ end
+
+ it "should have a route of 'http://example.com/path/to/' from " +
+ "'http://user:pass@example.com/path/to/'" do
+ expect(@uri.route_from("http://user:pass@example.com/path/to/")).to eq(
+ Addressable::URI.parse("http://example.com/path/to/resource/")
+ )
+ end
+
+ it "should have a route of '../../path/to/resource/' from " +
+ "'http://example.com/to/resource/'" do
+ expect(@uri.route_from("http://example.com/to/resource/")).to eq(
+ Addressable::URI.parse("../../path/to/resource/")
+ )
+ end
+
+ it "should correctly convert to a hash" do
+ expect(@uri.to_hash).to eq({
+ :scheme => "http",
+ :user => nil,
+ :password => nil,
+ :host => "example.com",
+ :port => nil,
+ :path => "/path/to/resource/",
+ :query => nil,
+ :fragment => nil
+ })
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'relative/path/to/resource'" do
+ before do
+ @uri = Addressable::URI.parse("relative/path/to/resource")
+ end
+
+ it "should not have a scheme" do
+ expect(@uri.scheme).to eq(nil)
+ end
+
+ it "should not be considered ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should not have an authority segment" do
+ expect(@uri.authority).to eq(nil)
+ end
+
+ it "should not have a host" do
+ expect(@uri.host).to eq(nil)
+ end
+
+ it "should have no username" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should not have a port" do
+ expect(@uri.port).to eq(nil)
+ end
+
+ it "should have a path of 'relative/path/to/resource'" do
+ expect(@uri.path).to eq("relative/path/to/resource")
+ end
+
+ it "should have no query string" do
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should have no fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+
+ it "should not be considered absolute" do
+ expect(@uri).not_to be_absolute
+ end
+
+ it "should be considered relative" do
+ expect(@uri).to be_relative
+ end
+
+ it "should raise an error if routing is attempted" do
+ expect do
+ @uri.route_to("http://example.com/")
+ end.to raise_error(ArgumentError, /relative\/path\/to\/resource/)
+ expect do
+ @uri.route_from("http://example.com/")
+ end.to raise_error(ArgumentError, /relative\/path\/to\/resource/)
+ end
+
+ it "when joined with 'another/relative/path' should be " +
+ "'relative/path/to/another/relative/path'" do
+ expect(@uri.join('another/relative/path')).to eq(
+ Addressable::URI.parse("relative/path/to/another/relative/path")
+ )
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'relative_path_with_no_slashes'" do
+ before do
+ @uri = Addressable::URI.parse("relative_path_with_no_slashes")
+ end
+
+ it "should not have a scheme" do
+ expect(@uri.scheme).to eq(nil)
+ end
+
+ it "should not be considered ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should not have an authority segment" do
+ expect(@uri.authority).to eq(nil)
+ end
+
+ it "should not have a host" do
+ expect(@uri.host).to eq(nil)
+ end
+
+ it "should have no username" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should not have a port" do
+ expect(@uri.port).to eq(nil)
+ end
+
+ it "should have a path of 'relative_path_with_no_slashes'" do
+ expect(@uri.path).to eq("relative_path_with_no_slashes")
+ end
+
+ it "should have no query string" do
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should have no fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+
+ it "should not be considered absolute" do
+ expect(@uri).not_to be_absolute
+ end
+
+ it "should be considered relative" do
+ expect(@uri).to be_relative
+ end
+
+ it "when joined with 'another_relative_path' should be " +
+ "'another_relative_path'" do
+ expect(@uri.join('another_relative_path')).to eq(
+ Addressable::URI.parse("another_relative_path")
+ )
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/file.txt'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/file.txt")
+ end
+
+ it "should have a scheme of 'http'" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have an authority segment of 'example.com'" do
+ expect(@uri.authority).to eq("example.com")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should have no username" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have a path of '/file.txt'" do
+ expect(@uri.path).to eq("/file.txt")
+ end
+
+ it "should have a basename of 'file.txt'" do
+ expect(@uri.basename).to eq("file.txt")
+ end
+
+ it "should have an extname of '.txt'" do
+ expect(@uri.extname).to eq(".txt")
+ end
+
+ it "should have no query string" do
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should have no fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/file.txt;parameter'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/file.txt;parameter")
+ end
+
+ it "should have a scheme of 'http'" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have an authority segment of 'example.com'" do
+ expect(@uri.authority).to eq("example.com")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should have no username" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have a path of '/file.txt;parameter'" do
+ expect(@uri.path).to eq("/file.txt;parameter")
+ end
+
+ it "should have a basename of 'file.txt'" do
+ expect(@uri.basename).to eq("file.txt")
+ end
+
+ it "should have an extname of '.txt'" do
+ expect(@uri.extname).to eq(".txt")
+ end
+
+ it "should have no query string" do
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should have no fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/file.txt;x=y'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/file.txt;x=y")
+ end
+
+ it "should have a scheme of 'http'" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have a scheme of 'http'" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have an authority segment of 'example.com'" do
+ expect(@uri.authority).to eq("example.com")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should have no username" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have a path of '/file.txt;x=y'" do
+ expect(@uri.path).to eq("/file.txt;x=y")
+ end
+
+ it "should have an extname of '.txt'" do
+ expect(@uri.extname).to eq(".txt")
+ end
+
+ it "should have no query string" do
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should have no fragment" do
+ expect(@uri.fragment).to eq(nil)
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'svn+ssh://developername@rubyforge.org/var/svn/project'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "svn+ssh://developername@rubyforge.org/var/svn/project"
+ )
+ end
+
+ it "should have a scheme of 'svn+ssh'" do
+ expect(@uri.scheme).to eq("svn+ssh")
+ end
+
+ it "should be considered to be ip-based" do
+ expect(@uri).to be_ip_based
+ end
+
+ it "should have a path of '/var/svn/project'" do
+ expect(@uri.path).to eq("/var/svn/project")
+ end
+
+ it "should have a username of 'developername'" do
+ expect(@uri.user).to eq("developername")
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'ssh+svn://developername@RUBYFORGE.ORG/var/svn/project'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "ssh+svn://developername@RUBYFORGE.ORG/var/svn/project"
+ )
+ end
+
+ it "should have a scheme of 'ssh+svn'" do
+ expect(@uri.scheme).to eq("ssh+svn")
+ end
+
+ it "should have a normalized scheme of 'svn+ssh'" do
+ expect(@uri.normalized_scheme).to eq("svn+ssh")
+ end
+
+ it "should have a normalized site of 'svn+ssh'" do
+ expect(@uri.normalized_site).to eq("svn+ssh://developername@rubyforge.org")
+ end
+
+ it "should not be considered to be ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should have a path of '/var/svn/project'" do
+ expect(@uri.path).to eq("/var/svn/project")
+ end
+
+ it "should have a username of 'developername'" do
+ expect(@uri.user).to eq("developername")
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should not be considered to be in normal form" do
+ expect(@uri.normalize).not_to be_eql(@uri)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'mailto:user@example.com'" do
+ before do
+ @uri = Addressable::URI.parse("mailto:user@example.com")
+ end
+
+ it "should have a scheme of 'mailto'" do
+ expect(@uri.scheme).to eq("mailto")
+ end
+
+ it "should not be considered to be ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should have a path of 'user@example.com'" do
+ expect(@uri.path).to eq("user@example.com")
+ end
+
+ it "should have no user" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'tag:example.com,2006-08-18:/path/to/something'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "tag:example.com,2006-08-18:/path/to/something")
+ end
+
+ it "should have a scheme of 'tag'" do
+ expect(@uri.scheme).to eq("tag")
+ end
+
+ it "should be considered to be ip-based" do
+ expect(@uri).not_to be_ip_based
+ end
+
+ it "should have a path of " +
+ "'example.com,2006-08-18:/path/to/something'" do
+ expect(@uri.path).to eq("example.com,2006-08-18:/path/to/something")
+ end
+
+ it "should have no user" do
+ expect(@uri.user).to eq(nil)
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/x;y/'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/x;y/")
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?x=1&y=2'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?x=1&y=2")
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'view-source:http://example.com/'" do
+ before do
+ @uri = Addressable::URI.parse("view-source:http://example.com/")
+ end
+
+ it "should have a scheme of 'view-source'" do
+ expect(@uri.scheme).to eq("view-source")
+ end
+
+ it "should have a path of 'http://example.com/'" do
+ expect(@uri.path).to eq("http://example.com/")
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://user:pass@example.com/path/to/resource?query=x#fragment'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "http://user:pass@example.com/path/to/resource?query=x#fragment")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have an authority segment of 'user:pass@example.com'" do
+ expect(@uri.authority).to eq("user:pass@example.com")
+ end
+
+ it "should have a username of 'user'" do
+ expect(@uri.user).to eq("user")
+ end
+
+ it "should have a password of 'pass'" do
+ expect(@uri.password).to eq("pass")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have a path of '/path/to/resource'" do
+ expect(@uri.path).to eq("/path/to/resource")
+ end
+
+ it "should have a query string of 'query=x'" do
+ expect(@uri.query).to eq("query=x")
+ end
+
+ it "should have a fragment of 'fragment'" do
+ expect(@uri.fragment).to eq("fragment")
+ end
+
+ it "should be considered to be in normal form" do
+ expect(@uri.normalize).to be_eql(@uri)
+ end
+
+ it "should have a route of '../../' to " +
+ "'http://user:pass@example.com/path/'" do
+ expect(@uri.route_to("http://user:pass@example.com/path/")).to eq(
+ Addressable::URI.parse("../../")
+ )
+ end
+
+ it "should have a route of 'to/resource?query=x#fragment' " +
+ "from 'http://user:pass@example.com/path/'" do
+ expect(@uri.route_from("http://user:pass@example.com/path/")).to eq(
+ Addressable::URI.parse("to/resource?query=x#fragment")
+ )
+ end
+
+ it "should have a route of '?query=x#fragment' " +
+ "from 'http://user:pass@example.com/path/to/resource'" do
+ expect(@uri.route_from("http://user:pass@example.com/path/to/resource")).to eq(
+ Addressable::URI.parse("?query=x#fragment")
+ )
+ end
+
+ it "should have a route of '#fragment' " +
+ "from 'http://user:pass@example.com/path/to/resource?query=x'" do
+ expect(@uri.route_from(
+ "http://user:pass@example.com/path/to/resource?query=x")).to eq(
+ Addressable::URI.parse("#fragment")
+ )
+ end
+
+ it "should have a route of '#fragment' from " +
+ "'http://user:pass@example.com/path/to/resource?query=x#fragment'" do
+ expect(@uri.route_from(
+ "http://user:pass@example.com/path/to/resource?query=x#fragment"
+ )).to eq(Addressable::URI.parse("#fragment"))
+ end
+
+ it "should have a route of 'http://elsewhere.com/' to " +
+ "'http://elsewhere.com/'" do
+ expect(@uri.route_to("http://elsewhere.com/")).to eq(
+ Addressable::URI.parse("http://elsewhere.com/")
+ )
+ end
+
+ it "should have a route of " +
+ "'http://user:pass@example.com/path/to/resource?query=x#fragment' " +
+ "from 'http://example.com/path/to/'" do
+ expect(@uri.route_from("http://elsewhere.com/path/to/")).to eq(
+ Addressable::URI.parse(
+ "http://user:pass@example.com/path/to/resource?query=x#fragment")
+ )
+ end
+
+ it "should have the correct scheme after assignment" do
+ @uri.scheme = "ftp"
+ expect(@uri.scheme).to eq("ftp")
+ expect(@uri.to_s).to eq(
+ "ftp://user:pass@example.com/path/to/resource?query=x#fragment"
+ )
+ expect(@uri.to_str).to eq(
+ "ftp://user:pass@example.com/path/to/resource?query=x#fragment"
+ )
+ end
+
+ it "should have the correct site segment after assignment" do
+ @uri.site = "https://newuser:newpass@example.com:443"
+ expect(@uri.scheme).to eq("https")
+ expect(@uri.authority).to eq("newuser:newpass@example.com:443")
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.userinfo).to eq("newuser:newpass")
+ expect(@uri.normalized_userinfo).to eq("newuser:newpass")
+ expect(@uri.host).to eq("example.com")
+ expect(@uri.port).to eq(443)
+ expect(@uri.inferred_port).to eq(443)
+ expect(@uri.to_s).to eq(
+ "https://newuser:newpass@example.com:443" +
+ "/path/to/resource?query=x#fragment"
+ )
+ end
+
+ it "should have the correct authority segment after assignment" do
+ @uri.authority = "newuser:newpass@example.com:80"
+ expect(@uri.authority).to eq("newuser:newpass@example.com:80")
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.userinfo).to eq("newuser:newpass")
+ expect(@uri.normalized_userinfo).to eq("newuser:newpass")
+ expect(@uri.host).to eq("example.com")
+ expect(@uri.port).to eq(80)
+ expect(@uri.inferred_port).to eq(80)
+ expect(@uri.to_s).to eq(
+ "http://newuser:newpass@example.com:80" +
+ "/path/to/resource?query=x#fragment"
+ )
+ end
+
+ it "should have the correct userinfo segment after assignment" do
+ @uri.userinfo = "newuser:newpass"
+ expect(@uri.userinfo).to eq("newuser:newpass")
+ expect(@uri.authority).to eq("newuser:newpass@example.com")
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.host).to eq("example.com")
+ expect(@uri.port).to eq(nil)
+ expect(@uri.inferred_port).to eq(80)
+ expect(@uri.to_s).to eq(
+ "http://newuser:newpass@example.com" +
+ "/path/to/resource?query=x#fragment"
+ )
+ end
+
+ it "should have the correct username after assignment" do
+ @uri.user = "newuser"
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.authority).to eq("newuser:pass@example.com")
+ end
+
+ it "should have the correct password after assignment" do
+ @uri.password = "newpass"
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.authority).to eq("user:newpass@example.com")
+ end
+
+ it "should have the correct host after assignment" do
+ @uri.host = "newexample.com"
+ expect(@uri.host).to eq("newexample.com")
+ expect(@uri.authority).to eq("user:pass@newexample.com")
+ end
+
+ it "should have the correct host after assignment" do
+ @uri.hostname = "newexample.com"
+ expect(@uri.host).to eq("newexample.com")
+ expect(@uri.hostname).to eq("newexample.com")
+ expect(@uri.authority).to eq("user:pass@newexample.com")
+ end
+
+ it "should raise an error if assigning a bogus object to the hostname" do
+ expect do
+ @uri.hostname = Object.new
+ end.to raise_error(TypeError)
+ end
+
+ it "should have the correct port after assignment" do
+ @uri.port = 8080
+ expect(@uri.port).to eq(8080)
+ expect(@uri.authority).to eq("user:pass@example.com:8080")
+ end
+
+ it "should have the correct origin after assignment" do
+ @uri.origin = "http://newexample.com"
+ expect(@uri.host).to eq("newexample.com")
+ expect(@uri.authority).to eq("newexample.com")
+ end
+
+ it "should have the correct path after assignment" do
+ @uri.path = "/newpath/to/resource"
+ expect(@uri.path).to eq("/newpath/to/resource")
+ expect(@uri.to_s).to eq(
+ "http://user:pass@example.com/newpath/to/resource?query=x#fragment"
+ )
+ end
+
+ it "should have the correct scheme and authority after nil assignment" do
+ @uri.site = nil
+ expect(@uri.scheme).to eq(nil)
+ expect(@uri.authority).to eq(nil)
+ expect(@uri.to_s).to eq("/path/to/resource?query=x#fragment")
+ end
+
+ it "should have the correct scheme and authority after assignment" do
+ @uri.site = "file://"
+ expect(@uri.scheme).to eq("file")
+ expect(@uri.authority).to eq("")
+ expect(@uri.to_s).to eq("file:///path/to/resource?query=x#fragment")
+ end
+
+ it "should have the correct path after nil assignment" do
+ @uri.path = nil
+ expect(@uri.path).to eq("")
+ expect(@uri.to_s).to eq(
+ "http://user:pass@example.com?query=x#fragment"
+ )
+ end
+
+ it "should have the correct query string after assignment" do
+ @uri.query = "newquery=x"
+ expect(@uri.query).to eq("newquery=x")
+ expect(@uri.to_s).to eq(
+ "http://user:pass@example.com/path/to/resource?newquery=x#fragment"
+ )
+ @uri.query = nil
+ expect(@uri.query).to eq(nil)
+ expect(@uri.to_s).to eq(
+ "http://user:pass@example.com/path/to/resource#fragment"
+ )
+ end
+
+ it "should have the correct query string after hash assignment" do
+ @uri.query_values = {"?uestion mark" => "=sign", "hello" => "g\xC3\xBCnther"}
+ expect(@uri.query.split("&")).to include("%3Fuestion%20mark=%3Dsign")
+ expect(@uri.query.split("&")).to include("hello=g%C3%BCnther")
+ expect(@uri.query_values).to eq({
+ "?uestion mark" => "=sign", "hello" => "g\xC3\xBCnther"
+ })
+ end
+
+ it "should have the correct query string after flag hash assignment" do
+ @uri.query_values = {'flag?1' => nil, 'fl=ag2' => nil, 'flag3' => nil}
+ expect(@uri.query.split("&")).to include("flag%3F1")
+ expect(@uri.query.split("&")).to include("fl%3Dag2")
+ expect(@uri.query.split("&")).to include("flag3")
+ expect(@uri.query_values(Array).sort).to eq([["fl=ag2"], ["flag3"], ["flag?1"]])
+ expect(@uri.query_values(Hash)).to eq({
+ 'flag?1' => nil, 'fl=ag2' => nil, 'flag3' => nil
+ })
+ end
+
+ it "should raise an error if query values are set to a bogus type" do
+ expect do
+ @uri.query_values = "bogus"
+ end.to raise_error(TypeError)
+ end
+
+ it "should have the correct fragment after assignment" do
+ @uri.fragment = "newfragment"
+ expect(@uri.fragment).to eq("newfragment")
+ expect(@uri.to_s).to eq(
+ "http://user:pass@example.com/path/to/resource?query=x#newfragment"
+ )
+
+ @uri.fragment = nil
+ expect(@uri.fragment).to eq(nil)
+ expect(@uri.to_s).to eq(
+ "http://user:pass@example.com/path/to/resource?query=x"
+ )
+ end
+
+ it "should have the correct values after a merge" do
+ expect(@uri.merge(:fragment => "newfragment").to_s).to eq(
+ "http://user:pass@example.com/path/to/resource?query=x#newfragment"
+ )
+ end
+
+ it "should have the correct values after a merge" do
+ expect(@uri.merge(:fragment => nil).to_s).to eq(
+ "http://user:pass@example.com/path/to/resource?query=x"
+ )
+ end
+
+ it "should have the correct values after a merge" do
+ expect(@uri.merge(:userinfo => "newuser:newpass").to_s).to eq(
+ "http://newuser:newpass@example.com/path/to/resource?query=x#fragment"
+ )
+ end
+
+ it "should have the correct values after a merge" do
+ expect(@uri.merge(:userinfo => nil).to_s).to eq(
+ "http://example.com/path/to/resource?query=x#fragment"
+ )
+ end
+
+ it "should have the correct values after a merge" do
+ expect(@uri.merge(:path => "newpath").to_s).to eq(
+ "http://user:pass@example.com/newpath?query=x#fragment"
+ )
+ end
+
+ it "should have the correct values after a merge" do
+ expect(@uri.merge(:port => "42", :path => "newpath", :query => "").to_s).to eq(
+ "http://user:pass@example.com:42/newpath?#fragment"
+ )
+ end
+
+ it "should have the correct values after a merge" do
+ expect(@uri.merge(:authority => "foo:bar@baz:42").to_s).to eq(
+ "http://foo:bar@baz:42/path/to/resource?query=x#fragment"
+ )
+ # Ensure the operation was not destructive
+ expect(@uri.to_s).to eq(
+ "http://user:pass@example.com/path/to/resource?query=x#fragment"
+ )
+ end
+
+ it "should have the correct values after a destructive merge" do
+ @uri.merge!(:authority => "foo:bar@baz:42")
+ # Ensure the operation was destructive
+ expect(@uri.to_s).to eq(
+ "http://foo:bar@baz:42/path/to/resource?query=x#fragment"
+ )
+ end
+
+ it "should fail to merge with bogus values" do
+ expect do
+ @uri.merge(:port => "bogus")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should fail to merge with bogus values" do
+ expect do
+ @uri.merge(:authority => "bar@baz:bogus")
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should fail to merge with bogus parameters" do
+ expect do
+ @uri.merge(42)
+ end.to raise_error(TypeError)
+ end
+
+ it "should fail to merge with bogus parameters" do
+ expect do
+ @uri.merge("http://example.com/")
+ end.to raise_error(TypeError)
+ end
+
+ it "should fail to merge with both authority and subcomponents" do
+ expect do
+ @uri.merge(:authority => "foo:bar@baz:42", :port => "42")
+ end.to raise_error(ArgumentError)
+ end
+
+ it "should fail to merge with both userinfo and subcomponents" do
+ expect do
+ @uri.merge(:userinfo => "foo:bar", :user => "foo")
+ end.to raise_error(ArgumentError)
+ end
+
+ it "should be identical to its duplicate" do
+ expect(@uri).to eq(@uri.dup)
+ end
+
+ it "should have an origin of 'http://example.com'" do
+ expect(@uri.origin).to eq('http://example.com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/search?q=Q%26A'" do
+
+ before do
+ @uri = Addressable::URI.parse("http://example.com/search?q=Q%26A")
+ end
+
+ it "should have a query of 'q=Q%26A'" do
+ expect(@uri.query).to eq("q=Q%26A")
+ end
+
+ it "should have query_values of {'q' => 'Q&A'}" do
+ expect(@uri.query_values).to eq({ 'q' => 'Q&A' })
+ end
+
+ it "should normalize to the original uri " +
+ "(with the ampersand properly percent-encoded)" do
+ expect(@uri.normalize.to_s).to eq("http://example.com/search?q=Q%26A")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?&x=b'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?&x=b")
+ end
+
+ it "should have a query of '&x=b'" do
+ expect(@uri.query).to eq("&x=b")
+ end
+
+ it "should have query_values of {'x' => 'b'}" do
+ expect(@uri.query_values).to eq({'x' => 'b'})
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?q='one;two'&x=1'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?q='one;two'&x=1")
+ end
+
+ it "should have a query of 'q='one;two'&x=1'" do
+ expect(@uri.query).to eq("q='one;two'&x=1")
+ end
+
+ it "should have query_values of {\"q\" => \"'one;two'\", \"x\" => \"1\"}" do
+ expect(@uri.query_values).to eq({"q" => "'one;two'", "x" => "1"})
+ end
+
+ it "should escape the ';' character when normalizing to avoid ambiguity " +
+ "with the W3C HTML 4.01 specification" do
+ # HTML 4.01 Section B.2.2
+ expect(@uri.normalize.query).to eq("q='one%3Btwo'&x=1")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?&&x=b'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?&&x=b")
+ end
+
+ it "should have a query of '&&x=b'" do
+ expect(@uri.query).to eq("&&x=b")
+ end
+
+ it "should have query_values of {'x' => 'b'}" do
+ expect(@uri.query_values).to eq({'x' => 'b'})
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?q=a&&x=b'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?q=a&&x=b")
+ end
+
+ it "should have a query of 'q=a&&x=b'" do
+ expect(@uri.query).to eq("q=a&&x=b")
+ end
+
+ it "should have query_values of {'q' => 'a, 'x' => 'b'}" do
+ expect(@uri.query_values).to eq({'q' => 'a', 'x' => 'b'})
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?q&&x=b'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?q&&x=b")
+ end
+
+ it "should have a query of 'q&&x=b'" do
+ expect(@uri.query).to eq("q&&x=b")
+ end
+
+ it "should have query_values of {'q' => true, 'x' => 'b'}" do
+ expect(@uri.query_values).to eq({'q' => nil, 'x' => 'b'})
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?q=a+b'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?q=a+b")
+ end
+
+ it "should have a query of 'q=a+b'" do
+ expect(@uri.query).to eq("q=a+b")
+ end
+
+ it "should have query_values of {'q' => 'a b'}" do
+ expect(@uri.query_values).to eq({'q' => 'a b'})
+ end
+
+ it "should have a normalized query of 'q=a+b'" do
+ expect(@uri.normalized_query).to eq("q=a+b")
+ end
+end
+
+describe Addressable::URI, "when parsed from 'https://example.com/?q=a+b'" do
+ before do
+ @uri = Addressable::URI.parse("https://example.com/?q=a+b")
+ end
+
+ it "should have query_values of {'q' => 'a b'}" do
+ expect(@uri.query_values).to eq("q" => "a b")
+ end
+end
+
+describe Addressable::URI, "when parsed from 'example.com?q=a+b'" do
+ before do
+ @uri = Addressable::URI.parse("example.com?q=a+b")
+ end
+
+ it "should have query_values of {'q' => 'a b'}" do
+ expect(@uri.query_values).to eq("q" => "a b")
+ end
+end
+
+describe Addressable::URI, "when parsed from 'mailto:?q=a+b'" do
+ before do
+ @uri = Addressable::URI.parse("mailto:?q=a+b")
+ end
+
+ it "should have query_values of {'q' => 'a+b'}" do
+ expect(@uri.query_values).to eq("q" => "a+b")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?q=a%2bb'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?q=a%2bb")
+ end
+
+ it "should have a query of 'q=a+b'" do
+ expect(@uri.query).to eq("q=a%2bb")
+ end
+
+ it "should have query_values of {'q' => 'a+b'}" do
+ expect(@uri.query_values).to eq({'q' => 'a+b'})
+ end
+
+ it "should have a normalized query of 'q=a%2Bb'" do
+ expect(@uri.normalized_query).to eq("q=a%2Bb")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?v=%7E&w=%&x=%25&y=%2B&z=C%CC%A7'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?v=%7E&w=%&x=%25&y=%2B&z=C%CC%A7")
+ end
+
+ it "should have a normalized query of 'v=~&w=%25&x=%25&y=%2B&z=%C3%87'" do
+ expect(@uri.normalized_query).to eq("v=~&w=%25&x=%25&y=%2B&z=%C3%87")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?v=%7E&w=%&x=%25&y=+&z=C%CC%A7'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?v=%7E&w=%&x=%25&y=+&z=C%CC%A7")
+ end
+
+ it "should have a normalized query of 'v=~&w=%25&x=%25&y=+&z=%C3%87'" do
+ expect(@uri.normalized_query).to eq("v=~&w=%25&x=%25&y=+&z=%C3%87")
+ end
+end
+
+describe Addressable::URI, "when parsed from 'http://example/?b=1&a=2&c=3'" do
+ before do
+ @uri = Addressable::URI.parse("http://example/?b=1&a=2&c=3")
+ end
+
+ it "should have a sorted normalized query of 'a=2&b=1&c=3'" do
+ expect(@uri.normalized_query(:sorted)).to eq("a=2&b=1&c=3")
+ end
+end
+
+describe Addressable::URI, "when parsed from 'http://example/?&a&&c&'" do
+ before do
+ @uri = Addressable::URI.parse("http://example/?&a&&c&")
+ end
+
+ it "should have a compacted normalized query of 'a&c'" do
+ expect(@uri.normalized_query(:compacted)).to eq("a&c")
+ end
+end
+
+describe Addressable::URI, "when parsed from 'http://example.com/?a=1&a=1'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?a=1&a=1")
+ end
+
+ it "should have a compacted normalized query of 'a=1'" do
+ expect(@uri.normalized_query(:compacted)).to eq("a=1")
+ end
+end
+
+describe Addressable::URI, "when parsed from 'http://example.com/?a=1&a=2'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?a=1&a=2")
+ end
+
+ it "should have a compacted normalized query of 'a=1&a=2'" do
+ expect(@uri.normalized_query(:compacted)).to eq("a=1&a=2")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/sound%2bvision'" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/sound%2bvision")
+ end
+
+ it "should have a normalized path of '/sound+vision'" do
+ expect(@uri.normalized_path).to eq('/sound+vision')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/?q='" do
+ before do
+ @uri = Addressable::URI.parse("http://example.com/?q=")
+ end
+
+ it "should have a query of 'q='" do
+ expect(@uri.query).to eq("q=")
+ end
+
+ it "should have query_values of {'q' => ''}" do
+ expect(@uri.query_values).to eq({'q' => ''})
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://user@example.com'" do
+ before do
+ @uri = Addressable::URI.parse("http://user@example.com")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have a username of 'user'" do
+ expect(@uri.user).to eq("user")
+ end
+
+ it "should have no password" do
+ expect(@uri.password).to eq(nil)
+ end
+
+ it "should have a userinfo of 'user'" do
+ expect(@uri.userinfo).to eq("user")
+ end
+
+ it "should have a normalized userinfo of 'user'" do
+ expect(@uri.normalized_userinfo).to eq("user")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should have default_port 80" do
+ expect(@uri.default_port).to eq(80)
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have the correct username after assignment" do
+ @uri.user = "newuser"
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq(nil)
+ expect(@uri.to_s).to eq("http://newuser@example.com")
+ end
+
+ it "should have the correct password after assignment" do
+ @uri.password = "newpass"
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.to_s).to eq("http://user:newpass@example.com")
+ end
+
+ it "should have the correct userinfo segment after assignment" do
+ @uri.userinfo = "newuser:newpass"
+ expect(@uri.userinfo).to eq("newuser:newpass")
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.host).to eq("example.com")
+ expect(@uri.port).to eq(nil)
+ expect(@uri.inferred_port).to eq(80)
+ expect(@uri.to_s).to eq("http://newuser:newpass@example.com")
+ end
+
+ it "should have the correct userinfo segment after nil assignment" do
+ @uri.userinfo = nil
+ expect(@uri.userinfo).to eq(nil)
+ expect(@uri.user).to eq(nil)
+ expect(@uri.password).to eq(nil)
+ expect(@uri.host).to eq("example.com")
+ expect(@uri.port).to eq(nil)
+ expect(@uri.inferred_port).to eq(80)
+ expect(@uri.to_s).to eq("http://example.com")
+ end
+
+ it "should have the correct authority segment after assignment" do
+ @uri.authority = "newuser@example.com"
+ expect(@uri.authority).to eq("newuser@example.com")
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq(nil)
+ expect(@uri.host).to eq("example.com")
+ expect(@uri.port).to eq(nil)
+ expect(@uri.inferred_port).to eq(80)
+ expect(@uri.to_s).to eq("http://newuser@example.com")
+ end
+
+ it "should raise an error after nil assignment of authority segment" do
+ expect do
+ # This would create an invalid URI
+ @uri.authority = nil
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://user:@example.com'" do
+ before do
+ @uri = Addressable::URI.parse("http://user:@example.com")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have a username of 'user'" do
+ expect(@uri.user).to eq("user")
+ end
+
+ it "should have a password of ''" do
+ expect(@uri.password).to eq("")
+ end
+
+ it "should have a normalized userinfo of 'user:'" do
+ expect(@uri.normalized_userinfo).to eq("user:")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have the correct username after assignment" do
+ @uri.user = "newuser"
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq("")
+ expect(@uri.to_s).to eq("http://newuser:@example.com")
+ end
+
+ it "should have the correct password after assignment" do
+ @uri.password = "newpass"
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.to_s).to eq("http://user:newpass@example.com")
+ end
+
+ it "should have the correct authority segment after assignment" do
+ @uri.authority = "newuser:@example.com"
+ expect(@uri.authority).to eq("newuser:@example.com")
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq("")
+ expect(@uri.host).to eq("example.com")
+ expect(@uri.port).to eq(nil)
+ expect(@uri.inferred_port).to eq(80)
+ expect(@uri.to_s).to eq("http://newuser:@example.com")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://:pass@example.com'" do
+ before do
+ @uri = Addressable::URI.parse("http://:pass@example.com")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have a username of ''" do
+ expect(@uri.user).to eq("")
+ end
+
+ it "should have a password of 'pass'" do
+ expect(@uri.password).to eq("pass")
+ end
+
+ it "should have a userinfo of ':pass'" do
+ expect(@uri.userinfo).to eq(":pass")
+ end
+
+ it "should have a normalized userinfo of ':pass'" do
+ expect(@uri.normalized_userinfo).to eq(":pass")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have the correct username after assignment" do
+ @uri.user = "newuser"
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq("pass")
+ expect(@uri.to_s).to eq("http://newuser:pass@example.com")
+ end
+
+ it "should have the correct password after assignment" do
+ @uri.password = "newpass"
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.user).to eq("")
+ expect(@uri.to_s).to eq("http://:newpass@example.com")
+ end
+
+ it "should have the correct authority segment after assignment" do
+ @uri.authority = ":newpass@example.com"
+ expect(@uri.authority).to eq(":newpass@example.com")
+ expect(@uri.user).to eq("")
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.host).to eq("example.com")
+ expect(@uri.port).to eq(nil)
+ expect(@uri.inferred_port).to eq(80)
+ expect(@uri.to_s).to eq("http://:newpass@example.com")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://:@example.com'" do
+ before do
+ @uri = Addressable::URI.parse("http://:@example.com")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have a username of ''" do
+ expect(@uri.user).to eq("")
+ end
+
+ it "should have a password of ''" do
+ expect(@uri.password).to eq("")
+ end
+
+ it "should have a normalized userinfo of nil" do
+ expect(@uri.normalized_userinfo).to eq(nil)
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have the correct username after assignment" do
+ @uri.user = "newuser"
+ expect(@uri.user).to eq("newuser")
+ expect(@uri.password).to eq("")
+ expect(@uri.to_s).to eq("http://newuser:@example.com")
+ end
+
+ it "should have the correct password after assignment" do
+ @uri.password = "newpass"
+ expect(@uri.password).to eq("newpass")
+ expect(@uri.user).to eq("")
+ expect(@uri.to_s).to eq("http://:newpass@example.com")
+ end
+
+ it "should have the correct authority segment after assignment" do
+ @uri.authority = ":@newexample.com"
+ expect(@uri.authority).to eq(":@newexample.com")
+ expect(@uri.user).to eq("")
+ expect(@uri.password).to eq("")
+ expect(@uri.host).to eq("newexample.com")
+ expect(@uri.port).to eq(nil)
+ expect(@uri.inferred_port).to eq(80)
+ expect(@uri.to_s).to eq("http://:@newexample.com")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'#example'" do
+ before do
+ @uri = Addressable::URI.parse("#example")
+ end
+
+ it "should be considered relative" do
+ expect(@uri).to be_relative
+ end
+
+ it "should have a host of nil" do
+ expect(@uri.host).to eq(nil)
+ end
+
+ it "should have a site of nil" do
+ expect(@uri.site).to eq(nil)
+ end
+
+ it "should have a normalized_site of nil" do
+ expect(@uri.normalized_site).to eq(nil)
+ end
+
+ it "should have a path of ''" do
+ expect(@uri.path).to eq("")
+ end
+
+ it "should have a query string of nil" do
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should have a fragment of 'example'" do
+ expect(@uri.fragment).to eq("example")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "the network-path reference '//example.com/'" do
+ before do
+ @uri = Addressable::URI.parse("//example.com/")
+ end
+
+ it "should be considered relative" do
+ expect(@uri).to be_relative
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should have a path of '/'" do
+ expect(@uri.path).to eq("/")
+ end
+
+ it "should raise an error if routing is attempted" do
+ expect do
+ @uri.route_to("http://example.com/")
+ end.to raise_error(ArgumentError, /\/\/example.com\//)
+ expect do
+ @uri.route_from("http://example.com/")
+ end.to raise_error(ArgumentError, /\/\/example.com\//)
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'feed://http://example.com/'" do
+ before do
+ @uri = Addressable::URI.parse("feed://http://example.com/")
+ end
+
+ it "should have a host of 'http'" do
+ expect(@uri.host).to eq("http")
+ end
+
+ it "should have a path of '//example.com/'" do
+ expect(@uri.path).to eq("//example.com/")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'feed:http://example.com/'" do
+ before do
+ @uri = Addressable::URI.parse("feed:http://example.com/")
+ end
+
+ it "should have a path of 'http://example.com/'" do
+ expect(@uri.path).to eq("http://example.com/")
+ end
+
+ it "should normalize to 'http://example.com/'" do
+ expect(@uri.normalize.to_s).to eq("http://example.com/")
+ expect(@uri.normalize!.to_s).to eq("http://example.com/")
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'example://a/b/c/%7Bfoo%7D'" do
+ before do
+ @uri = Addressable::URI.parse("example://a/b/c/%7Bfoo%7D")
+ end
+
+ # Section 6.2.2 of RFC 3986
+ it "should be equivalent to eXAMPLE://a/./b/../b/%63/%7bfoo%7d" do
+ expect(@uri).to eq(
+ Addressable::URI.parse("eXAMPLE://a/./b/../b/%63/%7bfoo%7d")
+ )
+ end
+
+ it "should have an origin of 'example://a'" do
+ expect(@uri.origin).to eq('example://a')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://example.com/indirect/path/./to/../resource/'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "http://example.com/indirect/path/./to/../resource/")
+ end
+
+ it "should use the 'http' scheme" do
+ expect(@uri.scheme).to eq("http")
+ end
+
+ it "should have a host of 'example.com'" do
+ expect(@uri.host).to eq("example.com")
+ end
+
+ it "should use port 80" do
+ expect(@uri.inferred_port).to eq(80)
+ end
+
+ it "should have a path of '/indirect/path/./to/../resource/'" do
+ expect(@uri.path).to eq("/indirect/path/./to/../resource/")
+ end
+
+ # Section 6.2.2.3 of RFC 3986
+ it "should have a normalized path of '/indirect/path/resource/'" do
+ expect(@uri.normalize.path).to eq("/indirect/path/resource/")
+ expect(@uri.normalize!.path).to eq("/indirect/path/resource/")
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://under_score.example.com/'" do
+ it "should not cause an error" do
+ expect do
+ Addressable::URI.parse("http://under_score.example.com/")
+ end.not_to raise_error
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'./this:that'" do
+ before do
+ @uri = Addressable::URI.parse("./this:that")
+ end
+
+ it "should be considered relative" do
+ expect(@uri).to be_relative
+ end
+
+ it "should have no scheme" do
+ expect(@uri.scheme).to eq(nil)
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'this:that'" do
+ before do
+ @uri = Addressable::URI.parse("this:that")
+ end
+
+ it "should be considered absolute" do
+ expect(@uri).to be_absolute
+ end
+
+ it "should have a scheme of 'this'" do
+ expect(@uri.scheme).to eq("this")
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when parsed from '?'" do
+ before do
+ @uri = Addressable::URI.parse("?")
+ end
+
+ it "should normalize to ''" do
+ expect(@uri.normalize.to_s).to eq("")
+ end
+
+ it "should have the correct return type" do
+ expect(@uri.query_values).to eq({})
+ expect(@uri.query_values(Hash)).to eq({})
+ expect(@uri.query_values(Array)).to eq([])
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when parsed from '?one=1&two=2&three=3'" do
+ before do
+ @uri = Addressable::URI.parse("?one=1&two=2&three=3")
+ end
+
+ it "should have the correct query values" do
+ expect(@uri.query_values).to eq({"one" => "1", "two" => "2", "three" => "3"})
+ end
+
+ it "should raise an error for invalid return type values" do
+ expect do
+ @uri.query_values(Integer)
+ end.to raise_error(ArgumentError)
+ end
+
+ it "should have the correct array query values" do
+ expect(@uri.query_values(Array)).to eq([
+ ["one", "1"], ["two", "2"], ["three", "3"]
+ ])
+ end
+
+ it "should have a 'null' origin" do
+ expect(@uri.origin).to eq('null')
+ end
+end
+
+describe Addressable::URI, "when parsed from '?one=1=uno&two=2=dos'" do
+ before do
+ @uri = Addressable::URI.parse("?one=1=uno&two=2=dos")
+ end
+
+ it "should have the correct query values" do
+ expect(@uri.query_values).to eq({"one" => "1=uno", "two" => "2=dos"})
+ end
+
+ it "should have the correct array query values" do
+ expect(@uri.query_values(Array)).to eq([
+ ["one", "1=uno"], ["two", "2=dos"]
+ ])
+ end
+end
+
+describe Addressable::URI, "when parsed from '?one[two][three]=four'" do
+ before do
+ @uri = Addressable::URI.parse("?one[two][three]=four")
+ end
+
+ it "should have the correct query values" do
+ expect(@uri.query_values).to eq({"one[two][three]" => "four"})
+ end
+
+ it "should have the correct array query values" do
+ expect(@uri.query_values(Array)).to eq([
+ ["one[two][three]", "four"]
+ ])
+ end
+end
+
+describe Addressable::URI, "when parsed from '?one.two.three=four'" do
+ before do
+ @uri = Addressable::URI.parse("?one.two.three=four")
+ end
+
+ it "should have the correct query values" do
+ expect(@uri.query_values).to eq({
+ "one.two.three" => "four"
+ })
+ end
+
+ it "should have the correct array query values" do
+ expect(@uri.query_values(Array)).to eq([
+ ["one.two.three", "four"]
+ ])
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'?one[two][three]=four&one[two][five]=six'" do
+ before do
+ @uri = Addressable::URI.parse("?one[two][three]=four&one[two][five]=six")
+ end
+
+ it "should have the correct query values" do
+ expect(@uri.query_values).to eq({
+ "one[two][three]" => "four", "one[two][five]" => "six"
+ })
+ end
+
+ it "should have the correct array query values" do
+ expect(@uri.query_values(Array)).to eq([
+ ["one[two][three]", "four"], ["one[two][five]", "six"]
+ ])
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'?one.two.three=four&one.two.five=six'" do
+ before do
+ @uri = Addressable::URI.parse("?one.two.three=four&one.two.five=six")
+ end
+
+ it "should have the correct query values" do
+ expect(@uri.query_values).to eq({
+ "one.two.three" => "four", "one.two.five" => "six"
+ })
+ end
+
+ it "should have the correct array query values" do
+ expect(@uri.query_values(Array)).to eq([
+ ["one.two.three", "four"], ["one.two.five", "six"]
+ ])
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'?one=two&one=three'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "?one=two&one=three&one=four"
+ )
+ end
+
+ it "should have correct array query values" do
+ expect(@uri.query_values(Array)).to eq(
+ [['one', 'two'], ['one', 'three'], ['one', 'four']]
+ )
+ end
+
+ it "should have correct hash query values" do
+ skip("This is probably more desirable behavior.")
+ expect(@uri.query_values(Hash)).to eq(
+ {'one' => ['two', 'three', 'four']}
+ )
+ end
+
+ it "should handle assignment with keys of mixed type" do
+ @uri.query_values = @uri.query_values(Hash).merge({:one => 'three'})
+ expect(@uri.query_values(Hash)).to eq({'one' => 'three'})
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'?one[two][three][]=four&one[two][three][]=five'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "?one[two][three][]=four&one[two][three][]=five"
+ )
+ end
+
+ it "should have correct query values" do
+ expect(@uri.query_values(Hash)).to eq({"one[two][three][]" => "five"})
+ end
+
+ it "should have correct array query values" do
+ expect(@uri.query_values(Array)).to eq([
+ ["one[two][three][]", "four"], ["one[two][three][]", "five"]
+ ])
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'?one[two][three][0]=four&one[two][three][1]=five'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "?one[two][three][0]=four&one[two][three][1]=five"
+ )
+ end
+
+ it "should have the correct query values" do
+ expect(@uri.query_values).to eq({
+ "one[two][three][0]" => "four", "one[two][three][1]" => "five"
+ })
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'?one[two][three][1]=four&one[two][three][0]=five'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "?one[two][three][1]=four&one[two][three][0]=five"
+ )
+ end
+
+ it "should have the correct query values" do
+ expect(@uri.query_values).to eq({
+ "one[two][three][1]" => "four", "one[two][three][0]" => "five"
+ })
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'?one[two][three][2]=four&one[two][three][1]=five'" do
+ before do
+ @uri = Addressable::URI.parse(
+ "?one[two][three][2]=four&one[two][three][1]=five"
+ )
+ end
+
+ it "should have the correct query values" do
+ expect(@uri.query_values).to eq({
+ "one[two][three][2]" => "four", "one[two][three][1]" => "five"
+ })
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://www.詹姆斯.com/'" do
+ before do
+ @uri = Addressable::URI.parse("http://www.詹姆斯.com/")
+ end
+
+ it "should be equivalent to 'http://www.xn--8ws00zhy3a.com/'" do
+ expect(@uri).to eq(
+ Addressable::URI.parse("http://www.xn--8ws00zhy3a.com/")
+ )
+ end
+
+ it "should not have domain name encoded during normalization" do
+ expect(Addressable::URI.normalized_encode(@uri.to_s)).to eq(
+ "http://www.詹姆斯.com/"
+ )
+ end
+
+ it "should have an origin of 'http://www.xn--8ws00zhy3a.com'" do
+ expect(@uri.origin).to eq('http://www.xn--8ws00zhy3a.com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://www.詹姆斯.com/ some spaces /'" do
+ before do
+ @uri = Addressable::URI.parse("http://www.詹姆斯.com/ some spaces /")
+ end
+
+ it "should be equivalent to " +
+ "'http://www.xn--8ws00zhy3a.com/%20some%20spaces%20/'" do
+ expect(@uri).to eq(
+ Addressable::URI.parse(
+ "http://www.xn--8ws00zhy3a.com/%20some%20spaces%20/")
+ )
+ end
+
+ it "should not have domain name encoded during normalization" do
+ expect(Addressable::URI.normalized_encode(@uri.to_s)).to eq(
+ "http://www.詹姆斯.com/%20some%20spaces%20/"
+ )
+ end
+
+ it "should have an origin of 'http://www.xn--8ws00zhy3a.com'" do
+ expect(@uri.origin).to eq('http://www.xn--8ws00zhy3a.com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://www.xn--8ws00zhy3a.com/'" do
+ before do
+ @uri = Addressable::URI.parse("http://www.xn--8ws00zhy3a.com/")
+ end
+
+ it "should be displayed as http://www.詹姆斯.com/" do
+ expect(@uri.display_uri.to_s).to eq("http://www.詹姆斯.com/")
+ end
+
+ it "should properly force the encoding" do
+ display_string = @uri.display_uri.to_str
+ expect(display_string).to eq("http://www.詹姆斯.com/")
+ if display_string.respond_to?(:encoding)
+ expect(display_string.encoding.to_s).to eq(Encoding::UTF_8.to_s)
+ end
+ end
+
+ it "should have an origin of 'http://www.xn--8ws00zhy3a.com'" do
+ expect(@uri.origin).to eq('http://www.xn--8ws00zhy3a.com')
+ end
+end
+
+describe Addressable::URI, "when parsed from " +
+ "'http://www.詹姆斯.com/atomtests/iri/詹.html'" do
+ before do
+ @uri = Addressable::URI.parse("http://www.詹姆斯.com/atomtests/iri/詹.html")
+ end
+
+ it "should normalize to " +
+ "http://www.xn--8ws00zhy3a.com/atomtests/iri/%E8%A9%B9.html" do
+ expect(@uri.normalize.to_s).to eq(
+ "http://www.xn--8ws00zhy3a.com/atomtests/iri/%E8%A9%B9.html"
+ )
+ expect(@uri.normalize!.to_s).to eq(
+ "http://www.xn--8ws00zhy3a.com/atomtests/iri/%E8%A9%B9.html"
+ )
+ end
+end
+
+describe Addressable::URI, "when parsed from a percent-encoded IRI" do
+ before do
+ @uri = Addressable::URI.parse(
+ "http://www.%E3%81%BB%E3%82%93%E3%81%A8%E3%81%86%E3%81%AB%E3%81%AA" +
+ "%E3%81%8C%E3%81%84%E3%82%8F%E3%81%91%E3%81%AE%E3%82%8F%E3%81%8B%E3" +
+ "%82%89%E3%81%AA%E3%81%84%E3%81%A9%E3%82%81%E3%81%84%E3%82%93%E3%82" +
+ "%81%E3%81%84%E3%81%AE%E3%82%89%E3%81%B9%E3%82%8B%E3%81%BE%E3%81%A0" +
+ "%E3%81%AA%E3%81%8C%E3%81%8F%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%E3" +
+ "%81%9F%E3%82%8A%E3%81%AA%E3%81%84.w3.mag.keio.ac.jp"
+ )
+ end
+
+ it "should normalize to something sane" do
+ expect(@uri.normalize.to_s).to eq(
+ "http://www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3f" +
+ "g11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp/"
+ )
+ expect(@uri.normalize!.to_s).to eq(
+ "http://www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3f" +
+ "g11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp/"
+ )
+ end
+
+ it "should have the correct origin" do
+ expect(@uri.origin).to eq(
+ "http://www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3f" +
+ "g11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp"
+ )
+ end
+end
+
+describe Addressable::URI, "with a base uri of 'http://a/b/c/d;p?q'" do
+ before do
+ @uri = Addressable::URI.parse("http://a/b/c/d;p?q")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with 'g:h' should resolve to g:h" do
+ expect((@uri + "g:h").to_s).to eq("g:h")
+ expect(Addressable::URI.join(@uri, "g:h").to_s).to eq("g:h")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with 'g' should resolve to http://a/b/c/g" do
+ expect((@uri + "g").to_s).to eq("http://a/b/c/g")
+ expect(Addressable::URI.join(@uri.to_s, "g").to_s).to eq("http://a/b/c/g")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with './g' should resolve to http://a/b/c/g" do
+ expect((@uri + "./g").to_s).to eq("http://a/b/c/g")
+ expect(Addressable::URI.join(@uri.to_s, "./g").to_s).to eq("http://a/b/c/g")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with 'g/' should resolve to http://a/b/c/g/" do
+ expect((@uri + "g/").to_s).to eq("http://a/b/c/g/")
+ expect(Addressable::URI.join(@uri.to_s, "g/").to_s).to eq("http://a/b/c/g/")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '/g' should resolve to http://a/g" do
+ expect((@uri + "/g").to_s).to eq("http://a/g")
+ expect(Addressable::URI.join(@uri.to_s, "/g").to_s).to eq("http://a/g")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '//g' should resolve to http://g" do
+ expect((@uri + "//g").to_s).to eq("http://g")
+ expect(Addressable::URI.join(@uri.to_s, "//g").to_s).to eq("http://g")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '?y' should resolve to http://a/b/c/d;p?y" do
+ expect((@uri + "?y").to_s).to eq("http://a/b/c/d;p?y")
+ expect(Addressable::URI.join(@uri.to_s, "?y").to_s).to eq("http://a/b/c/d;p?y")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with 'g?y' should resolve to http://a/b/c/g?y" do
+ expect((@uri + "g?y").to_s).to eq("http://a/b/c/g?y")
+ expect(Addressable::URI.join(@uri.to_s, "g?y").to_s).to eq("http://a/b/c/g?y")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '#s' should resolve to http://a/b/c/d;p?q#s" do
+ expect((@uri + "#s").to_s).to eq("http://a/b/c/d;p?q#s")
+ expect(Addressable::URI.join(@uri.to_s, "#s").to_s).to eq(
+ "http://a/b/c/d;p?q#s"
+ )
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with 'g#s' should resolve to http://a/b/c/g#s" do
+ expect((@uri + "g#s").to_s).to eq("http://a/b/c/g#s")
+ expect(Addressable::URI.join(@uri.to_s, "g#s").to_s).to eq("http://a/b/c/g#s")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with 'g?y#s' should resolve to http://a/b/c/g?y#s" do
+ expect((@uri + "g?y#s").to_s).to eq("http://a/b/c/g?y#s")
+ expect(Addressable::URI.join(
+ @uri.to_s, "g?y#s").to_s).to eq("http://a/b/c/g?y#s")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with ';x' should resolve to http://a/b/c/;x" do
+ expect((@uri + ";x").to_s).to eq("http://a/b/c/;x")
+ expect(Addressable::URI.join(@uri.to_s, ";x").to_s).to eq("http://a/b/c/;x")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with 'g;x' should resolve to http://a/b/c/g;x" do
+ expect((@uri + "g;x").to_s).to eq("http://a/b/c/g;x")
+ expect(Addressable::URI.join(@uri.to_s, "g;x").to_s).to eq("http://a/b/c/g;x")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with 'g;x?y#s' should resolve to http://a/b/c/g;x?y#s" do
+ expect((@uri + "g;x?y#s").to_s).to eq("http://a/b/c/g;x?y#s")
+ expect(Addressable::URI.join(
+ @uri.to_s, "g;x?y#s").to_s).to eq("http://a/b/c/g;x?y#s")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '' should resolve to http://a/b/c/d;p?q" do
+ expect((@uri + "").to_s).to eq("http://a/b/c/d;p?q")
+ expect(Addressable::URI.join(@uri.to_s, "").to_s).to eq("http://a/b/c/d;p?q")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '.' should resolve to http://a/b/c/" do
+ expect((@uri + ".").to_s).to eq("http://a/b/c/")
+ expect(Addressable::URI.join(@uri.to_s, ".").to_s).to eq("http://a/b/c/")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with './' should resolve to http://a/b/c/" do
+ expect((@uri + "./").to_s).to eq("http://a/b/c/")
+ expect(Addressable::URI.join(@uri.to_s, "./").to_s).to eq("http://a/b/c/")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '..' should resolve to http://a/b/" do
+ expect((@uri + "..").to_s).to eq("http://a/b/")
+ expect(Addressable::URI.join(@uri.to_s, "..").to_s).to eq("http://a/b/")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '../' should resolve to http://a/b/" do
+ expect((@uri + "../").to_s).to eq("http://a/b/")
+ expect(Addressable::URI.join(@uri.to_s, "../").to_s).to eq("http://a/b/")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '../g' should resolve to http://a/b/g" do
+ expect((@uri + "../g").to_s).to eq("http://a/b/g")
+ expect(Addressable::URI.join(@uri.to_s, "../g").to_s).to eq("http://a/b/g")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '../..' should resolve to http://a/" do
+ expect((@uri + "../..").to_s).to eq("http://a/")
+ expect(Addressable::URI.join(@uri.to_s, "../..").to_s).to eq("http://a/")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '../../' should resolve to http://a/" do
+ expect((@uri + "../../").to_s).to eq("http://a/")
+ expect(Addressable::URI.join(@uri.to_s, "../../").to_s).to eq("http://a/")
+ end
+
+ # Section 5.4.1 of RFC 3986
+ it "when joined with '../../g' should resolve to http://a/g" do
+ expect((@uri + "../../g").to_s).to eq("http://a/g")
+ expect(Addressable::URI.join(@uri.to_s, "../../g").to_s).to eq("http://a/g")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with '../../../g' should resolve to http://a/g" do
+ expect((@uri + "../../../g").to_s).to eq("http://a/g")
+ expect(Addressable::URI.join(@uri.to_s, "../../../g").to_s).to eq("http://a/g")
+ end
+
+ it "when joined with '../.././../g' should resolve to http://a/g" do
+ expect((@uri + "../.././../g").to_s).to eq("http://a/g")
+ expect(Addressable::URI.join(@uri.to_s, "../.././../g").to_s).to eq(
+ "http://a/g"
+ )
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with '../../../../g' should resolve to http://a/g" do
+ expect((@uri + "../../../../g").to_s).to eq("http://a/g")
+ expect(Addressable::URI.join(
+ @uri.to_s, "../../../../g").to_s).to eq("http://a/g")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with '/./g' should resolve to http://a/g" do
+ expect((@uri + "/./g").to_s).to eq("http://a/g")
+ expect(Addressable::URI.join(@uri.to_s, "/./g").to_s).to eq("http://a/g")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with '/../g' should resolve to http://a/g" do
+ expect((@uri + "/../g").to_s).to eq("http://a/g")
+ expect(Addressable::URI.join(@uri.to_s, "/../g").to_s).to eq("http://a/g")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'g.' should resolve to http://a/b/c/g." do
+ expect((@uri + "g.").to_s).to eq("http://a/b/c/g.")
+ expect(Addressable::URI.join(@uri.to_s, "g.").to_s).to eq("http://a/b/c/g.")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with '.g' should resolve to http://a/b/c/.g" do
+ expect((@uri + ".g").to_s).to eq("http://a/b/c/.g")
+ expect(Addressable::URI.join(@uri.to_s, ".g").to_s).to eq("http://a/b/c/.g")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'g..' should resolve to http://a/b/c/g.." do
+ expect((@uri + "g..").to_s).to eq("http://a/b/c/g..")
+ expect(Addressable::URI.join(@uri.to_s, "g..").to_s).to eq("http://a/b/c/g..")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with '..g' should resolve to http://a/b/c/..g" do
+ expect((@uri + "..g").to_s).to eq("http://a/b/c/..g")
+ expect(Addressable::URI.join(@uri.to_s, "..g").to_s).to eq("http://a/b/c/..g")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with './../g' should resolve to http://a/b/g" do
+ expect((@uri + "./../g").to_s).to eq("http://a/b/g")
+ expect(Addressable::URI.join(@uri.to_s, "./../g").to_s).to eq("http://a/b/g")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with './g/.' should resolve to http://a/b/c/g/" do
+ expect((@uri + "./g/.").to_s).to eq("http://a/b/c/g/")
+ expect(Addressable::URI.join(@uri.to_s, "./g/.").to_s).to eq("http://a/b/c/g/")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'g/./h' should resolve to http://a/b/c/g/h" do
+ expect((@uri + "g/./h").to_s).to eq("http://a/b/c/g/h")
+ expect(Addressable::URI.join(@uri.to_s, "g/./h").to_s).to eq("http://a/b/c/g/h")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'g/../h' should resolve to http://a/b/c/h" do
+ expect((@uri + "g/../h").to_s).to eq("http://a/b/c/h")
+ expect(Addressable::URI.join(@uri.to_s, "g/../h").to_s).to eq("http://a/b/c/h")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'g;x=1/./y' " +
+ "should resolve to http://a/b/c/g;x=1/y" do
+ expect((@uri + "g;x=1/./y").to_s).to eq("http://a/b/c/g;x=1/y")
+ expect(Addressable::URI.join(
+ @uri.to_s, "g;x=1/./y").to_s).to eq("http://a/b/c/g;x=1/y")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'g;x=1/../y' should resolve to http://a/b/c/y" do
+ expect((@uri + "g;x=1/../y").to_s).to eq("http://a/b/c/y")
+ expect(Addressable::URI.join(
+ @uri.to_s, "g;x=1/../y").to_s).to eq("http://a/b/c/y")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'g?y/./x' " +
+ "should resolve to http://a/b/c/g?y/./x" do
+ expect((@uri + "g?y/./x").to_s).to eq("http://a/b/c/g?y/./x")
+ expect(Addressable::URI.join(
+ @uri.to_s, "g?y/./x").to_s).to eq("http://a/b/c/g?y/./x")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'g?y/../x' " +
+ "should resolve to http://a/b/c/g?y/../x" do
+ expect((@uri + "g?y/../x").to_s).to eq("http://a/b/c/g?y/../x")
+ expect(Addressable::URI.join(
+ @uri.to_s, "g?y/../x").to_s).to eq("http://a/b/c/g?y/../x")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'g#s/./x' " +
+ "should resolve to http://a/b/c/g#s/./x" do
+ expect((@uri + "g#s/./x").to_s).to eq("http://a/b/c/g#s/./x")
+ expect(Addressable::URI.join(
+ @uri.to_s, "g#s/./x").to_s).to eq("http://a/b/c/g#s/./x")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'g#s/../x' " +
+ "should resolve to http://a/b/c/g#s/../x" do
+ expect((@uri + "g#s/../x").to_s).to eq("http://a/b/c/g#s/../x")
+ expect(Addressable::URI.join(
+ @uri.to_s, "g#s/../x").to_s).to eq("http://a/b/c/g#s/../x")
+ end
+
+ # Section 5.4.2 of RFC 3986
+ it "when joined with 'http:g' should resolve to http:g" do
+ expect((@uri + "http:g").to_s).to eq("http:g")
+ expect(Addressable::URI.join(@uri.to_s, "http:g").to_s).to eq("http:g")
+ end
+
+ # Edge case to be sure
+ it "when joined with '//example.com/' should " +
+ "resolve to http://example.com/" do
+ expect((@uri + "//example.com/").to_s).to eq("http://example.com/")
+ expect(Addressable::URI.join(
+ @uri.to_s, "//example.com/").to_s).to eq("http://example.com/")
+ end
+
+ it "when joined with a bogus object a TypeError should be raised" do
+ expect do
+ Addressable::URI.join(@uri, 42)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when converting the path " +
+ "'relative/path/to/something'" do
+ before do
+ @path = 'relative/path/to/something'
+ end
+
+ it "should convert to " +
+ "\'relative/path/to/something\'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.to_str).to eq("relative/path/to/something")
+ end
+
+ it "should join with an absolute file path correctly" do
+ @base = Addressable::URI.convert_path("/absolute/path/")
+ @uri = Addressable::URI.convert_path(@path)
+ expect((@base + @uri).to_str).to eq(
+ "file:///absolute/path/relative/path/to/something"
+ )
+ end
+end
+
+describe Addressable::URI, "when converting a bogus path" do
+ it "should raise a TypeError" do
+ expect do
+ Addressable::URI.convert_path(42)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when given a UNIX root directory" do
+ before do
+ @path = "/"
+ end
+
+ it "should convert to \'file:///\'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.to_str).to eq("file:///")
+ end
+
+ it "should have an origin of 'file://'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.origin).to eq('file://')
+ end
+end
+
+describe Addressable::URI, "when given a Windows root directory" do
+ before do
+ @path = "C:\\"
+ end
+
+ it "should convert to \'file:///c:/\'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.to_str).to eq("file:///c:/")
+ end
+
+ it "should have an origin of 'file://'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.origin).to eq('file://')
+ end
+end
+
+describe Addressable::URI, "when given the path '/one/two/'" do
+ before do
+ @path = '/one/two/'
+ end
+
+ it "should convert to " +
+ "\'file:///one/two/\'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.to_str).to eq("file:///one/two/")
+ end
+
+ it "should have an origin of 'file://'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.origin).to eq('file://')
+ end
+end
+
+describe Addressable::URI, "when given the tld " do
+ it "'uk' should have a tld of 'uk'" do
+ uri = Addressable::URI.parse("http://example.com")
+ uri.tld = "uk"
+
+ expect(uri.tld).to eq("uk")
+ end
+
+ context "which " do
+ let (:uri) { Addressable::URI.parse("http://www.comrade.net/path/to/source/") }
+
+ it "contains a subdomain" do
+ uri.tld = "co.uk"
+
+ expect(uri.to_s).to eq("http://www.comrade.co.uk/path/to/source/")
+ end
+
+ it "is part of the domain" do
+ uri.tld = "com"
+
+ expect(uri.to_s).to eq("http://www.comrade.com/path/to/source/")
+ end
+ end
+end
+
+describe Addressable::URI, "when given the path " +
+ "'c:\\windows\\My Documents 100%20\\foo.txt'" do
+ before do
+ @path = "c:\\windows\\My Documents 100%20\\foo.txt"
+ end
+
+ it "should convert to " +
+ "\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.to_str).to eq("file:///c:/windows/My%20Documents%20100%20/foo.txt")
+ end
+
+ it "should have an origin of 'file://'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.origin).to eq('file://')
+ end
+end
+
+describe Addressable::URI, "when given the path " +
+ "'file://c:\\windows\\My Documents 100%20\\foo.txt'" do
+ before do
+ @path = "file://c:\\windows\\My Documents 100%20\\foo.txt"
+ end
+
+ it "should convert to " +
+ "\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.to_str).to eq("file:///c:/windows/My%20Documents%20100%20/foo.txt")
+ end
+
+ it "should have an origin of 'file://'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.origin).to eq('file://')
+ end
+end
+
+describe Addressable::URI, "when given the path " +
+ "'file:c:\\windows\\My Documents 100%20\\foo.txt'" do
+ before do
+ @path = "file:c:\\windows\\My Documents 100%20\\foo.txt"
+ end
+
+ it "should convert to " +
+ "\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.to_str).to eq("file:///c:/windows/My%20Documents%20100%20/foo.txt")
+ end
+
+ it "should have an origin of 'file://'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.origin).to eq('file://')
+ end
+end
+
+describe Addressable::URI, "when given the path " +
+ "'file:/c:\\windows\\My Documents 100%20\\foo.txt'" do
+ before do
+ @path = "file:/c:\\windows\\My Documents 100%20\\foo.txt"
+ end
+
+ it "should convert to " +
+ "\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.to_str).to eq("file:///c:/windows/My%20Documents%20100%20/foo.txt")
+ end
+
+ it "should have an origin of 'file://'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.origin).to eq('file://')
+ end
+end
+
+describe Addressable::URI, "when given the path " +
+ "'file:///c|/windows/My%20Documents%20100%20/foo.txt'" do
+ before do
+ @path = "file:///c|/windows/My%20Documents%20100%20/foo.txt"
+ end
+
+ it "should convert to " +
+ "\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.to_str).to eq("file:///c:/windows/My%20Documents%20100%20/foo.txt")
+ end
+
+ it "should have an origin of 'file://'" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.origin).to eq('file://')
+ end
+end
+
+describe Addressable::URI, "when given an http protocol URI" do
+ before do
+ @path = "http://example.com/"
+ end
+
+ it "should not do any conversion at all" do
+ @uri = Addressable::URI.convert_path(@path)
+ expect(@uri.to_str).to eq("http://example.com/")
+ end
+end
+
+class SuperString
+ def initialize(string)
+ @string = string.to_s
+ end
+
+ def to_str
+ return @string
+ end
+end
+
+describe Addressable::URI, "when parsing a non-String object" do
+ it "should correctly parse anything with a 'to_str' method" do
+ Addressable::URI.parse(SuperString.new(42))
+ end
+
+ it "should raise a TypeError for objects than cannot be converted" do
+ expect do
+ Addressable::URI.parse(42)
+ end.to raise_error(TypeError)
+ end
+
+ it "should correctly parse heuristically anything with a 'to_str' method" do
+ Addressable::URI.heuristic_parse(SuperString.new(42))
+ end
+
+ it "should raise a TypeError for objects than cannot be converted" do
+ expect do
+ Addressable::URI.heuristic_parse(42)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when form encoding a hash" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.form_encode(
+ [["&one", "/1"], ["=two", "?2"], [":three", "#3"]]
+ )).to eq("%26one=%2F1&%3Dtwo=%3F2&%3Athree=%233")
+ end
+
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.form_encode(
+ {"q" => "one two three"}
+ )).to eq("q=one+two+three")
+ end
+
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.form_encode(
+ {"key" => nil}
+ )).to eq("key=")
+ end
+
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.form_encode(
+ {"q" => ["one", "two", "three"]}
+ )).to eq("q=one&q=two&q=three")
+ end
+
+ it "should result in correctly encoded newlines" do
+ expect(Addressable::URI.form_encode(
+ {"text" => "one\ntwo\rthree\r\nfour\n\r"}
+ )).to eq("text=one%0D%0Atwo%0D%0Athree%0D%0Afour%0D%0A%0D%0A")
+ end
+
+ it "should result in a sorted percent encoded sequence" do
+ expect(Addressable::URI.form_encode(
+ [["a", "1"], ["dup", "3"], ["dup", "2"]], true
+ )).to eq("a=1&dup=2&dup=3")
+ end
+end
+
+describe Addressable::URI, "when form encoding a non-Array object" do
+ it "should raise a TypeError for objects than cannot be converted" do
+ expect do
+ Addressable::URI.form_encode(42)
+ end.to raise_error(TypeError)
+ end
+end
+
+# See https://tools.ietf.org/html/rfc6749#appendix-B
+describe Addressable::URI, "when form encoding the example value from OAuth 2" do
+ it "should result in correct values" do
+ expect(Addressable::URI.form_encode(
+ {"value" => " %&+£€"}
+ )).to eq("value=+%25%26%2B%C2%A3%E2%82%AC")
+ end
+end
+
+# See https://tools.ietf.org/html/rfc6749#appendix-B
+describe Addressable::URI, "when form unencoding the example value from OAuth 2" do
+ it "should result in correct values" do
+ expect(Addressable::URI.form_unencode(
+ "value=+%25%26%2B%C2%A3%E2%82%AC"
+ )).to eq([["value", " %&+£€"]])
+ end
+end
+
+describe Addressable::URI, "when form unencoding a string" do
+ it "should result in correct values" do
+ expect(Addressable::URI.form_unencode(
+ "%26one=%2F1&%3Dtwo=%3F2&%3Athree=%233"
+ )).to eq([["&one", "/1"], ["=two", "?2"], [":three", "#3"]])
+ end
+
+ it "should result in correct values" do
+ expect(Addressable::URI.form_unencode(
+ "q=one+two+three"
+ )).to eq([["q", "one two three"]])
+ end
+
+ it "should result in correct values" do
+ expect(Addressable::URI.form_unencode(
+ "text=one%0D%0Atwo%0D%0Athree%0D%0Afour%0D%0A%0D%0A"
+ )).to eq([["text", "one\ntwo\nthree\nfour\n\n"]])
+ end
+
+ it "should result in correct values" do
+ expect(Addressable::URI.form_unencode(
+ "a=1&dup=2&dup=3"
+ )).to eq([["a", "1"], ["dup", "2"], ["dup", "3"]])
+ end
+
+ it "should result in correct values" do
+ expect(Addressable::URI.form_unencode(
+ "key"
+ )).to eq([["key", nil]])
+ end
+
+ it "should result in correct values" do
+ expect(Addressable::URI.form_unencode("GivenName=Ren%C3%A9")).to eq(
+ [["GivenName", "René"]]
+ )
+ end
+end
+
+describe Addressable::URI, "when form unencoding a non-String object" do
+ it "should correctly parse anything with a 'to_str' method" do
+ Addressable::URI.form_unencode(SuperString.new(42))
+ end
+
+ it "should raise a TypeError for objects than cannot be converted" do
+ expect do
+ Addressable::URI.form_unencode(42)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when normalizing a non-String object" do
+ it "should correctly parse anything with a 'to_str' method" do
+ Addressable::URI.normalize_component(SuperString.new(42))
+ end
+
+ it "should raise a TypeError for objects than cannot be converted" do
+ expect do
+ Addressable::URI.normalize_component(42)
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise a TypeError for objects than cannot be converted" do
+ expect do
+ Addressable::URI.normalize_component("component", 42)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when normalizing a path with an encoded slash" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.parse("/path%2Fsegment/").normalize.path).to eq(
+ "/path%2Fsegment/"
+ )
+ end
+end
+
+describe Addressable::URI, "when normalizing a partially encoded string" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.normalize_component(
+ "partially % encoded%21"
+ )).to eq("partially%20%25%20encoded!")
+ end
+
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.normalize_component(
+ "partially %25 encoded!"
+ )).to eq("partially%20%25%20encoded!")
+ end
+end
+
+describe Addressable::URI, "when normalizing a unicode sequence" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.normalize_component(
+ "/C%CC%A7"
+ )).to eq("/%C3%87")
+ end
+
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.normalize_component(
+ "/%C3%87"
+ )).to eq("/%C3%87")
+ end
+end
+
+describe Addressable::URI, "when normalizing a multibyte string" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.normalize_component("günther")).to eq(
+ "g%C3%BCnther"
+ )
+ end
+
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.normalize_component("g%C3%BCnther")).to eq(
+ "g%C3%BCnther"
+ )
+ end
+end
+
+describe Addressable::URI, "when normalizing a string but leaving some characters encoded" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.normalize_component("%58X%59Y%5AZ", "0-9a-zXY", "Y")).to eq(
+ "XX%59Y%5A%5A"
+ )
+ end
+
+ it "should not modify the character class" do
+ character_class = "0-9a-zXY"
+
+ character_class_copy = character_class.dup
+
+ Addressable::URI.normalize_component("%58X%59Y%5AZ", character_class, "Y")
+
+ expect(character_class).to eq(character_class_copy)
+ end
+end
+
+describe Addressable::URI, "when encoding IP literals" do
+ it "should work for IPv4" do
+ input = "http://127.0.0.1/"
+ expect(Addressable::URI.encode(input)).to eq(input)
+ end
+
+ it "should work for IPv6" do
+ input = "http://[fe80::200:f8ff:fe21:67cf]/"
+ expect(Addressable::URI.encode(input)).to eq(input)
+ end
+end
+
+describe Addressable::URI, "when encoding a string with existing encodings to upcase" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.encode_component("JK%4c", "0-9A-IKM-Za-z%", "L")).to eq("%4AK%4C")
+ end
+end
+
+describe Addressable::URI, "when encoding a multibyte string" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.encode_component("günther")).to eq("g%C3%BCnther")
+ end
+
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.encode_component(
+ "günther", /[^a-zA-Z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\-\.\_\~]/
+ )).to eq("g%C3%BCnther")
+ end
+end
+
+describe Addressable::URI, "when form encoding a multibyte string" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.form_encode({"GivenName" => "René"})).to eq(
+ "GivenName=Ren%C3%A9"
+ )
+ end
+end
+
+describe Addressable::URI, "when encoding a string with ASCII chars 0-15" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.encode_component("one\ntwo")).to eq("one%0Atwo")
+ end
+
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.encode_component(
+ "one\ntwo", /[^a-zA-Z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\-\.\_\~]/
+ )).to eq("one%0Atwo")
+ end
+end
+
+describe Addressable::URI, "when unencoding a multibyte string" do
+ it "should result in correct percent encoded sequence" do
+ expect(Addressable::URI.unencode_component("g%C3%BCnther")).to eq("günther")
+ end
+
+ it "should consistently use UTF-8 internally" do
+ expect(Addressable::URI.unencode_component("ski=%BA%DAɫ")).to eq("ski=\xBA\xDAɫ")
+ end
+
+ it "should result in correct percent encoded sequence as a URI" do
+ expect(Addressable::URI.unencode(
+ "/path?g%C3%BCnther", ::Addressable::URI
+ )).to eq(Addressable::URI.new(
+ :path => "/path", :query => "günther"
+ ))
+ end
+end
+
+describe Addressable::URI, "when partially unencoding a string" do
+ it "should unencode all characters by default" do
+ expect(Addressable::URI.unencode('%%25~%7e+%2b', String)).to eq('%%~~++')
+ end
+
+ it "should unencode characters not in leave_encoded" do
+ expect(Addressable::URI.unencode('%%25~%7e+%2b', String, '~')).to eq('%%~%7e++')
+ end
+
+ it "should leave characters in leave_encoded alone" do
+ expect(Addressable::URI.unencode('%%25~%7e+%2b', String, '%~+')).to eq('%%25~%7e+%2b')
+ end
+end
+
+describe Addressable::URI, "when unencoding a bogus object" do
+ it "should raise a TypeError" do
+ expect do
+ Addressable::URI.unencode_component(42)
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise a TypeError" do
+ expect do
+ Addressable::URI.unencode("/path?g%C3%BCnther", Integer)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when encoding a bogus object" do
+ it "should raise a TypeError" do
+ expect do
+ Addressable::URI.encode(Object.new)
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise a TypeError" do
+ expect do
+ Addressable::URI.normalized_encode(Object.new)
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise a TypeError" do
+ expect do
+ Addressable::URI.encode_component("günther", Object.new)
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise a TypeError" do
+ expect do
+ Addressable::URI.encode_component(Object.new)
+ end.to raise_error(TypeError)
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'http://example.com/'" do
+ before do
+ @input = "http://example.com/"
+ end
+
+ it "should heuristically parse to 'http://example.com/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("http://example.com/")
+ end
+
+ it "should not raise error when frozen" do
+ expect do
+ Addressable::URI.heuristic_parse(@input).freeze.to_s
+ end.not_to raise_error
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'https://example.com/'" do
+ before do
+ @input = "https://example.com/"
+ end
+
+ it "should heuristically parse to 'https://example.com/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("https://example.com/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'http:example.com/'" do
+ before do
+ @input = "http:example.com/"
+ end
+
+ it "should heuristically parse to 'http://example.com/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("http://example.com/")
+ end
+
+ it "should heuristically parse to 'http://example.com/' " +
+ "even with a scheme hint of 'ftp'" do
+ @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
+ expect(@uri.to_s).to eq("http://example.com/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'https:example.com/'" do
+ before do
+ @input = "https:example.com/"
+ end
+
+ it "should heuristically parse to 'https://example.com/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("https://example.com/")
+ end
+
+ it "should heuristically parse to 'https://example.com/' " +
+ "even with a scheme hint of 'ftp'" do
+ @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
+ expect(@uri.to_s).to eq("https://example.com/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'http://example.com/example.com/'" do
+ before do
+ @input = "http://example.com/example.com/"
+ end
+
+ it "should heuristically parse to 'http://example.com/example.com/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("http://example.com/example.com/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'http://prefix\\.example.com/'" do
+ before do
+ @input = "http://prefix\\.example.com/"
+ end
+
+ it "should heuristically parse to 'http://prefix/.example.com/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.authority).to eq("prefix")
+ expect(@uri.to_s).to eq("http://prefix/.example.com/")
+ end
+
+ it "should heuristically parse to 'http://prefix/.example.com/' " +
+ "even with a scheme hint of 'ftp'" do
+ @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
+ expect(@uri.to_s).to eq("http://prefix/.example.com/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'http://p:\\/'" do
+ before do
+ @input = "http://p:\\/"
+ end
+
+ it "should heuristically parse to 'http://p//'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.authority).to eq("p")
+ expect(@uri.to_s).to eq("http://p//")
+ end
+
+ it "should heuristically parse to 'http://p//' " +
+ "even with a scheme hint of 'ftp'" do
+ @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
+ expect(@uri.to_s).to eq("http://p//")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'http://p://'" do
+ before do
+ @input = "http://p://"
+ end
+
+ it "should heuristically parse to 'http://p//'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.authority).to eq("p")
+ expect(@uri.to_s).to eq("http://p//")
+ end
+
+ it "should heuristically parse to 'http://p//' " +
+ "even with a scheme hint of 'ftp'" do
+ @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
+ expect(@uri.to_s).to eq("http://p//")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'http://p://p'" do
+ before do
+ @input = "http://p://p"
+ end
+
+ it "should heuristically parse to 'http://p//p'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.authority).to eq("p")
+ expect(@uri.to_s).to eq("http://p//p")
+ end
+
+ it "should heuristically parse to 'http://p//p' " +
+ "even with a scheme hint of 'ftp'" do
+ @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
+ expect(@uri.to_s).to eq("http://p//p")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'http://prefix .example.com/'" do
+ before do
+ @input = "http://prefix .example.com/"
+ end
+
+ # Justification here being that no browser actually tries to resolve this.
+ # They all treat this as a web search.
+ it "should heuristically parse to 'http://prefix%20.example.com/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.authority).to eq("prefix%20.example.com")
+ expect(@uri.to_s).to eq("http://prefix%20.example.com/")
+ end
+
+ it "should heuristically parse to 'http://prefix%20.example.com/' " +
+ "even with a scheme hint of 'ftp'" do
+ @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
+ expect(@uri.to_s).to eq("http://prefix%20.example.com/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "' http://www.example.com/ '" do
+ before do
+ @input = " http://www.example.com/ "
+ end
+
+ it "should heuristically parse to 'http://prefix%20.example.com/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.scheme).to eq("http")
+ expect(@uri.path).to eq("/")
+ expect(@uri.to_s).to eq("http://www.example.com/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'http://prefix%2F.example.com/'" do
+ before do
+ @input = "http://prefix%2F.example.com/"
+ end
+
+ it "should heuristically parse to 'http://prefix%2F.example.com/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.authority).to eq("prefix%2F.example.com")
+ expect(@uri.to_s).to eq("http://prefix%2F.example.com/")
+ end
+
+ it "should heuristically parse to 'http://prefix%2F.example.com/' " +
+ "even with a scheme hint of 'ftp'" do
+ @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
+ expect(@uri.to_s).to eq("http://prefix%2F.example.com/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'/path/to/resource'" do
+ before do
+ @input = "/path/to/resource"
+ end
+
+ it "should heuristically parse to '/path/to/resource'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("/path/to/resource")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'relative/path/to/resource'" do
+ before do
+ @input = "relative/path/to/resource"
+ end
+
+ it "should heuristically parse to 'relative/path/to/resource'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("relative/path/to/resource")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'example.com'" do
+ before do
+ @input = "example.com"
+ end
+
+ it "should heuristically parse to 'http://example.com'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("http://example.com")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'example.com' and a scheme hint of 'ftp'" do
+ before do
+ @input = "example.com"
+ @hints = {:scheme => 'ftp'}
+ end
+
+ it "should heuristically parse to 'http://example.com'" do
+ @uri = Addressable::URI.heuristic_parse(@input, @hints)
+ expect(@uri.to_s).to eq("ftp://example.com")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'example.com:21' and a scheme hint of 'ftp'" do
+ before do
+ @input = "example.com:21"
+ @hints = {:scheme => 'ftp'}
+ end
+
+ it "should heuristically parse to 'http://example.com:21'" do
+ @uri = Addressable::URI.heuristic_parse(@input, @hints)
+ expect(@uri.to_s).to eq("ftp://example.com:21")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'example.com/path/to/resource'" do
+ before do
+ @input = "example.com/path/to/resource"
+ end
+
+ it "should heuristically parse to 'http://example.com/path/to/resource'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("http://example.com/path/to/resource")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'http:///example.com'" do
+ before do
+ @input = "http:///example.com"
+ end
+
+ it "should heuristically parse to 'http://example.com'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("http://example.com")
+ end
+end
+
+describe Addressable::URI, "when given the input which "\
+ "start with digits and has specified port" do
+ before do
+ @input = "7777.example.org:8089"
+ end
+
+ it "should heuristically parse to 'http://7777.example.org:8089'" do
+ uri = Addressable::URI.heuristic_parse(@input)
+ expect(uri.to_s).to eq("http://7777.example.org:8089")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'feed:///example.com'" do
+ before do
+ @input = "feed:///example.com"
+ end
+
+ it "should heuristically parse to 'feed://example.com'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("feed://example.com")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'file://localhost/path/to/resource/'" do
+ before do
+ @input = "file://localhost/path/to/resource/"
+ end
+
+ it "should heuristically parse to 'file:///path/to/resource/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("file:///path/to/resource/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'file://path/to/resource/'" do
+ before do
+ @input = "file://path/to/resource/"
+ end
+
+ it "should heuristically parse to 'file:///path/to/resource/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("file:///path/to/resource/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'file://///path/to/resource/'" do
+ before do
+ @input = "file:///////path/to/resource/"
+ end
+
+ it "should heuristically parse to 'file:////path/to/resource/'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("file:////path/to/resource/")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "'feed://http://example.com'" do
+ before do
+ @input = "feed://http://example.com"
+ end
+
+ it "should heuristically parse to 'feed:http://example.com'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("feed:http://example.com")
+ end
+end
+
+describe Addressable::URI, "when given the input " +
+ "::URI.parse('http://example.com')" do
+ before do
+ @input = ::URI.parse('http://example.com')
+ end
+
+ it "should heuristically parse to 'http://example.com'" do
+ @uri = Addressable::URI.heuristic_parse(@input)
+ expect(@uri.to_s).to eq("http://example.com")
+ end
+end
+
+describe Addressable::URI, "when given the input: 'user@domain.com'" do
+ before do
+ @input = "user@domain.com"
+ end
+
+ context "for heuristic parse" do
+ it "should remain 'mailto:user@domain.com'" do
+ uri = Addressable::URI.heuristic_parse("mailto:#{@input}")
+ expect(uri.to_s).to eq("mailto:user@domain.com")
+ end
+
+ it "should have a scheme of 'mailto'" do
+ uri = Addressable::URI.heuristic_parse(@input)
+ expect(uri.to_s).to eq("mailto:user@domain.com")
+ expect(uri.scheme).to eq("mailto")
+ end
+
+ it "should remain 'acct:user@domain.com'" do
+ uri = Addressable::URI.heuristic_parse("acct:#{@input}")
+ expect(uri.to_s).to eq("acct:user@domain.com")
+ end
+
+ context "HTTP" do
+ before do
+ @uri = Addressable::URI.heuristic_parse("http://#{@input}/")
+ end
+
+ it "should remain 'http://user@domain.com/'" do
+ expect(@uri.to_s).to eq("http://user@domain.com/")
+ end
+
+ it "should have the username 'user' for HTTP basic authentication" do
+ expect(@uri.user).to eq("user")
+ end
+ end
+ end
+end
+
+describe Addressable::URI, "when assigning query values" do
+ before do
+ @uri = Addressable::URI.new
+ end
+
+ it "should correctly assign {:a => 'a', :b => ['c', 'd', 'e']}" do
+ @uri.query_values = {:a => "a", :b => ["c", "d", "e"]}
+ expect(@uri.query).to eq("a=a&b=c&b=d&b=e")
+ end
+
+ it "should raise an error attempting to assign {'a' => {'b' => ['c']}}" do
+ expect do
+ @uri.query_values = { 'a' => {'b' => ['c'] } }
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise an error attempting to assign " +
+ "{:b => '2', :a => {:c => '1'}}" do
+ expect do
+ @uri.query_values = {:b => '2', :a => {:c => '1'}}
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise an error attempting to assign " +
+ "{:a => 'a', :b => [{:c => 'c', :d => 'd'}, " +
+ "{:e => 'e', :f => 'f'}]}" do
+ expect do
+ @uri.query_values = {
+ :a => "a", :b => [{:c => "c", :d => "d"}, {:e => "e", :f => "f"}]
+ }
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise an error attempting to assign " +
+ "{:a => 'a', :b => [{:c => true, :d => 'd'}, " +
+ "{:e => 'e', :f => 'f'}]}" do
+ expect do
+ @uri.query_values = {
+ :a => 'a', :b => [{:c => true, :d => 'd'}, {:e => 'e', :f => 'f'}]
+ }
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise an error attempting to assign " +
+ "{:a => 'a', :b => {:c => true, :d => 'd'}}" do
+ expect do
+ @uri.query_values = {
+ :a => 'a', :b => {:c => true, :d => 'd'}
+ }
+ end.to raise_error(TypeError)
+ end
+
+ it "should raise an error attempting to assign " +
+ "{:a => 'a', :b => {:c => true, :d => 'd'}}" do
+ expect do
+ @uri.query_values = {
+ :a => 'a', :b => {:c => true, :d => 'd'}
+ }
+ end.to raise_error(TypeError)
+ end
+
+ it "should correctly assign {:a => 1, :b => 1.5}" do
+ @uri.query_values = { :a => 1, :b => 1.5 }
+ expect(@uri.query).to eq("a=1&b=1.5")
+ end
+
+ it "should raise an error attempting to assign " +
+ "{:z => 1, :f => [2, {999.1 => [3,'4']}, ['h', 'i']], " +
+ ":a => {:b => ['c', 'd'], :e => true, :y => 0.5}}" do
+ expect do
+ @uri.query_values = {
+ :z => 1,
+ :f => [ 2, {999.1 => [3,'4']}, ['h', 'i'] ],
+ :a => { :b => ['c', 'd'], :e => true, :y => 0.5 }
+ }
+ end.to raise_error(TypeError)
+ end
+
+ it "should correctly assign {}" do
+ @uri.query_values = {}
+ expect(@uri.query).to eq('')
+ end
+
+ it "should correctly assign nil" do
+ @uri.query_values = nil
+ expect(@uri.query).to eq(nil)
+ end
+
+ it "should correctly sort {'ab' => 'c', :ab => 'a', :a => 'x'}" do
+ @uri.query_values = {'ab' => 'c', :ab => 'a', :a => 'x'}
+ expect(@uri.query).to eq("a=x&ab=a&ab=c")
+ end
+
+ it "should correctly assign " +
+ "[['b', 'c'], ['b', 'a'], ['a', 'a']]" do
+ # Order can be guaranteed in this format, so preserve it.
+ @uri.query_values = [['b', 'c'], ['b', 'a'], ['a', 'a']]
+ expect(@uri.query).to eq("b=c&b=a&a=a")
+ end
+
+ it "should preserve query string order" do
+ query_string = (('a'..'z').to_a.reverse.map { |e| "#{e}=#{e}" }).join("&")
+ @uri.query = query_string
+ original_uri = @uri.to_s
+ @uri.query_values = @uri.query_values(Array)
+ expect(@uri.to_s).to eq(original_uri)
+ end
+
+ describe 'when a hash with mixed types is assigned to query_values' do
+ it 'should not raise an error' do
+ skip 'Issue #94'
+ expect { subject.query_values = { "page" => "1", :page => 2 } }.to_not raise_error
+ end
+ end
+end
+
+describe Addressable::URI, "when assigning path values" do
+ before do
+ @uri = Addressable::URI.new
+ end
+
+ it "should correctly assign paths containing colons" do
+ @uri.path = "acct:bob@sporkmonger.com"
+ expect(@uri.path).to eq("acct:bob@sporkmonger.com")
+ expect(@uri.normalize.to_str).to eq("acct%2Fbob@sporkmonger.com")
+ expect { @uri.to_s }.to raise_error(
+ Addressable::URI::InvalidURIError
+ )
+ end
+
+ it "should correctly assign paths containing colons" do
+ @uri.path = "/acct:bob@sporkmonger.com"
+ @uri.authority = "example.com"
+ expect(@uri.normalize.to_str).to eq("//example.com/acct:bob@sporkmonger.com")
+ end
+
+ it "should correctly assign paths containing colons" do
+ @uri.path = "acct:bob@sporkmonger.com"
+ @uri.scheme = "something"
+ expect(@uri.normalize.to_str).to eq("something:acct:bob@sporkmonger.com")
+ end
+
+ it "should not allow relative paths to be assigned on absolute URIs" do
+ expect do
+ @uri.scheme = "http"
+ @uri.host = "example.com"
+ @uri.path = "acct:bob@sporkmonger.com"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should not allow relative paths to be assigned on absolute URIs" do
+ expect do
+ @uri.path = "acct:bob@sporkmonger.com"
+ @uri.scheme = "http"
+ @uri.host = "example.com"
+ end.to raise_error(Addressable::URI::InvalidURIError)
+ end
+
+ it "should not allow relative paths to be assigned on absolute URIs" do
+ expect do
+ @uri.path = "uuid:0b3ecf60-3f93-11df-a9c3-001f5bfffe12"
+ @uri.scheme = "urn"
+ end.not_to raise_error
+ end
+end
+
+describe Addressable::URI, "when initializing a subclass of Addressable::URI" do
+ before do
+ @uri = Class.new(Addressable::URI).new
+ end
+
+ it "should have the same class after being parsed" do
+ expect(@uri.class).to eq(Addressable::URI.parse(@uri).class)
+ end
+
+ it "should have the same class as its duplicate" do
+ expect(@uri.class).to eq(@uri.dup.class)
+ end
+
+ it "should have the same class after being normalized" do
+ expect(@uri.class).to eq(@uri.normalize.class)
+ end
+
+ it "should have the same class after being merged" do
+ expect(@uri.class).to eq(@uri.merge(:path => 'path').class)
+ end
+
+ it "should have the same class after being joined" do
+ expect(@uri.class).to eq(@uri.join('path').class)
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/spec_helper.rb b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/spec_helper.rb
new file mode 100644
index 000000000..bd8e39588
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/spec_helper.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+require 'bundler/setup'
+require 'rspec/its'
+
+begin
+ require 'coveralls'
+ Coveralls.wear! do
+ add_filter "spec/"
+ add_filter "vendor/"
+ end
+rescue LoadError
+ warn "warning: coveralls gem not found; skipping Coveralls"
+ require 'simplecov'
+ SimpleCov.start do
+ add_filter "spec/"
+ add_filter "vendor/"
+ end
+end if Gem.loaded_specs.key?("simplecov")
+
+class TestHelper
+ def self.native_supported?
+ mri = RUBY_ENGINE == "ruby"
+ windows = RUBY_PLATFORM.include?("mingw")
+
+ mri && !windows
+ end
+end
+
+RSpec.configure do |config|
+ config.warnings = true
+ config.filter_run_when_matching :focus
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/clobber.rake b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/clobber.rake
new file mode 100644
index 000000000..a9e32b347
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/clobber.rake
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+
+desc "Remove all build products"
+task "clobber"
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/gem.rake b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/gem.rake
new file mode 100644
index 000000000..1f793baf3
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/gem.rake
@@ -0,0 +1,92 @@
+# frozen_string_literal: true
+
+require "rubygems/package_task"
+
+namespace :gem do
+ GEM_SPEC = Gem::Specification.new do |s|
+ s.name = PKG_NAME
+ s.version = PKG_VERSION
+ s.summary = PKG_SUMMARY
+ s.description = PKG_DESCRIPTION
+
+ s.files = PKG_FILES.to_a
+
+ s.extra_rdoc_files = %w( README.md )
+ s.rdoc_options.concat ["--main", "README.md"]
+
+ if !s.respond_to?(:add_development_dependency)
+ puts "Cannot build Gem with this version of RubyGems."
+ exit(1)
+ end
+
+ s.required_ruby_version = ">= 2.0"
+
+ s.add_runtime_dependency "public_suffix", ">= 2.0.2", "< 5.0"
+ s.add_development_dependency "bundler", ">= 1.0", "< 3.0"
+
+ s.require_path = "lib"
+
+ s.author = "Bob Aman"
+ s.email = "bob@sporkmonger.com"
+ s.homepage = "https://github.com/sporkmonger/addressable"
+ s.license = "Apache-2.0"
+ end
+
+ Gem::PackageTask.new(GEM_SPEC) do |p|
+ p.gem_spec = GEM_SPEC
+ p.need_tar = true
+ p.need_zip = true
+ end
+
+ desc "Generates .gemspec file"
+ task :gemspec do
+ spec_string = GEM_SPEC.to_ruby
+ File.open("#{GEM_SPEC.name}.gemspec", "w") do |file|
+ file.write spec_string
+ end
+ end
+
+ desc "Show information about the gem"
+ task :debug do
+ puts GEM_SPEC.to_ruby
+ end
+
+ desc "Install the gem"
+ task :install => ["clobber", "gem:package"] do
+ sh "#{SUDO} gem install --local pkg/#{GEM_SPEC.full_name}"
+ end
+
+ desc "Uninstall the gem"
+ task :uninstall do
+ installed_list = Gem.source_index.find_name(PKG_NAME)
+ if installed_list &&
+ (installed_list.collect { |s| s.version.to_s}.include?(PKG_VERSION))
+ sh(
+ "#{SUDO} gem uninstall --version '#{PKG_VERSION}' " +
+ "--ignore-dependencies --executables #{PKG_NAME}"
+ )
+ end
+ end
+
+ desc "Reinstall the gem"
+ task :reinstall => [:uninstall, :install]
+
+ desc "Package for release"
+ task :release => ["gem:package", "gem:gemspec"] do |t|
+ v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PKG_VERSION
+ pkg = "pkg/#{GEM_SPEC.full_name}"
+
+ changelog = File.open("CHANGELOG.md") { |file| file.read }
+
+ puts "Releasing #{PKG_NAME} v. #{PKG_VERSION}"
+ Rake::Task["git:tag:create"].invoke
+ end
+end
+
+desc "Alias to gem:package"
+task "gem" => "gem:package"
+
+task "gem:release" => "gem:gemspec"
+
+task "clobber" => ["gem:clobber_package"]
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/git.rake b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/git.rake
new file mode 100644
index 000000000..1238c8d21
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/git.rake
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+namespace :git do
+ namespace :tag do
+ desc "List tags from the Git repository"
+ task :list do
+ tags = `git tag -l`
+ tags.gsub!("\r", "")
+ tags = tags.split("\n").sort {|a, b| b <=> a }
+ puts tags.join("\n")
+ end
+
+ desc "Create a new tag in the Git repository"
+ task :create do
+ changelog = File.open("CHANGELOG.md", "r") { |file| file.read }
+ puts "-" * 80
+ puts changelog
+ puts "-" * 80
+ puts
+
+ v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
+ abort "Versions don't match #{v} vs #{PKG_VERSION}" if v != PKG_VERSION
+
+ git_status = `git status`
+ if git_status !~ /^nothing to commit/
+ abort "Working directory isn't clean."
+ end
+
+ tag = "#{PKG_NAME}-#{PKG_VERSION}"
+ msg = "Release #{PKG_NAME}-#{PKG_VERSION}"
+
+ existing_tags = `git tag -l #{PKG_NAME}-*`.split('\n')
+ if existing_tags.include?(tag)
+ warn("Tag already exists, deleting...")
+ unless system "git tag -d #{tag}"
+ abort "Tag deletion failed."
+ end
+ end
+ puts "Creating git tag '#{tag}'..."
+ unless system "git tag -a -m \"#{msg}\" #{tag}"
+ abort "Tag creation failed."
+ end
+ end
+ end
+end
+
+task "gem:release" => "git:tag:create"
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/metrics.rake b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/metrics.rake
new file mode 100644
index 000000000..107cc2442
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/metrics.rake
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+namespace :metrics do
+ task :lines do
+ lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
+ for file_name in FileList["lib/**/*.rb"]
+ f = File.open(file_name)
+ while line = f.gets
+ lines += 1
+ next if line =~ /^\s*$/
+ next if line =~ /^\s*#/
+ codelines += 1
+ end
+ puts "L: #{sprintf("%4d", lines)}, " +
+ "LOC #{sprintf("%4d", codelines)} | #{file_name}"
+ total_lines += lines
+ total_codelines += codelines
+
+ lines, codelines = 0, 0
+ end
+
+ puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/profile.rake b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/profile.rake
new file mode 100644
index 000000000..b697d489d
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/profile.rake
@@ -0,0 +1,72 @@
+# frozen_string_literal: true
+
+namespace :profile do
+ desc "Profile Template match memory allocations"
+ task :template_match_memory do
+ require "memory_profiler"
+ require "addressable/template"
+
+ start_at = Time.now.to_f
+ template = Addressable::Template.new("http://example.com/{?one,two,three}")
+ report = MemoryProfiler.report do
+ 30_000.times do
+ template.match(
+ "http://example.com/?one=one&two=floo&three=me"
+ )
+ end
+ end
+ end_at = Time.now.to_f
+ print_options = { scale_bytes: true, normalize_paths: true }
+ puts "\n\n"
+
+ if ENV["CI"]
+ report.pretty_print(print_options)
+ else
+ t_allocated = report.scale_bytes(report.total_allocated_memsize)
+ t_retained = report.scale_bytes(report.total_retained_memsize)
+
+ puts "Total allocated: #{t_allocated} (#{report.total_allocated} objects)"
+ puts "Total retained: #{t_retained} (#{report.total_retained} objects)"
+ puts "Took #{end_at - start_at} seconds"
+
+ FileUtils.mkdir_p("tmp")
+ report.pretty_print(to_file: "tmp/memprof.txt", **print_options)
+ end
+ end
+
+ desc "Profile URI parse memory allocations"
+ task :memory do
+ require "memory_profiler"
+ require "addressable/uri"
+ if ENV["IDNA_MODE"] == "pure"
+ Addressable.send(:remove_const, :IDNA)
+ load "addressable/idna/pure.rb"
+ end
+
+ start_at = Time.now.to_f
+ report = MemoryProfiler.report do
+ 30_000.times do
+ Addressable::URI.parse(
+ "http://google.com/stuff/../?with_lots=of¶ms=asdff#!stuff"
+ ).normalize
+ end
+ end
+ end_at = Time.now.to_f
+ print_options = { scale_bytes: true, normalize_paths: true }
+ puts "\n\n"
+
+ if ENV["CI"]
+ report.pretty_print(**print_options)
+ else
+ t_allocated = report.scale_bytes(report.total_allocated_memsize)
+ t_retained = report.scale_bytes(report.total_retained_memsize)
+
+ puts "Total allocated: #{t_allocated} (#{report.total_allocated} objects)"
+ puts "Total retained: #{t_retained} (#{report.total_retained} objects)"
+ puts "Took #{end_at - start_at} seconds"
+
+ FileUtils.mkdir_p("tmp")
+ report.pretty_print(to_file: "tmp/memprof.txt", **print_options)
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/rspec.rake b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/rspec.rake
new file mode 100644
index 000000000..e3d9f014c
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/rspec.rake
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+require "rspec/core/rake_task"
+
+namespace :spec do
+ RSpec::Core::RakeTask.new(:simplecov) do |t|
+ t.pattern = FileList['spec/**/*_spec.rb']
+ t.rspec_opts = %w[--color --format documentation] unless ENV["CI"]
+ end
+
+ namespace :simplecov do
+ desc "Browse the code coverage report."
+ task :browse => "spec:simplecov" do
+ require "launchy"
+ Launchy.open("coverage/index.html")
+ end
+ end
+end
+
+desc "Alias to spec:simplecov"
+task "spec" => "spec:simplecov"
+
+task "clobber" => ["spec:clobber_simplecov"]
diff --git a/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/yard.rake b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/yard.rake
new file mode 100644
index 000000000..515f96030
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/yard.rake
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require "rake"
+
+begin
+ require "yard"
+ require "yard/rake/yardoc_task"
+
+ namespace :doc do
+ desc "Generate Yardoc documentation"
+ YARD::Rake::YardocTask.new do |yardoc|
+ yardoc.name = "yard"
+ yardoc.options = ["--verbose", "--markup", "markdown"]
+ yardoc.files = FileList[
+ "lib/**/*.rb", "ext/**/*.c",
+ "README.md", "CHANGELOG.md", "LICENSE.txt"
+ ].exclude(/idna/)
+ end
+ end
+
+ task "clobber" => ["doc:clobber_yard"]
+
+ desc "Alias to doc:yard"
+ task "doc" => "doc:yard"
+rescue LoadError
+ # If yard isn't available, it's not the end of the world
+ desc "Alias to doc:rdoc"
+ task "doc" => "doc:rdoc"
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/LICENSE.MIT b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/LICENSE.MIT
new file mode 100644
index 000000000..7c483cf2c
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/LICENSE.MIT
@@ -0,0 +1,20 @@
+Copyright (c) 2011-2013 Peter Zotov
+
+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.
diff --git a/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/README.YARD.md b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/README.YARD.md
new file mode 100644
index 000000000..d2616c3d8
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/README.YARD.md
@@ -0,0 +1,12 @@
+{AST} is a library for manipulating abstract syntax trees.
+
+It embraces immutability; each AST node is inherently frozen at
+creation, and updating a child node requires recreating that node
+and its every parent, recursively.
+
+This is a design choice. It does create some pressure on
+garbage collector, but completely eliminates all concurrency
+and aliasing problems.
+
+See also {AST::Node}, {AST::Processor::Mixin} and {AST::Sexp} for
+additional recommendations and design patterns.
diff --git a/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast.rb b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast.rb
new file mode 100644
index 000000000..acbcf741d
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast.rb
@@ -0,0 +1,17 @@
+# {AST} is a library for manipulating abstract syntax trees.
+#
+# It embraces immutability; each AST node is inherently frozen at
+# creation, and updating a child node requires recreating that node
+# and its every parent, recursively.
+# This is a design choice. It does create some pressure on
+# garbage collector, but completely eliminates all concurrency
+# and aliasing problems.
+#
+# See also {AST::Node}, {AST::Processor::Mixin} and {AST::Sexp} for
+# additional recommendations and design patterns.
+#
+module AST
+ require 'ast/node'
+ require 'ast/processor'
+ require 'ast/sexp'
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/node.rb b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/node.rb
new file mode 100644
index 000000000..432d865a4
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/node.rb
@@ -0,0 +1,268 @@
+# frozen_string_literal: true
+
+module AST
+ # Node is an immutable class, instances of which represent abstract
+ # syntax tree nodes. It combines semantic information (i.e. anything
+ # that affects the algorithmic properties of a program) with
+ # meta-information (line numbers or compiler intermediates).
+ #
+ # Notes on inheritance
+ # ====================
+ #
+ # The distinction between semantics and metadata is important. Complete
+ # semantic information should be contained within just the {#type} and
+ # {#children} of a Node instance; in other words, if an AST was to be
+ # stripped of all meta-information, it should remain a valid AST which
+ # could be successfully processed to yield a result with the same
+ # algorithmic properties.
+ #
+ # Thus, Node should never be inherited in order to define methods which
+ # affect or return semantic information, such as getters for `class_name`,
+ # `superclass` and `body` in the case of a hypothetical `ClassNode`. The
+ # correct solution is to use a generic Node with a {#type} of `:class`
+ # and three children. See also {Processor} for tips on working with such
+ # ASTs.
+ #
+ # On the other hand, Node can and should be inherited to define
+ # application-specific metadata (see also {#initialize}) or customize the
+ # printing format. It is expected that an application would have one or two
+ # such classes and use them across the entire codebase.
+ #
+ # The rationale for this pattern is extensibility and maintainability.
+ # Unlike static ones, dynamic languages do not require the presence of a
+ # predefined, rigid structure, nor does it improve dispatch efficiency,
+ # and while such a structure can certainly be defined, it does not add
+ # any value but incurs a maintaining cost.
+ # For example, extending the AST even with a transformation-local
+ # temporary node type requires making globally visible changes to
+ # the codebase.
+ #
+ class Node
+ # Returns the type of this node.
+ # @return [Symbol]
+ attr_reader :type
+
+ # Returns the children of this node.
+ # The returned value is frozen.
+ # The to_a alias is useful for decomposing nodes concisely.
+ # For example:
+ #
+ # node = s(:gasgn, :$foo, s(:integer, 1))
+ # var_name, value = *node
+ # p var_name # => :$foo
+ # p value # => (integer 1)
+ #
+ # @return [Array]
+ attr_reader :children
+ alias to_a children
+
+ # Returns the precomputed hash value for this node
+ # @return [Fixnum]
+ attr_reader :hash
+
+ # Constructs a new instance of Node.
+ #
+ # The arguments `type` and `children` are converted with `to_sym` and
+ # `to_a` respectively. Additionally, the result of converting `children`
+ # is frozen. While mutating the arguments is generally considered harmful,
+ # the most common case is to pass an array literal to the constructor. If
+ # your code does not expect the argument to be frozen, use `#dup`.
+ #
+ # The `properties` hash is passed to {#assign_properties}.
+ def initialize(type, children=[], properties={})
+ @type, @children = type.to_sym, children.to_a.freeze
+
+ assign_properties(properties)
+
+ @hash = [@type, @children, self.class].hash
+
+ freeze
+ end
+
+ # Test if other object is equal to
+ # @param [Object] other
+ # @return [Boolean]
+ def eql?(other)
+ self.class.eql?(other.class) &&
+ @type.eql?(other.type) &&
+ @children.eql?(other.children)
+ end
+
+ # By default, each entry in the `properties` hash is assigned to
+ # an instance variable in this instance of Node. A subclass should define
+ # attribute readers for such variables. The values passed in the hash
+ # are not frozen or whitelisted; such behavior can also be implemented
+ # by subclassing Node and overriding this method.
+ #
+ # @return [nil]
+ def assign_properties(properties)
+ properties.each do |name, value|
+ instance_variable_set :"@#{name}", value
+ end
+
+ nil
+ end
+ protected :assign_properties
+
+ alias :original_dup :dup
+ private :original_dup
+
+ # Nodes are already frozen, so there is no harm in returning the
+ # current node as opposed to initializing from scratch and freezing
+ # another one.
+ #
+ # @return self
+ def dup
+ self
+ end
+ alias :clone :dup
+
+ # Returns a new instance of Node where non-nil arguments replace the
+ # corresponding fields of `self`.
+ #
+ # For example, `Node.new(:foo, [ 1, 2 ]).updated(:bar)` would yield
+ # `(bar 1 2)`, and `Node.new(:foo, [ 1, 2 ]).updated(nil, [])` would
+ # yield `(foo)`.
+ #
+ # If the resulting node would be identical to `self`, does nothing.
+ #
+ # @param [Symbol, nil] type
+ # @param [Array, nil] children
+ # @param [Hash, nil] properties
+ # @return [AST::Node]
+ def updated(type=nil, children=nil, properties=nil)
+ new_type = type || @type
+ new_children = children || @children
+ new_properties = properties || {}
+
+ if @type == new_type &&
+ @children == new_children &&
+ properties.nil?
+ self
+ else
+ copy = original_dup
+ copy.send :initialize, new_type, new_children, new_properties
+ copy
+ end
+ end
+
+ # Compares `self` to `other`, possibly converting with `to_ast`. Only
+ # `type` and `children` are compared; metadata is deliberately ignored.
+ #
+ # @return [Boolean]
+ def ==(other)
+ if equal?(other)
+ true
+ elsif other.respond_to? :to_ast
+ other = other.to_ast
+ other.type == self.type &&
+ other.children == self.children
+ else
+ false
+ end
+ end
+
+ # Concatenates `array` with `children` and returns the resulting node.
+ #
+ # @return [AST::Node]
+ def concat(array)
+ updated(nil, @children + array.to_a)
+ end
+
+ alias + concat
+
+ # Appends `element` to `children` and returns the resulting node.
+ #
+ # @return [AST::Node]
+ def append(element)
+ updated(nil, @children + [element])
+ end
+
+ alias << append
+
+ # Converts `self` to a pretty-printed s-expression.
+ #
+ # @param [Integer] indent Base indentation level.
+ # @return [String]
+ def to_sexp(indent=0)
+ indented = " " * indent
+ sexp = "#{indented}(#{fancy_type}"
+
+ children.each do |child|
+ if child.is_a?(Node)
+ sexp += "\n#{child.to_sexp(indent + 1)}"
+ else
+ sexp += " #{child.inspect}"
+ end
+ end
+
+ sexp += ")"
+
+ sexp
+ end
+
+ alias to_s to_sexp
+
+ # Converts `self` to a s-expression ruby string.
+ # The code return will recreate the node, using the sexp module s()
+ #
+ # @param [Integer] indent Base indentation level.
+ # @return [String]
+ def inspect(indent=0)
+ indented = " " * indent
+ sexp = "#{indented}s(:#{@type}"
+
+ children.each do |child|
+ if child.is_a?(Node)
+ sexp += ",\n#{child.inspect(indent + 1)}"
+ else
+ sexp += ", #{child.inspect}"
+ end
+ end
+
+ sexp += ")"
+
+ sexp
+ end
+
+ # @return [AST::Node] self
+ def to_ast
+ self
+ end
+
+ # Converts `self` to an Array where the first element is the type as a Symbol,
+ # and subsequent elements are the same representation of its children.
+ #
+ # @return [Array]
+ def to_sexp_array
+ children_sexp_arrs = children.map do |child|
+ if child.is_a?(Node)
+ child.to_sexp_array
+ else
+ child
+ end
+ end
+
+ [type, *children_sexp_arrs]
+ end
+
+ # Enables matching for Node, where type is the first element
+ # and the children are remaining items.
+ #
+ # @return [Array]
+ def deconstruct
+ [type, *children]
+ end
+
+ protected
+
+ # Returns `@type` with all underscores replaced by dashes. This allows
+ # to write symbol literals without quotes in Ruby sources and yet have
+ # nicely looking s-expressions.
+ #
+ # @return [String]
+ def fancy_type
+ @type.to_s.gsub('_', '-')
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/processor.rb b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/processor.rb
new file mode 100644
index 000000000..f1910c515
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/processor.rb
@@ -0,0 +1,12 @@
+module AST
+ # This class includes {AST::Processor::Mixin}; however, it is
+ # deprecated, since the module defines all of the behaviors that
+ # the processor includes. Any new libraries should use
+ # {AST::Processor::Mixin} instead of subclassing this.
+ #
+ # @deprecated Use {AST::Processor::Mixin} instead.
+ class Processor
+ require 'ast/processor/mixin'
+ include Mixin
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/processor/mixin.rb b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/processor/mixin.rb
new file mode 100644
index 000000000..6febec879
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/processor/mixin.rb
@@ -0,0 +1,288 @@
+module AST
+ class Processor
+ # The processor module is a module which helps transforming one
+ # AST into another. In a nutshell, the {#process} method accepts
+ # a {Node} and dispatches it to a handler corresponding to its
+ # type, and returns a (possibly) updated variant of the node.
+ #
+ # The processor module has a set of associated design patterns.
+ # They are best explained with a concrete example. Let's define a
+ # simple arithmetic language and an AST format for it:
+ #
+ # Terminals (AST nodes which do not have other AST nodes inside):
+ #
+ # * `(integer )`,
+ #
+ # Nonterminals (AST nodes with other nodes as children):
+ #
+ # * `(add )`,
+ # * `(multiply )`,
+ # * `(divide )`,
+ # * `(negate )`,
+ # * `(store )`: stores value of ``
+ # into a variable named ``,
+ # * `(load )`: loads value of a variable named
+ # ``,
+ # * `(each ...)`: computes each of the ``s and
+ # prints the result.
+ #
+ # All AST nodes have the same Ruby class, and therefore they don't
+ # know how to traverse themselves. (A solution which dynamically
+ # checks the type of children is possible, but is slow and
+ # error-prone.) So, a class including the module which knows how
+ # to traverse the entire tree should be defined. Such classes
+ # have a handler for each nonterminal node which recursively
+ # processes children nodes:
+ #
+ # require 'ast'
+ #
+ # class ArithmeticsProcessor
+ # include AST::Processor::Mixin
+ # # This method traverses any binary operators such as (add)
+ # # or (multiply).
+ # def process_binary_op(node)
+ # # Children aren't decomposed automatically; it is
+ # # suggested to use Ruby multiple assignment expansion,
+ # # as it is very convenient here.
+ # left_expr, right_expr = *node
+ #
+ # # AST::Node#updated won't change node type if nil is
+ # # passed as a first argument, which allows to reuse the
+ # # same handler for multiple node types using `alias'
+ # # (below).
+ # node.updated(nil, [
+ # process(left_expr),
+ # process(right_expr)
+ # ])
+ # end
+ # alias_method :on_add, :process_binary_op
+ # alias_method :on_multiply, :process_binary_op
+ # alias_method :on_divide, :process_binary_op
+ #
+ # def on_negate(node)
+ # # It is also possible to use #process_all for more
+ # # compact code if every child is a Node.
+ # node.updated(nil, process_all(node))
+ # end
+ #
+ # def on_store(node)
+ # expr, variable_name = *node
+ #
+ # # Note that variable_name is not a Node and thus isn't
+ # # passed to #process.
+ # node.updated(nil, [
+ # process(expr),
+ # variable_name
+ # ])
+ # end
+ #
+ # # (load) is effectively a terminal node, and so it does
+ # # not need an explicit handler, as the following is the
+ # # default behavior. Essentially, for any nodes that don't
+ # # have a defined handler, the node remains unchanged.
+ # def on_load(node)
+ # nil
+ # end
+ #
+ # def on_each(node)
+ # node.updated(nil, process_all(node))
+ # end
+ # end
+ #
+ # Let's test our ArithmeticsProcessor:
+ #
+ # include AST::Sexp
+ # expr = s(:add, s(:integer, 2), s(:integer, 2))
+ #
+ # p ArithmeticsProcessor.new.process(expr) == expr # => true
+ #
+ # As expected, it does not change anything at all. This isn't
+ # actually very useful, so let's now define a Calculator, which
+ # will compute the expression values:
+ #
+ # # This Processor folds nonterminal nodes and returns an
+ # # (integer) terminal node.
+ # class ArithmeticsCalculator < ArithmeticsProcessor
+ # def compute_op(node)
+ # # First, node children are processed and then unpacked
+ # # to local variables.
+ # nodes = process_all(node)
+ #
+ # if nodes.all? { |node| node.type == :integer }
+ # # If each of those nodes represents a literal, we can
+ # # fold this node!
+ # values = nodes.map { |node| node.children.first }
+ # AST::Node.new(:integer, [
+ # yield(values)
+ # ])
+ # else
+ # # Otherwise, we can just leave the current node in the
+ # # tree and only update it with processed children
+ # # nodes, which can be partially folded.
+ # node.updated(nil, nodes)
+ # end
+ # end
+ #
+ # def on_add(node)
+ # compute_op(node) { |left, right| left + right }
+ # end
+ #
+ # def on_multiply(node)
+ # compute_op(node) { |left, right| left * right }
+ # end
+ # end
+ #
+ # Let's check:
+ #
+ # p ArithmeticsCalculator.new.process(expr) # => (integer 4)
+ #
+ # Excellent, the calculator works! Now, a careful reader could
+ # notice that the ArithmeticsCalculator does not know how to
+ # divide numbers. What if we pass an expression with division to
+ # it?
+ #
+ # expr_with_division = \
+ # s(:add,
+ # s(:integer, 1),
+ # s(:divide,
+ # s(:add, s(:integer, 8), s(:integer, 4)),
+ # s(:integer, 3))) # 1 + (8 + 4) / 3
+ #
+ # folded_expr_with_division = ArithmeticsCalculator.new.process(expr_with_division)
+ # p folded_expr_with_division
+ # # => (add
+ # # (integer 1)
+ # # (divide
+ # # (integer 12)
+ # # (integer 3)))
+ #
+ # As you can see, the expression was folded _partially_: the inner
+ # `(add)` node which could be computed was folded to
+ # `(integer 12)`, the `(divide)` node is left as-is because there
+ # is no computing handler for it, and the root `(add)` node was
+ # also left as it is because some of its children were not
+ # literals.
+ #
+ # Note that this partial folding is only possible because the
+ # _data_ format, i.e. the format in which the computed values of
+ # the nodes are represented, is the same as the AST itself.
+ #
+ # Let's extend our ArithmeticsCalculator class further.
+ #
+ # class ArithmeticsCalculator
+ # def on_divide(node)
+ # compute_op(node) { |left, right| left / right }
+ # end
+ #
+ # def on_negate(node)
+ # # Note how #compute_op works regardless of the operator
+ # # arity.
+ # compute_op(node) { |value| -value }
+ # end
+ # end
+ #
+ # Now, let's apply our renewed ArithmeticsCalculator to a partial
+ # result of previous evaluation:
+ #
+ # p ArithmeticsCalculator.new.process(expr_with_division) # => (integer 5)
+ #
+ # Five! Excellent. This is also pretty much how CRuby 1.8 executed
+ # its programs.
+ #
+ # Now, let's do some automated bug searching. Division by zero is
+ # an error, right? So if we could detect that someone has divided
+ # by zero before the program is even run, that could save some
+ # debugging time.
+ #
+ # class DivisionByZeroVerifier < ArithmeticsProcessor
+ # class VerificationFailure < Exception; end
+ #
+ # def on_divide(node)
+ # # You need to process the children to handle nested divisions
+ # # such as:
+ # # (divide
+ # # (integer 1)
+ # # (divide (integer 1) (integer 0))
+ # left, right = process_all(node)
+ #
+ # if right.type == :integer &&
+ # right.children.first == 0
+ # raise VerificationFailure, "Ouch! This code divides by zero."
+ # end
+ # end
+ #
+ # def divides_by_zero?(ast)
+ # process(ast)
+ # false
+ # rescue VerificationFailure
+ # true
+ # end
+ # end
+ #
+ # nice_expr = \
+ # s(:divide,
+ # s(:add, s(:integer, 10), s(:integer, 2)),
+ # s(:integer, 4))
+ #
+ # p DivisionByZeroVerifier.new.divides_by_zero?(nice_expr)
+ # # => false. Good.
+ #
+ # bad_expr = \
+ # s(:add, s(:integer, 10),
+ # s(:divide, s(:integer, 1), s(:integer, 0)))
+ #
+ # p DivisionByZeroVerifier.new.divides_by_zero?(bad_expr)
+ # # => true. WHOOPS. DO NOT RUN THIS.
+ #
+ # Of course, this won't detect more complex cases... unless you
+ # use some partial evaluation before! The possibilites are
+ # endless. Have fun.
+ module Mixin
+ # Dispatches `node`. If a node has type `:foo`, then a handler
+ # named `on_foo` is invoked with one argument, the `node`; if
+ # there isn't such a handler, {#handler_missing} is invoked
+ # with the same argument.
+ #
+ # If the handler returns `nil`, `node` is returned; otherwise,
+ # the return value of the handler is passed along.
+ #
+ # @param [AST::Node, nil] node
+ # @return [AST::Node, nil]
+ def process(node)
+ return if node.nil?
+
+ node = node.to_ast
+
+ # Invoke a specific handler
+ on_handler = :"on_#{node.type}"
+ if respond_to? on_handler
+ new_node = send on_handler, node
+ else
+ new_node = handler_missing(node)
+ end
+
+ node = new_node if new_node
+
+ node
+ end
+
+ # {#process}es each node from `nodes` and returns an array of
+ # results.
+ #
+ # @param [Array] nodes
+ # @return [Array]
+ def process_all(nodes)
+ nodes.to_a.map do |node|
+ process node
+ end
+ end
+
+ # Default handler. Does nothing.
+ #
+ # @param [AST::Node] node
+ # @return [AST::Node, nil]
+ def handler_missing(node)
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/sexp.rb b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/sexp.rb
new file mode 100644
index 000000000..9b03d26c8
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/ast-2.4.2/lib/ast/sexp.rb
@@ -0,0 +1,30 @@
+module AST
+ # This simple module is very useful in the cases where one needs
+ # to define deeply nested ASTs from Ruby code, for example, in
+ # tests. It should be used like this:
+ #
+ # describe YourLanguage::AST do
+ # include Sexp
+ #
+ # it "should correctly parse expressions" do
+ # YourLanguage.parse("1 + 2 * 3").should ==
+ # s(:add,
+ # s(:integer, 1),
+ # s(:multiply,
+ # s(:integer, 2),
+ # s(:integer, 3)))
+ # end
+ # end
+ #
+ # This way the amount of boilerplate code is greatly reduced.
+ module Sexp
+ # Creates a {Node} with type `type` and children `children`.
+ # Note that the resulting node is of the type AST::Node and not a
+ # subclass.
+ # This would not pose a problem with comparisons, as {Node#==}
+ # ignores metadata.
+ def s(type, *children)
+ Node.new(type, children)
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack.rb b/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack.rb
new file mode 100644
index 000000000..a211d2a13
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack.rb
@@ -0,0 +1,7 @@
+module Crack
+ class ParseError < StandardError; end
+end
+
+require 'crack/util'
+require 'crack/json'
+require 'crack/xml'
diff --git a/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/json.rb b/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/json.rb
new file mode 100644
index 000000000..1a27ac725
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/json.rb
@@ -0,0 +1,98 @@
+# Copyright (c) 2004-2008 David Heinemeier Hansson
+# 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.
+
+require 'strscan'
+
+module Crack
+ class JSON
+ def self.parser_exceptions
+ @parser_exceptions ||= [ArgumentError, Psych::SyntaxError]
+ end
+
+ def self.parse(json)
+ yaml = unescape(convert_json_to_yaml(json))
+ YAML.safe_load(yaml, [Regexp, Date, Time])
+ rescue *parser_exceptions
+ raise ParseError, "Invalid JSON string"
+ rescue Psych::DisallowedClass
+ yaml
+ end
+
+ protected
+ def self.unescape(str)
+ # Force the encoding to be UTF-8 so we can perform regular expressions
+ # on 1.9.2 without blowing up.
+ # see http://stackoverflow.com/questions/1224204/ruby-mechanize-getting-force-encoding-exception for a similar issue
+ str.force_encoding('UTF-8') if defined?(Encoding) && str.respond_to?(:force_encoding)
+ str.gsub(/\\u0000/, "").gsub(/\\[u|U]([0-9a-fA-F]{4})/) { [$1.hex].pack("U") }
+ end
+
+ # matches YAML-formatted dates
+ DATE_REGEX = /^\d{4}-\d{2}-\d{2}$|^\d{4}-\d{1,2}-\d{1,2}[T \t]+\d{1,2}:\d{2}:\d{2}(\.[0-9]*)?(([ \t]*)Z|[-+]\d{2}?(:\d{2})?)$/
+
+ # Ensure that ":" and "," are always followed by a space
+ def self.convert_json_to_yaml(json) #:nodoc:
+ json = String.new(json) #can't modify a frozen string
+ scanner, quoting, marks, pos, date_starts, date_ends = StringScanner.new(json), false, [], nil, [], []
+ while scanner.scan_until(/(\\['"]|['":,\/\\]|\\.)/)
+ case char = scanner[1]
+ when '"', "'"
+ if !quoting
+ quoting = char
+ pos = scanner.pos
+ elsif quoting == char
+ if json[pos..scanner.pos-2] =~ DATE_REGEX
+ # found a date, track the exact positions of the quotes so we can remove them later.
+ # oh, and increment them for each current mark, each one is an extra padded space that bumps
+ # the position in the final YAML output
+ total_marks = marks.size
+ date_starts << pos+total_marks
+ date_ends << scanner.pos+total_marks
+ end
+ quoting = false
+ end
+ when "/"
+ if !quoting
+ json[scanner.pos - 1] = "!ruby/regexp /"
+ scanner.pos += 13
+ scanner.scan_until(/\/[mix]*/)
+ end
+ when ":",","
+ marks << scanner.pos - 1 unless quoting
+ when "\\"
+ scanner.skip(/\\/)
+ end
+ end
+
+ if marks.empty?
+ json.gsub(/\\\//, '/')
+ else
+ left_pos = marks.clone.unshift(-1)
+ right_pos = marks << json.length
+ output = []
+ left_pos.each_with_index do |left, i|
+ output << json[left.succ..right_pos[i]]
+ end
+ output = output * " "
+
+ format_dates(output, date_starts, date_ends)
+ output.gsub!(/\\\//, '/')
+ output
+ end
+ end
+
+ def self.format_dates(output, date_starts, date_ends)
+ if YAML.constants.include?('Syck')
+ (date_starts + date_ends).each { |i| output[i-1] = ' ' }
+ else
+ extra_chars_to_be_added = 0
+ date_starts.each do |i|
+ output[i-2+extra_chars_to_be_added] = '!!timestamp '
+ extra_chars_to_be_added += 10
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/util.rb b/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/util.rb
new file mode 100644
index 000000000..60c944283
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/util.rb
@@ -0,0 +1,17 @@
+module Crack
+ module Util
+ def snake_case(str)
+ return str.downcase if str =~ /^[A-Z]+$/
+ str.gsub(/([A-Z]+)(?=[A-Z][a-z]?)|\B[A-Z]/, '_\&') =~ /_*(.*)/
+ return $+.downcase
+ end
+
+ def to_xml_attributes(hash)
+ hash.map do |k,v|
+ %{#{Crack::Util.snake_case(k.to_s).sub(/^(.{1,1})/) { |m| m.downcase }}="#{v.to_s.gsub('"', '"')}"}
+ end.join(' ')
+ end
+
+ extend self
+ end
+end
\ No newline at end of file
diff --git a/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/version.rb b/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/version.rb
new file mode 100644
index 000000000..1991c2419
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/version.rb
@@ -0,0 +1,3 @@
+module Crack
+ VERSION = "0.4.5"
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/xml.rb b/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/xml.rb
new file mode 100644
index 000000000..698568918
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/crack-0.4.5/lib/crack/xml.rb
@@ -0,0 +1,238 @@
+require 'rexml/parsers/streamparser'
+require 'rexml/parsers/baseparser'
+require 'rexml/light/node'
+require 'rexml/text'
+require "rexml/document"
+require 'date'
+require 'time'
+require 'yaml'
+require 'bigdecimal'
+
+# The Reason behind redefining the String Class for this specific plugin is to
+# avoid the dynamic insertion of stuff on it (see version previous to this commit).
+# Doing that disables the possibility of efectuating a dump on the structure. This way it goes.
+class REXMLUtiliyNodeString < String
+ attr_accessor :attributes
+end
+
+# This is a slighly modified version of the XMLUtilityNode from
+# http://merb.devjavu.com/projects/merb/ticket/95 (has.sox@gmail.com)
+# It's mainly just adding vowels, as I ht cd wth n vwls :)
+# This represents the hard part of the work, all I did was change the
+# underlying parser.
+class REXMLUtilityNode #:nodoc:
+ attr_accessor :name, :attributes, :children, :type
+
+ def self.typecasts
+ @@typecasts
+ end
+
+ def self.typecasts=(obj)
+ @@typecasts = obj
+ end
+
+ def self.available_typecasts
+ @@available_typecasts
+ end
+
+ def self.available_typecasts=(obj)
+ @@available_typecasts = obj
+ end
+
+ self.typecasts = {}
+ self.typecasts["integer"] = lambda{|v| v.nil? ? nil : v.to_i}
+ self.typecasts["boolean"] = lambda{|v| v.nil? ? nil : (v.strip != "false")}
+ self.typecasts["datetime"] = lambda{|v| v.nil? ? nil : Time.parse(v).utc}
+ self.typecasts["date"] = lambda{|v| v.nil? ? nil : Date.parse(v)}
+ self.typecasts["dateTime"] = lambda{|v| v.nil? ? nil : Time.parse(v).utc}
+ self.typecasts["decimal"] = lambda{|v| v.nil? ? nil : BigDecimal(v.to_s)}
+ self.typecasts["double"] = lambda{|v| v.nil? ? nil : v.to_f}
+ self.typecasts["float"] = lambda{|v| v.nil? ? nil : v.to_f}
+ self.typecasts["string"] = lambda{|v| v.to_s}
+ self.typecasts["base64Binary"] = lambda{|v| v.unpack('m').first }
+
+ self.available_typecasts = self.typecasts.keys
+
+ def initialize(name, normalized_attributes = {})
+
+ # unnormalize attribute values
+ attributes = Hash[* normalized_attributes.map { |key, value|
+ [ key, unnormalize_xml_entities(value) ]
+ }.flatten]
+
+ @name = name.tr("-", "_")
+ # leave the type alone if we don't know what it is
+ @type = self.class.available_typecasts.include?(attributes["type"]) ? attributes.delete("type") : attributes["type"]
+
+ @nil_element = attributes.delete("nil") == "true"
+ @attributes = undasherize_keys(attributes)
+ @children = []
+ @text = false
+ end
+
+ def add_node(node)
+ @text = true if node.is_a? String
+ @children << node
+ end
+
+ def to_hash
+ # ACG: Added a check here to prevent an exception a type == "file" tag has nodes within it
+ if @type == "file" and (@children.first.nil? or @children.first.is_a?(String))
+ f = StringIO.new((@children.first || '').unpack('m').first)
+ class << f
+ attr_accessor :original_filename, :content_type
+ end
+ f.original_filename = attributes['name'] || 'untitled'
+ f.content_type = attributes['content_type'] || 'application/octet-stream'
+ return {name => f}
+ end
+
+ if @text
+ t = typecast_value( unnormalize_xml_entities( inner_html ) )
+ if t.is_a?(String)
+ t = REXMLUtiliyNodeString.new(t)
+ t.attributes = attributes
+ end
+ return { name => t }
+ else
+ #change repeating groups into an array
+ groups = @children.inject({}) { |s,e| (s[e.name] ||= []) << e; s }
+
+ out = nil
+ if @type == "array"
+ out = []
+ groups.each do |k, v|
+ if v.size == 1
+ out << v.first.to_hash.entries.first.last
+ else
+ out << v.map{|e| e.to_hash[k]}
+ end
+ end
+ out = out.flatten
+
+ else # If Hash
+ out = {}
+ groups.each do |k,v|
+ if v.size == 1
+ out.merge!(v.first)
+ else
+ out.merge!( k => v.map{|e| e.to_hash[k]})
+ end
+ end
+ out.merge! attributes unless attributes.empty?
+ out = out.empty? ? nil : out
+ end
+
+ if @type && out.nil?
+ { name => typecast_value(out) }
+ else
+ { name => out }
+ end
+ end
+ end
+
+ # Typecasts a value based upon its type. For instance, if
+ # +node+ has #type == "integer",
+ # {{[node.typecast_value("12") #=> 12]}}
+ #
+ # @param value The value that is being typecast.
+ #
+ # @details [:type options]
+ # "integer"::
+ # converts +value+ to an integer with #to_i
+ # "boolean"::
+ # checks whether +value+, after removing spaces, is the literal
+ # "true"
+ # "datetime"::
+ # Parses +value+ using Time.parse, and returns a UTC Time
+ # "date"::
+ # Parses +value+ using Date.parse
+ #
+ # @return
+ # The result of typecasting +value+.
+ #
+ # @note
+ # If +self+ does not have a "type" key, or if it's not one of the
+ # options specified above, the raw +value+ will be returned.
+ def typecast_value(value)
+ return value unless @type
+ proc = self.class.typecasts[@type]
+ proc.nil? ? value : proc.call(value)
+ end
+
+ # Take keys of the form foo-bar and convert them to foo_bar
+ def undasherize_keys(params)
+ params.keys.each do |key, value|
+ params[key.tr("-", "_")] = params.delete(key)
+ end
+ params
+ end
+
+ # Get the inner_html of the REXML node.
+ def inner_html
+ @children.join
+ end
+
+ # Converts the node into a readable HTML node.
+ #
+ # @return The HTML node in text form.
+ def to_html
+ attributes.merge!(:type => @type ) if @type
+ "<#{name}#{Crack::Util.to_xml_attributes(attributes)}>#{@nil_element ? '' : inner_html}#{name}>"
+ end
+
+ # @alias #to_html #to_s
+ def to_s
+ to_html
+ end
+
+ private
+
+ def unnormalize_xml_entities value
+ REXML::Text.unnormalize(value)
+ end
+end
+
+module Crack
+ class REXMLParser
+ def self.parse(xml)
+ stack = []
+ parser = REXML::Parsers::BaseParser.new(xml)
+
+ while true
+ event = parser.pull
+ case event[0]
+ when :end_document
+ break
+ when :end_doctype, :start_doctype
+ # do nothing
+ when :start_element
+ stack.push REXMLUtilityNode.new(event[1], event[2])
+ when :end_element
+ if stack.size > 1
+ temp = stack.pop
+ stack.last.add_node(temp)
+ end
+ when :text, :cdata
+ stack.last.add_node(event[1]) unless event[1].strip.length == 0 || stack.empty?
+ end
+ end
+
+ stack.length > 0 ? stack.pop.to_hash : {}
+ end
+ end
+
+ class XML
+ def self.parser
+ @@parser ||= REXMLParser
+ end
+
+ def self.parser=(parser)
+ @@parser = parser
+ end
+
+ def self.parse(xml)
+ parser.parse(xml)
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/.rspec b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/.rspec
new file mode 100644
index 000000000..53607ea52
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/.rspec
@@ -0,0 +1 @@
+--colour
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Code-of-Conduct.md b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Code-of-Conduct.md
new file mode 100644
index 000000000..d05f4bc06
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Code-of-Conduct.md
@@ -0,0 +1,74 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, gender identity and expression, level of experience,
+nationality, personal appearance, race, religion, or sexual identity and
+orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at [INSERT EMAIL ADDRESS]. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at [http://contributor-covenant.org/version/1/4][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/4/
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Contributing.md b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Contributing.md
new file mode 100644
index 000000000..425f49f68
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Contributing.md
@@ -0,0 +1,119 @@
+## Contributing
+
+I value any contribution to Diff::LCS you can provide: a bug report, a
+feature request, or code contributions. Code contributions to Diff::LCS are
+especially welcomeencouraged. Because Diff::LCS is a complex
+codebase, there are a few guidelines:
+
+- Code changes _will not_ be accepted without tests. The test suite is
+ written with [RSpec][].
+- Match my coding style.
+- Use a thoughtfully-named topic branch that contains your change. Rebase
+ your commits into logical chunks as necessary.
+- Use [quality commit messages][].
+- Do not change the version number; when your patch is accepted and a release
+ is made, the version will be updated at that point.
+- Submit a GitHub pull request with your changes.
+- New or changed behaviours require appropriate documentation.
+
+### Test Dependencies
+
+Diff::LCS uses Ryan Davis’s [Hoe][] to manage the release process, and it
+adds a number of rake tasks. You will mostly be interested in:
+
+```sh
+$ rake
+```
+
+which runs the tests the same way that:
+
+```sh
+$ rake spec
+```
+
+will do.
+
+To assist with the installation of the development dependencies, I have
+provided a Gemfile pointing to the (generated) `diff-lcs.gemspec` file. This
+will permit you to do:
+
+```sh
+$ bundle install
+```
+
+to get the development dependencies. If you aleady have `hoe` installed, you
+can accomplish the same thing with:
+
+```sh
+$ rake newb
+```
+
+This task will install any missing dependencies, run the tests/specs, and
+generate the RDoc.
+
+You can run tests with code coverage analysis by running:
+
+```sh
+$ rake spec:coverage
+```
+
+### Workflow
+
+Here's the most direct way to get your work merged into the project:
+
+- Fork the project.
+- Clone down your fork (`git clone git://github.com//diff-lcs.git`).
+- Create a topic branch to contain your change (`git checkout -b my_awesome_feature`).
+- Hack away, add tests. Not necessarily in that order.
+- Make sure everything still passes by running `rake`.
+- If necessary, rebase your commits into logical chunks, without errors.
+- Push the branch up (`git push origin my_awesome_feature`).
+- Create a pull request against halostatue/diff-lcs and describe what your
+ change does and the why you think it should be merged.
+
+### Contributors
+
+- Austin Ziegler created Diff::LCS.
+
+Thanks to everyone else who has contributed code or bug reports to Diff::LCS:
+
+- @ginriki
+- @joshbronson
+- @kevinmook
+- @mckaz
+- Akinori Musha
+- Artem Ignatyev
+- Brandon Fish
+- Camille Drapier
+- Cédric Boutillier
+- Gregg Kellogg
+- Jagdeep Singh
+- Jason Gladish
+- Jon Rowe
+- Josef Strzibny
+- Josep (@apuratepp)
+- Josh Bronson
+- Jun Aruga
+- Kenichi Kamiya
+- Kensuke Nagae
+- Kevin Ansfield
+- Koichi Ito
+- Mark Friedgan
+- Michael Granger
+- Myron Marston
+- Nicolas Leger
+- Oleg Orlov
+- Paul Kunysch
+- Pete Higgins
+- Peter Wagenet
+- Philippe Lafoucrière
+- Ryan Lovelett
+- Scott Steele
+- Simon Courtois
+- Tien (@tiendo1011)
+- Tomas Jura
+- Vít Ondruch
+
+[rspec]: http://rspec.info/documentation/
+[quality commit messages]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
+[hoe]: https://github.com/seattlerb/hoe
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/History.md b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/History.md
new file mode 100644
index 000000000..d426e9523
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/History.md
@@ -0,0 +1,400 @@
+# History
+
+## 1.5.0 / 2021-12-23
+
+- Updated the CI configuration and monkey-patch Hoe.
+
+- Kenichi Kamiya fixed a test configuration deprecation in SimpleCov. [#69]
+
+- Tien introduced several corrections and code improvements:
+
+ - Removed an off-by-one error when calculating an index value by embracing
+ Ruby iteration properly. This had a side-effect of fixing a long-standing
+ bug in `#traverse_sequences` where the traversal would not be transitive.
+ That is, `LCS(s2, s1)` should produce a sequence that is transitive with
+ `LCS(s1, s2)` on traversal, and applying the diff computed from those
+ results would result in equivalent changes that could be played forward or
+ backward as appropriate. [#71], [#75]
+
+ - The above fix resulted in a changed order of the longest common subsequence
+ when callbacks were applied. After analysis, it was determined that the
+ computed subsequence was _equivalent_ to the prior version, so the test was
+ updated. This also resulted in the clarification of documentation when
+ traversing the subsequences. [#79]
+
+ - An infinite loop case in the case where Diff::LCS would be included into an
+ enumerable class has been fixed. [#73]
+
+ - Clarified the purpose of a threshold test in calculation of LCS. [#72],
+ [#80]
+
+- Removed autotest directory
+
+## 1.4.4 / 2020-07-01
+
+- Fixed an issue reported by Jun Aruga in the Diff::LCS::Ldiff binary text
+ detection. [#44]
+
+- Fixed a theoretical issue reported by Jun Aruga in Diff::LCS::Hunk to raise
+ a more useful exception. [#43]
+
+- Added documentation that should address custom object issues as reported in
+ [#35].
+
+- Fixed more diff errors, in part reported in [#65].
+
+ - The use of `Numeric#abs` is incorrect in `Diff::LCS::Block#diff_size`. The
+ diff size _must_ be accurate for correct change placement.
+
+ - When selecting @max_diff_size in Diff::LCS::Hunk, choose it based on
+ `block.diff_size.abs`.
+
+ - Made a number of changes that will, unfortunately, increase allocations at
+ the cost of being safe with frozen strings.
+
+ - Add some knowledge that when `Diff::LCS::Hunk#diff` is called, that we are
+ processing the _last_ hunk, so some changes will be made to how the output
+ is generated.
+
+ - `old`, `ed`, and `reverse_ed` formats have no differences.
+
+ - `unified` format will report `\ No newline at end of file` given the
+ correct conditions, at most once. Unified range reporting also differs for
+ the last hunk such that the `length` of the range is reduced by one.
+
+ - `context` format will report `\No newline at end of file` given the
+ correct conditions, up to once per "file". Context range reporting also
+ differs for the last hunk such that the `end` part of the range is reduced
+ by one to a minimum of one.
+
+- Added a bunch more tests for the cases above, and fixed `hunk_spec.rb` so that
+ the phrase being compared isn't nonsense French.
+
+- Updated formatting.
+
+- Added a Rake task to assist with manual testing on Ruby 1.8.
+
+## 1.4.3 / 2020-06-29
+
+- Fixed several issues with the 1.4 on Rubies older than 2.0. Some of this was
+ providing useful shim functions to Hoe 3.x (which dropped these older Rubies
+ a while ago). Specifically:
+
+ - Removed Array#lazy from a method in Diff::LCS::Hunk.
+
+ - Changed some unit tests to use old-style Symbol-keyed hashes.
+
+ - Changed some unit test helper functions to no longer use keyword parameters,
+ but only a trailing options hash.
+
+ - Made the use of `psych` dependent on `RUBY_VERSION >= 1.9`.
+
+ Resolves [#63].
+
+## 1.4.2 / 2020-06-23
+
+- Camille Drapier fixed a small issue with RuboCop configuration. [#59]
+
+- Applied another fix (and unit test) to fix an issue for the Chef team.
+ [#60], [#61]
+
+## 1.4.1 / 2020-06-23
+
+- Fix an issue where diff sizes could be negative, and they should be. [#57],
+ [#58]
+
+## 1.4 / 2020-06-23
+
+- Ruby versions lower than 2.4 are soft-deprecated and will not be run as part
+ of the CI process any longer.
+
+- Akinora MUSHA (knu) added the ability for Diff::LCS::Change objects to be
+ implicitly treated arrays. Originally provided as pull request [#47], but it
+ introduced a number of test failures as documented in [#48], and remediation
+ of Diff::LCS itself was introduced in [#49].
+
+- Resolved [#5] with some tests comparing output from `system` calls to
+ `bin/ldiff` with some pre-generated output. Resolved [#6] with these tests.
+
+- Resolved a previously undetected `bin/ldiff` issue with `--context` output not
+ matching `diff --context` output.
+
+- Resolved an issue with later versions of Ruby not working with an `OptParse`
+ specification of `Numeric`; this has been changed to `Integer`.
+
+- Brandon Fish added truffleruby in [#52].
+
+- Fixed two missing classes as reported in [#53].
+
+## 1.3 / 2017-01-18
+
+- Bugs fixed:
+
+ - Fixed an error for bin/ldiff --version. Fixes issue [#21].
+
+ - Force Diff::LCS::Change and Diff::LCS::ContextChange to only perform
+ equality comparisons against themselves. Provided by Kevin Mook in pull
+ request [#29].
+
+ - Fix tab expansion in htmldiff, provided by Mark Friedgan in pull request
+ [#25].
+
+ - Silence Ruby 2.4 Fixnum deprecation warnings. Fixes issue [#38] and pull
+ request [#36].
+
+ - Ensure that test dependencies are loaded properly. Fixes issue [#33] and
+ pull request [#34].
+
+ - Fix issue [#1] with incorrect intuition of patch direction. Tentative fix,
+ but the previous failure cases pass now.
+
+- Tooling changes:
+
+ - Added SimpleCov and Coveralls support.
+
+ - Change the homepage (temporarily) to the GitHub repo.
+
+ - Updated testing and gem infrastructure.
+
+ - Modernized the specs.
+
+- Cleaned up documentation.
+
+- Added a Code of Conduct.
+
+## 1.2.5 / 2013-11-08
+
+- Bugs fixed:
+
+ - Comparing arrays flattened them too far, especially with Diff::LCS.sdiff.
+ Fixed by Josh Bronson in pull request [#23].
+
+## 1.2.4 / 2013-04-20
+
+- Bugs fixed:
+
+ - A bug was introduced after 1.1.3 when pruning common sequences at the start
+ of comparison. Paul Kunysch (@pck) fixed this in pull request [#18]. Thanks!
+
+ - The Rubinius (1.9 mode) bug in [rubinius/rubinius#2268] has been fixed by
+ the Rubinius team two days after it was filed. Thanks for fixing this so
+ quickly!
+
+- Switching to Raggi's hoe-gemspec2 for gemspec generation.
+
+## 1.2.3 / 2013-04-11
+
+- Bugs Fixed:
+
+ - The new encoding detection for diff output generation (added in 1.2.2)
+ introduced a bug if the left side of the comparison was the empty set.
+ Originally found in [rspec/rspec-expectations#238] and
+ [rspec/rspec-expectations#239]. Jon Rowe developed a reasonable heuristic
+ (left side, right side, empty string literal) to avoid this bug.
+
+ - There is a known issue with Rubinius in 1.9 mode reported in
+ [rubinius/rubinius#2268] and demonstrated in the Travis CI builds. For all
+ other tested platforms, diff-lcs is considered stable. As soon as a suitably
+ small test-case can be created for the Rubinius team to examine, this will
+ be added to the Rubinius issue around this.
+
+## 1.2.2 / 2013-03-30
+
+- Bugs Fixed:
+
+ - Diff::LCS::Hunk could not properly generate a difference for comparison sets
+ that are not US-ASCII-compatible because of the use of literal regular
+ expressions and strings. Jon Rowe found this in
+ [rspec/rspec-expectations#219] and provided a first pass implementation in
+ pull request [#15]. I've reworked it because of test failures in Rubinius
+ when running in Ruby 1.9 mode. This coerces the added values to the encoding
+ of the old dataset (as determined by the first piece of the old dataset).
+
+ - Adding Travis CI testing for Ruby 2.0.
+
+## 1.2.1 / 2013-02-09
+
+- Bugs Fixed:
+
+ - As seen in [rspec/rspec-expectations#200], the release of Diff::LCS 1.2
+ introduced an unnecessary public API change to Diff::LCS::Hunk (see the
+ change at [rspec/rspec-expectations@3d6fc82c] for details). The new method
+ name (and behaviour) is more correct, but I should not have renamed the
+ function or should have at least provided an alias. This release restores
+ Diff::LCS::Hunk#unshift as an alias to #merge. Note that the old #unshift
+ behaviour was incorrect and will not be restored.
+
+## 1.2.0 / 2013-01-21
+
+- Minor Enhancements:
+
+ - Added special case handling for Diff::LCS.patch so that it handles patches
+ that are empty or contain no changes.
+
+ - Added two new methods (#patch_me and #unpatch_me) to the includable module.
+
+- Bugs Fixed:
+
+ - Fixed issue [#1] patch direction detection.
+
+ - Resolved issue [#2] by handling `string[string.size, 1]` properly (it
+ returns `""` not `nil`).
+
+ - Michael Granger (ged) fixed an implementation error in Diff::LCS::Change and
+ added specs in pull request [#8]. Thanks!
+
+ - Made the code auto-testable.
+
+ - Vít Ondruch (voxik) provided the latest version of the GPL2 license file in
+ pull request [#10]. Thanks!
+
+ - Fixed a documentation issue with the includable versions of #patch! and
+ #unpatch! where they implied that they would replace the original value.
+ Given that Diff::LCS.patch always returns a copy, the documentation was
+ incorrect and has been corrected. To provide the behaviour that was
+ originally documented, two new methods were added to provide this behaviour.
+ Found by scooter-dangle in issue [#12]. Thanks!
+
+- Code Style Changes:
+
+ - Removed trailing spaces.
+
+ - Calling class methods using `.` instead of `::`.
+
+ - Vít Ondruch (voxik) removed unnecessary shebangs in pull request [#9].
+ Thanks!
+
+ - Kenichi Kamiya (kachick) removed some warnings of an unused variable in
+ lucky pull request [#13]. Thanks!
+
+ - Embarked on a major refactoring to make the files a little more manageable
+ and understand the code on a deeper level.
+
+ - Adding to http://travis-ci.org.
+
+## 1.1.3 / 2011-08-27
+
+- Converted to 'hoe' for release.
+
+- Converted tests to RSpec 2.
+
+- Extracted the body of htmldiff into a class available from diff/lcs/htmldiff.
+
+- Migrated development and issue tracking to GitHub.
+
+- Bugs fixed:
+
+ - Eliminated the explicit use of RubyGems in both bin/htmldiff and bin/ldiff.
+ Resolves issue [#4].
+
+ - Eliminated Ruby warnings. Resolves issue [#3].
+
+## 1.1.2 / 2004-10-20
+
+- Fixed a problem reported by Mauricio Fernandez in htmldiff.
+
+## 1.1.1 / 2004-09-25
+
+- Fixed bug #891 (Set returned from patch command does not contain last equal
+ part).
+
+- Fixed a problem with callback initialisation code (it assumed that all
+ callbacks passed as classes can be initialised; now, it rescues NoMethodError
+ in the event of private :new being called).
+
+- Modified the non-initialisable callbacks to have a private #new method.
+
+- Moved ldiff core code to Diff::LCS::Ldiff (diff/lcs/ldiff.rb).
+
+## 1.1.0
+
+- Eliminated the need for Diff::LCS::Event and removed it.
+
+- Added a contextual diff callback, Diff::LCS::ContextDiffCallback.
+
+- Implemented patching/unpatching for standard Diff callback output formats with
+ both #diff and #sdiff.
+
+- Extensive documentation changes.
+
+## 1.0.4
+
+- Fixed a problem with bin/ldiff output, especially for unified format. Newlines
+ that should have been present weren't.
+
+- Changed the .tar.gz installer to generate Windows batch files if ones do not
+ exist already. Removed the existing batch files as they didn't work.
+
+## 1.0.3
+
+- Fixed a problem with #traverse_sequences where the first difference from the
+ left sequence might not be appropriately captured.
+
+## 1.0.2
+
+- Fixed an issue with ldiff not working because actions were changed from
+ symbols to strings.
+
+## 1.0.1
+
+- Minor modifications to the gemspec, the README.
+
+- Renamed the diff program to ldiff (as well as the companion batch file) so as
+ to not collide with the standard diff program.
+
+- Fixed issues with RubyGems. Requires RubyGems > 0.6.1 or >= 0.6.1 with the
+ latest CVS version.
+
+## 1.0
+
+- Initial release based mostly on Perl's Algorithm::Diff.
+
+[rubinius/rubinius#2268]: https://github.com/rubinius/rubinius/issues/2268
+[rspec/rspec-expectations#239]: https://github.com/rspec/rspec-expectations/issues/239
+[rspec/rspec-expectations#238]: https://github.com/rspec/rspec-expectations/issues/238
+[rspec/rspec-expectations#219]: https://github.com/rspec/rspec-expectations/issues/219
+[rspec/rspec-expectations@3d6fc82c]: https://github.com/rspec/rspec-expectations/commit/3d6fc82c
+[rspec/rspec-expectations#200]: https://github.com/rspec/rspec-expectations/pull/200
+[#1]: https://github.com/halostatue/diff-lcs/issues/1
+[#2]: https://github.com/halostatue/diff-lcs/issues/2
+[#3]: https://github.com/halostatue/diff-lcs/issues/3
+[#4]: https://github.com/halostatue/diff-lcs/issues/4
+[#5]: https://github.com/halostatue/diff-lcs/issues/5
+[#6]: https://github.com/halostatue/diff-lcs/issues/6
+[#8]: https://github.com/halostatue/diff-lcs/pull/8
+[#9]: https://github.com/halostatue/diff-lcs/pull/9
+[#10]: https://github.com/halostatue/diff-lcs/pull/10
+[#12]: https://github.com/halostatue/diff-lcs/issues/12
+[#13]: https://github.com/halostatue/diff-lcs/pull/13
+[#15]: https://github.com/halostatue/diff-lcs/pull/15
+[#18]: https://github.com/halostatue/diff-lcs/pull/18
+[#21]: https://github.com/halostatue/diff-lcs/issues/21
+[#23]: https://github.com/halostatue/diff-lcs/pull/23
+[#25]: https://github.com/halostatue/diff-lcs/pull/25
+[#29]: https://github.com/halostatue/diff-lcs/pull/29
+[#33]: https://github.com/halostatue/diff-lcs/issues/33
+[#34]: https://github.com/halostatue/diff-lcs/pull/34
+[#35]: https://github.com/halostatue/diff-lcs/issues/35
+[#36]: https://github.com/halostatue/diff-lcs/pull/36
+[#38]: https://github.com/halostatue/diff-lcs/issues/38
+[#43]: https://github.com/halostatue/diff-lcs/issues/43
+[#44]: https://github.com/halostatue/diff-lcs/issues/44
+[#47]: https://github.com/halostatue/diff-lcs/pull/47
+[#48]: https://github.com/halostatue/diff-lcs/issues/48
+[#49]: https://github.com/halostatue/diff-lcs/pull/49
+[#52]: https://github.com/halostatue/diff-lcs/pull/52
+[#53]: https://github.com/halostatue/diff-lcs/issues/53
+[#57]: https://github.com/halostatue/diff-lcs/issues/57
+[#58]: https://github.com/halostatue/diff-lcs/pull/58
+[#59]: https://github.com/halostatue/diff-lcs/pull/59
+[#60]: https://github.com/halostatue/diff-lcs/issues/60
+[#61]: https://github.com/halostatue/diff-lcs/pull/61
+[#63]: https://github.com/halostatue/diff-lcs/issues/63
+[#65]: https://github.com/halostatue/diff-lcs/issues/65
+[#69]: https://github.com/halostatue/diff-lcs/issues/69
+[#71]: https://github.com/halostatue/diff-lcs/issues/71
+[#72]: https://github.com/halostatue/diff-lcs/issues/72
+[#73]: https://github.com/halostatue/diff-lcs/issues/73
+[#75]: https://github.com/halostatue/diff-lcs/issues/75
+[#79]: https://github.com/halostatue/diff-lcs/issues/79
+[#80]: https://github.com/halostatue/diff-lcs/issues/80
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/License.md b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/License.md
new file mode 100644
index 000000000..63b763dda
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/License.md
@@ -0,0 +1,39 @@
+== License
+
+This software is available under three licenses: the GNU GPL version 2 (or at
+your option, a later version), the Perl Artistic license, or the MIT license.
+Note that my preference for licensing is the MIT license, but Algorithm::Diff
+was dually originally licensed with the Perl Artistic and the GNU GPL ("the
+same terms as Perl itself") and given that the Ruby implementation originally
+hewed pretty closely to the Perl version, I must maintain the additional
+licensing terms.
+
+* Copyright 2004–2013 Austin Ziegler.
+* Adapted from Algorithm::Diff (Perl) by Ned Konz and a Smalltalk version by
+ Mario I. Wolczko.
+
+=== 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.
+
+=== Perl Artistic License (version 2)
+See the file docs/artistic.txt in the main distribution.
+
+=== GNU GPL version 2
+See the file docs/COPYING.txt in the main distribution.
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Manifest.txt b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Manifest.txt
new file mode 100644
index 000000000..0d7dcb368
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Manifest.txt
@@ -0,0 +1,59 @@
+.rspec
+Code-of-Conduct.md
+Contributing.md
+History.md
+License.md
+Manifest.txt
+README.rdoc
+Rakefile
+bin/htmldiff
+bin/ldiff
+docs/COPYING.txt
+docs/artistic.txt
+lib/diff-lcs.rb
+lib/diff/lcs.rb
+lib/diff/lcs/array.rb
+lib/diff/lcs/backports.rb
+lib/diff/lcs/block.rb
+lib/diff/lcs/callbacks.rb
+lib/diff/lcs/change.rb
+lib/diff/lcs/htmldiff.rb
+lib/diff/lcs/hunk.rb
+lib/diff/lcs/internals.rb
+lib/diff/lcs/ldiff.rb
+lib/diff/lcs/string.rb
+spec/change_spec.rb
+spec/diff_spec.rb
+spec/fixtures/aX
+spec/fixtures/bXaX
+spec/fixtures/ds1.csv
+spec/fixtures/ds2.csv
+spec/fixtures/ldiff/output.diff
+spec/fixtures/ldiff/output.diff-c
+spec/fixtures/ldiff/output.diff-e
+spec/fixtures/ldiff/output.diff-f
+spec/fixtures/ldiff/output.diff-u
+spec/fixtures/ldiff/output.diff.chef
+spec/fixtures/ldiff/output.diff.chef-c
+spec/fixtures/ldiff/output.diff.chef-e
+spec/fixtures/ldiff/output.diff.chef-f
+spec/fixtures/ldiff/output.diff.chef-u
+spec/fixtures/ldiff/output.diff.chef2
+spec/fixtures/ldiff/output.diff.chef2-c
+spec/fixtures/ldiff/output.diff.chef2-d
+spec/fixtures/ldiff/output.diff.chef2-e
+spec/fixtures/ldiff/output.diff.chef2-f
+spec/fixtures/ldiff/output.diff.chef2-u
+spec/fixtures/new-chef
+spec/fixtures/new-chef2
+spec/fixtures/old-chef
+spec/fixtures/old-chef2
+spec/hunk_spec.rb
+spec/issues_spec.rb
+spec/lcs_spec.rb
+spec/ldiff_spec.rb
+spec/patch_spec.rb
+spec/sdiff_spec.rb
+spec/spec_helper.rb
+spec/traverse_balanced_spec.rb
+spec/traverse_sequences_spec.rb
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/README.rdoc b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/README.rdoc
new file mode 100644
index 000000000..609242457
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/README.rdoc
@@ -0,0 +1,84 @@
+= Diff::LCS
+
+home :: https://github.com/halostatue/diff-lcs
+code :: https://github.com/halostatue/diff-lcs
+bugs :: https://github.com/halostatue/diff-lcs/issues
+rdoc :: http://rubydoc.info/github/halostatue/diff-lcs
+continuous integration :: {}[https://github.com/halostatue/diff-lcs/actions]
+
+== Description
+
+Diff::LCS computes the difference between two Enumerable sequences using the
+McIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities
+to create a simple HTML diff output format and a standard diff-like tool.
+
+This is release 1.4.3, providing a simple extension that allows for
+Diff::LCS::Change objects to be treated implicitly as arrays and fixes a
+number of formatting issues.
+
+Ruby versions below 2.5 are soft-deprecated, which means that older versions
+are no longer part of the CI test suite. If any changes have been introduced
+that break those versions, bug reports and patches will be accepted, but it
+will be up to the reporter to verify any fixes prior to release. The next
+major release will completely break compatibility.
+
+== Synopsis
+
+Using this module is quite simple. By default, Diff::LCS does not extend
+objects with the Diff::LCS interface, but will be called as if it were a
+function:
+
+ require 'diff/lcs'
+
+ seq1 = %w(a b c e h j l m n p)
+ seq2 = %w(b c d e f j k l m r s t)
+
+ lcs = Diff::LCS.LCS(seq1, seq2)
+ diffs = Diff::LCS.diff(seq1, seq2)
+ sdiff = Diff::LCS.sdiff(seq1, seq2)
+ seq = Diff::LCS.traverse_sequences(seq1, seq2, callback_obj)
+ bal = Diff::LCS.traverse_balanced(seq1, seq2, callback_obj)
+ seq2 == Diff::LCS.patch!(seq1, diffs)
+ seq1 == Diff::LCS.unpatch!(seq2, diffs)
+ seq2 == Diff::LCS.patch!(seq1, sdiff)
+ seq1 == Diff::LCS.unpatch!(seq2, sdiff)
+
+Objects can be extended with Diff::LCS:
+
+ seq1.extend(Diff::LCS)
+ lcs = seq1.lcs(seq2)
+ diffs = seq1.diff(seq2)
+ sdiff = seq1.sdiff(seq2)
+ seq = seq1.traverse_sequences(seq2, callback_obj)
+ bal = seq1.traverse_balanced(seq2, callback_obj)
+ seq2 == seq1.patch!(diffs)
+ seq1 == seq2.unpatch!(diffs)
+ seq2 == seq1.patch!(sdiff)
+ seq1 == seq2.unpatch!(sdiff)
+
+By requiring 'diff/lcs/array' or 'diff/lcs/string', Array or String will be
+extended for use this way.
+
+Note that Diff::LCS requires a sequenced enumerable container, which means that
+the order of enumeration is both predictable and consistent for the same set of
+data. While it is theoretically possible to generate a diff for an unordered
+hash, it will only be meaningful if the enumeration of the hashes is
+consistent. In general, this will mean that containers that behave like String
+or Array will perform best.
+
+== History
+
+Diff::LCS is a port of Perl's Algorithm::Diff that uses the McIlroy-Hunt
+longest common subsequence (LCS) algorithm to compute intelligent differences
+between two sequenced enumerable containers. The implementation is based on
+Mario I. Wolczko's
+{Smalltalk version 1.2}[ftp://st.cs.uiuc.edu/pub/Smalltalk/MANCHESTER/manchester/4.0/diff.st]
+(1993) and Ned Konz's Perl version
+{Algorithm::Diff 1.15}[http://search.cpan.org/~nedkonz/Algorithm-Diff-1.15/].
+Diff::LCS#sdiff and Diff::LCS#traverse_balanced were originally written for the
+Perl version by Mike Schilli.
+
+The algorithm is described in A Fast Algorithm for Computing Longest Common
+Subsequences, CACM, vol.20, no.5, pp.350-353, May 1977, with a few minor
+improvements to improve the speed. A simplified description of the algorithm,
+originally written for the Perl version, was written by Mark-Jason Dominus.
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Rakefile b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Rakefile
new file mode 100644
index 000000000..fd7ee31cc
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/Rakefile
@@ -0,0 +1,121 @@
+# frozen_string_literal: true
+
+require 'rubygems'
+require 'rspec'
+require 'rspec/core/rake_task'
+require 'hoe'
+
+# This is required until https://github.com/seattlerb/hoe/issues/112 is fixed
+class Hoe
+ def with_config
+ config = Hoe::DEFAULT_CONFIG
+
+ rc = File.expand_path("~/.hoerc")
+ homeconfig = load_config(rc)
+ config = config.merge(homeconfig)
+
+ localconfig = load_config(File.expand_path(File.join(Dir.pwd, ".hoerc")))
+ config = config.merge(localconfig)
+
+ yield config, rc
+ end
+
+ def load_config(name)
+ File.exist?(name) ? safe_load_yaml(name) : {}
+ end
+
+ def safe_load_yaml(name)
+ return safe_load_yaml_file(name) if YAML.respond_to?(:safe_load_file)
+
+ data = IO.binread(name)
+ YAML.safe_load(data, permitted_classes: [Regexp])
+ rescue
+ YAML.safe_load(data, [Regexp])
+ end
+
+ def safe_load_yaml_file(name)
+ YAML.safe_load_file(name, permitted_classes: [Regexp])
+ rescue
+ YAML.safe_load_file(name, [Regexp])
+ end
+end
+
+Hoe.plugin :bundler
+Hoe.plugin :doofus
+Hoe.plugin :gemspec2
+Hoe.plugin :git
+
+if RUBY_VERSION < '1.9'
+ class Array #:nodoc:
+ def to_h
+ Hash[*flatten(1)]
+ end
+ end
+
+ class Gem::Specification #:nodoc:
+ def metadata=(*); end
+
+ def default_value(*); end
+ end
+
+ class Object #:nodoc:
+ def caller_locations(*)
+ []
+ end
+ end
+end
+
+_spec = Hoe.spec 'diff-lcs' do
+ developer('Austin Ziegler', 'halostatue@gmail.com')
+
+ require_ruby_version '>= 1.8'
+
+ self.history_file = 'History.md'
+ self.readme_file = 'README.rdoc'
+ self.licenses = ['MIT', 'Artistic-2.0', 'GPL-2.0+']
+
+ extra_dev_deps << ['hoe-doofus', '~> 1.0']
+ extra_dev_deps << ['hoe-gemspec2', '~> 1.1']
+ extra_dev_deps << ['hoe-git', '~> 1.6']
+ extra_dev_deps << ['hoe-rubygems', '~> 1.0']
+ extra_dev_deps << ['rspec', '>= 2.0', '< 4']
+ extra_dev_deps << ['rake', '>= 10.0', '< 14']
+ extra_dev_deps << ['rdoc', '>= 6.3.1', '< 7']
+end
+
+desc "Run all specifications"
+RSpec::Core::RakeTask.new(:spec) do |t|
+ rspec_dirs = %w(spec lib).join(":")
+ t.rspec_opts = ["-I#{rspec_dirs}"]
+end
+
+Rake::Task["spec"].actions.uniq! { |a| a.source_location }
+
+task :default => :spec unless Rake::Task["default"].prereqs.include?("spec")
+task :test => :spec unless Rake::Task["test"].prereqs.include?("spec")
+
+if RUBY_VERSION >= '2.0' && RUBY_ENGINE == 'ruby'
+ namespace :spec do
+ desc "Runs test coverage. Only works Ruby 2.0+ and assumes 'simplecov' is installed."
+ task :coverage do
+ ENV['COVERAGE'] = 'yes'
+ Rake::Task['spec'].execute
+ end
+ end
+end
+
+task :ruby18 do
+ puts <<-MESSAGE
+You are starting a barebones Ruby 1.8 docker environment. You will need to
+do the following:
+
+- mv Gemfile.lock{,.v2}
+- gem install bundler --version 1.17.2 --no-ri --no-rdoc
+- ruby -S bundle
+- rake
+
+Don't forget to restore your Gemfile.lock after testing.
+
+ MESSAGE
+ sh "docker run -it --rm -v #{Dir.pwd}:/root/diff-lcs bellbind/docker-ruby18-rails2 bash -l"
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/bin/htmldiff b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/bin/htmldiff
new file mode 100755
index 000000000..14114a763
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/bin/htmldiff
@@ -0,0 +1,35 @@
+#! /usr/bin/env ruby -w
+# frozen_string_literal: true
+
+require 'diff/lcs'
+require 'diff/lcs/htmldiff'
+
+begin
+ require 'text/format'
+rescue LoadError
+ Diff::LCS::HTMLDiff.can_expand_tabs = false
+end
+
+if ARGV.size < 2 or ARGV.size > 3
+ warn "usage: #{File.basename($0)} old new [output.html]"
+ warn " #{File.basename($0)} old new > output.html"
+ exit 127
+end
+
+left = IO.read(ARGV[0]).split($/)
+right = IO.read(ARGV[1]).split($/)
+
+options = { :title => "diff #{ARGV[0]} #{ARGV[1]}" }
+
+htmldiff = Diff::LCS::HTMLDiff.new(left, right, options)
+
+if ARGV[2]
+ File.open(ARGV[2], 'w') do |f|
+ htmldiff.options[:output] = f
+ htmldiff.run
+ end
+else
+ htmldiff.run
+end
+
+# vim: ft=ruby
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/bin/ldiff b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/bin/ldiff
new file mode 100755
index 000000000..f4734f58e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/bin/ldiff
@@ -0,0 +1,9 @@
+#! /usr/bin/env ruby -w
+# frozen_string_literal: true
+
+require 'diff/lcs'
+require 'diff/lcs/ldiff'
+
+exit Diff::LCS::Ldiff.run(ARGV)
+
+# vim: ft=ruby
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/docs/COPYING.txt b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/docs/COPYING.txt
new file mode 100644
index 000000000..d159169d1
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/docs/COPYING.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/docs/artistic.txt b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/docs/artistic.txt
new file mode 100644
index 000000000..c04639a83
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/docs/artistic.txt
@@ -0,0 +1,127 @@
+The "Artistic License"
+
+ Preamble
+
+The intent of this document is to state the conditions under which a
+Package may be copied, such that the Copyright Holder maintains some
+semblance of artistic control over the development of the package,
+while giving the users of the package the right to use and distribute
+the Package in a more-or-less customary fashion, plus the right to make
+reasonable modifications.
+
+Definitions:
+
+ "Package" refers to the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection of files
+ created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been
+ modified, or has been modified in accordance with the wishes
+ of the Copyright Holder as specified below.
+
+ "Copyright Holder" is whoever is named in the copyright or
+ copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing
+ this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the
+ basis of media cost, duplication charges, time of people involved,
+ and so on. (You will not be required to justify it to the
+ Copyright Holder, but only to the computing community at large
+ as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item
+ itself, though there may be fees involved in handling the item.
+ It also means that recipients of the item may redistribute it
+ under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications
+derived from the Public Domain or from the Copyright Holder. A Package
+modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided
+that you insert a prominent notice in each changed file stating how and
+when you changed that file, and provided that you do at least ONE of the
+following:
+
+ a) place your modifications in the Public Domain or otherwise make them
+ Freely Available, such as by posting said modifications to Usenet or
+ an equivalent medium, or placing the modifications on a major archive
+ site such as uunet.uu.net, or by allowing the Copyright Holder to include
+ your modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided, and provide
+ a separate manual page for each non-standard executable that clearly
+ documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files,
+ together with instructions (in the manual page or equivalent) on where
+ to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of
+ the Package with your modifications.
+
+ c) give non-standard executables non-standard names, and clearly
+ document the differences in manual pages (or equivalent), together
+ with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package. You may charge any fee you choose for support of this
+Package. You may not charge a fee for this Package itself. However,
+you may distribute this Package in aggregate with other (possibly
+commercial) programs as part of a larger (possibly commercial) software
+distribution provided that you do not advertise this Package as a
+product of your own. You may embed this Package's interpreter within
+an executable of yours (by linking); this shall be construed as a mere
+form of aggregation, provided that the complete Standard Version of the
+interpreter is so embedded.
+
+6. The scripts and library files supplied as input to or produced as
+output from the programs of this Package do not automatically fall
+under the copyright of this Package, but belong to whoever generated
+them, and may be sold commercially, and may be aggregated with this
+Package. If such scripts or library files are aggregated with this
+Package via the so-called "undump" or "unexec" methods of producing a
+binary executable image, then distribution of such an image shall
+neither be construed as a distribution of this Package nor shall it
+fall under the restrictions of Paragraphs 3 and 4, provided that you do
+not represent such an executable image as a Standard Version of this
+Package.
+
+7. C subroutines (or comparably compiled subroutines in other
+languages) supplied by you and linked into this Package in order to
+emulate subroutines and variables of the language defined by this
+Package shall not be considered part of this Package, but are the
+equivalent of input as in Paragraph 6, provided these subroutines do
+not change the language in any way that would cause it to fail the
+regression tests for the language.
+
+8. Aggregation of this Package with a commercial distribution is always
+permitted provided that the use of this Package is embedded; that is,
+when no overt attempt is made to make this Package's interfaces visible
+to the end user of the commercial distribution. Such use shall not be
+construed as a distribution of this Package.
+
+9. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ The End
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff-lcs.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff-lcs.rb
new file mode 100644
index 000000000..250392f94
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff-lcs.rb
@@ -0,0 +1,3 @@
+# frozen_string_literal: true
+
+require 'diff/lcs'
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs.rb
new file mode 100644
index 000000000..288cfc217
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs.rb
@@ -0,0 +1,739 @@
+# frozen_string_literal: true
+
+module Diff; end unless defined? Diff # rubocop:disable Style/Documentation
+
+# == How Diff Works (by Mark-Jason Dominus)
+#
+# I once read an article written by the authors of +diff+; they said that they
+# hard worked very hard on the algorithm until they found the right one.
+#
+# I think what they ended up using (and I hope someone will correct me, because
+# I am not very confident about this) was the `longest common subsequence'
+# method. In the LCS problem, you have two sequences of items:
+#
+# a b c d f g h j q z
+# a b c d e f g i j k r x y z
+#
+# and you want to find the longest sequence of items that is present in both
+# original sequences in the same order. That is, you want to find a new
+# sequence *S* which can be obtained from the first sequence by deleting some
+# items, and from the second sequence by deleting other items. You also want
+# *S* to be as long as possible. In this case *S* is:
+#
+# a b c d f g j z
+#
+# From there it's only a small step to get diff-like output:
+#
+# e h i k q r x y
+# + - + + - + + +
+#
+# This module solves the LCS problem. It also includes a canned function to
+# generate +diff+-like output.
+#
+# It might seem from the example above that the LCS of two sequences is always
+# pretty obvious, but that's not always the case, especially when the two
+# sequences have many repeated elements. For example, consider
+#
+# a x b y c z p d q
+# a b c a x b y c z
+#
+# A naive approach might start by matching up the +a+ and +b+ that appear at
+# the beginning of each sequence, like this:
+#
+# a x b y c z p d q
+# a b c a b y c z
+#
+# This finds the common subsequence +a b c z+. But actually, the LCS is +a x b
+# y c z+:
+#
+# a x b y c z p d q
+# a b c a x b y c z
+module Diff::LCS
+ VERSION = '1.5.0'
+end
+
+require 'diff/lcs/callbacks'
+require 'diff/lcs/internals'
+
+module Diff::LCS # rubocop:disable Style/Documentation
+ # Returns an Array containing the longest common subsequence(s) between
+ # +self+ and +other+. See Diff::LCS#lcs.
+ #
+ # lcs = seq1.lcs(seq2)
+ #
+ # A note when using objects: Diff::LCS only works properly when each object
+ # can be used as a key in a Hash, which typically means that the objects must
+ # implement Object#eql? in a way that two identical values compare
+ # identically for key purposes. That is:
+ #
+ # O.new('a').eql?(O.new('a')) == true
+ def lcs(other, &block) #:yields self[i] if there are matched subsequences:
+ Diff::LCS.lcs(self, other, &block)
+ end
+
+ # Returns the difference set between +self+ and +other+. See Diff::LCS#diff.
+ def diff(other, callbacks = nil, &block)
+ Diff::LCS.diff(self, other, callbacks, &block)
+ end
+
+ # Returns the balanced ("side-by-side") difference set between +self+ and
+ # +other+. See Diff::LCS#sdiff.
+ def sdiff(other, callbacks = nil, &block)
+ Diff::LCS.sdiff(self, other, callbacks, &block)
+ end
+
+ # Traverses the discovered longest common subsequences between +self+ and
+ # +other+. See Diff::LCS#traverse_sequences.
+ def traverse_sequences(other, callbacks = nil, &block)
+ Diff::LCS.traverse_sequences(self, other, callbacks || Diff::LCS::SequenceCallbacks, &block)
+ end
+
+ # Traverses the discovered longest common subsequences between +self+ and
+ # +other+ using the alternate, balanced algorithm. See
+ # Diff::LCS#traverse_balanced.
+ def traverse_balanced(other, callbacks = nil, &block)
+ Diff::LCS.traverse_balanced(self, other, callbacks || Diff::LCS::BalancedCallbacks, &block)
+ end
+
+ # Attempts to patch +self+ with the provided +patchset+. A new sequence based
+ # on +self+ and the +patchset+ will be created. See Diff::LCS#patch. Attempts
+ # to autodiscover the direction of the patch.
+ def patch(patchset)
+ Diff::LCS.patch(self, patchset)
+ end
+ alias unpatch patch
+
+ # Attempts to patch +self+ with the provided +patchset+. A new sequence based
+ # on +self+ and the +patchset+ will be created. See Diff::LCS#patch. Does no
+ # patch direction autodiscovery.
+ def patch!(patchset)
+ Diff::LCS.patch!(self, patchset)
+ end
+
+ # Attempts to unpatch +self+ with the provided +patchset+. A new sequence
+ # based on +self+ and the +patchset+ will be created. See Diff::LCS#unpatch.
+ # Does no patch direction autodiscovery.
+ def unpatch!(patchset)
+ Diff::LCS.unpatch!(self, patchset)
+ end
+
+ # Attempts to patch +self+ with the provided +patchset+, using #patch!. If
+ # the sequence this is used on supports #replace, the value of +self+ will be
+ # replaced. See Diff::LCS#patch. Does no patch direction autodiscovery.
+ def patch_me(patchset)
+ if respond_to? :replace
+ replace(patch!(patchset))
+ else
+ patch!(patchset)
+ end
+ end
+
+ # Attempts to unpatch +self+ with the provided +patchset+, using #unpatch!.
+ # If the sequence this is used on supports #replace, the value of +self+ will
+ # be replaced. See Diff::LCS#unpatch. Does no patch direction autodiscovery.
+ def unpatch_me(patchset)
+ if respond_to? :replace
+ replace(unpatch!(patchset))
+ else
+ unpatch!(patchset)
+ end
+ end
+end
+
+class << Diff::LCS
+ def lcs(seq1, seq2, &block) #:yields seq1[i] for each matched:
+ matches = Diff::LCS::Internals.lcs(seq1, seq2)
+ ret = []
+ string = seq1.kind_of? String
+ matches.each_with_index do |_e, i|
+ next if matches[i].nil?
+
+ v = string ? seq1[i, 1] : seq1[i]
+ v = block[v] if block
+ ret << v
+ end
+ ret
+ end
+ alias LCS lcs
+
+ # #diff computes the smallest set of additions and deletions necessary to
+ # turn the first sequence into the second, and returns a description of these
+ # changes.
+ #
+ # See Diff::LCS::DiffCallbacks for the default behaviour. An alternate
+ # behaviour may be implemented with Diff::LCS::ContextDiffCallbacks. If a
+ # Class argument is provided for +callbacks+, #diff will attempt to
+ # initialise it. If the +callbacks+ object (possibly initialised) responds to
+ # #finish, it will be called.
+ def diff(seq1, seq2, callbacks = nil, &block) # :yields diff changes:
+ diff_traversal(:diff, seq1, seq2, callbacks || Diff::LCS::DiffCallbacks, &block)
+ end
+
+ # #sdiff computes all necessary components to show two sequences and their
+ # minimized differences side by side, just like the Unix utility
+ # sdiff does:
+ #
+ # old < -
+ # same same
+ # before | after
+ # - > new
+ #
+ # See Diff::LCS::SDiffCallbacks for the default behaviour. An alternate
+ # behaviour may be implemented with Diff::LCS::ContextDiffCallbacks. If a
+ # Class argument is provided for +callbacks+, #diff will attempt to
+ # initialise it. If the +callbacks+ object (possibly initialised) responds to
+ # #finish, it will be called.
+ #
+ # Each element of a returned array is a Diff::LCS::ContextChange object,
+ # which can be implicitly converted to an array.
+ #
+ # Diff::LCS.sdiff(a, b).each do |action, (old_pos, old_element), (new_pos, new_element)|
+ # case action
+ # when '!'
+ # # replace
+ # when '-'
+ # # delete
+ # when '+'
+ # # insert
+ # end
+ # end
+ def sdiff(seq1, seq2, callbacks = nil, &block) #:yields diff changes:
+ diff_traversal(:sdiff, seq1, seq2, callbacks || Diff::LCS::SDiffCallbacks, &block)
+ end
+
+ # #traverse_sequences is the most general facility provided by this module;
+ # #diff and #lcs are implemented as calls to it.
+ #
+ # The arguments to #traverse_sequences are the two sequences to traverse, and
+ # a callback object, like this:
+ #
+ # traverse_sequences(seq1, seq2, Diff::LCS::ContextDiffCallbacks.new)
+ #
+ # == Callback Methods
+ #
+ # Optional callback methods are emphasized.
+ #
+ # callbacks#match:: Called when +a+ and +b+ are pointing to
+ # common elements in +A+ and +B+.
+ # callbacks#discard_a:: Called when +a+ is pointing to an
+ # element not in +B+.
+ # callbacks#discard_b:: Called when +b+ is pointing to an
+ # element not in +A+.
+ # callbacks#finished_a:: Called when +a+ has reached the end of
+ # sequence +A+.
+ # callbacks#finished_b:: Called when +b+ has reached the end of
+ # sequence +B+.
+ #
+ # == Algorithm
+ #
+ # a---+
+ # v
+ # A = a b c e h j l m n p
+ # B = b c d e f j k l m r s t
+ # ^
+ # b---+
+ #
+ # If there are two arrows (+a+ and +b+) pointing to elements of sequences +A+
+ # and +B+, the arrows will initially point to the first elements of their
+ # respective sequences. #traverse_sequences will advance the arrows through
+ # the sequences one element at a time, calling a method on the user-specified
+ # callback object before each advance. It will advance the arrows in such a
+ # way that if there are elements A[i] and B[j] which are
+ # both equal and part of the longest common subsequence, there will be some
+ # moment during the execution of #traverse_sequences when arrow +a+ is
+ # pointing to A[i] and arrow +b+ is pointing to B[j]. When
+ # this happens, #traverse_sequences will call callbacks#match and
+ # then it will advance both arrows.
+ #
+ # Otherwise, one of the arrows is pointing to an element of its sequence that
+ # is not part of the longest common subsequence. #traverse_sequences will
+ # advance that arrow and will call callbacks#discard_a or
+ # callbacks#discard_b, depending on which arrow it advanced. If both
+ # arrows point to elements that are not part of the longest common
+ # subsequence, then #traverse_sequences will advance arrow +a+ and call the
+ # appropriate callback, then it will advance arrow +b+ and call the appropriate
+ # callback.
+ #
+ # The methods for callbacks#match, callbacks#discard_a, and
+ # callbacks#discard_b are invoked with an event comprising the
+ # action ("=", "+", or "-", respectively), the indicies +i+ and +j+, and the
+ # elements A[i] and B[j]. Return values are discarded by
+ # #traverse_sequences.
+ #
+ # === End of Sequences
+ #
+ # If arrow +a+ reaches the end of its sequence before arrow +b+ does,
+ # #traverse_sequence will try to call callbacks#finished_a with the
+ # last index and element of +A+ (A[-1]) and the current index and
+ # element of +B+ (B[j]). If callbacks#finished_a does not
+ # exist, then callbacks#discard_b will be called on each element of
+ # +B+ until the end of the sequence is reached (the call will be done with
+ # A[-1] and B[j] for each element).
+ #
+ # If +b+ reaches the end of +B+ before +a+ reaches the end of +A+,
+ # callbacks#finished_b will be called with the current index and
+ # element of +A+ (A[i]) and the last index and element of +B+
+ # (A[-1]). Again, if callbacks#finished_b does not exist on
+ # the callback object, then callbacks#discard_a will be called on
+ # each element of +A+ until the end of the sequence is reached (A[i]
+ # and B[-1]).
+ #
+ # There is a chance that one additional callbacks#discard_a or
+ # callbacks#discard_b will be called after the end of the sequence
+ # is reached, if +a+ has not yet reached the end of +A+ or +b+ has not yet
+ # reached the end of +B+.
+ def traverse_sequences(seq1, seq2, callbacks = Diff::LCS::SequenceCallbacks) #:yields change events:
+ callbacks ||= Diff::LCS::SequenceCallbacks
+ matches = Diff::LCS::Internals.lcs(seq1, seq2)
+
+ run_finished_a = run_finished_b = false
+ string = seq1.kind_of?(String)
+
+ a_size = seq1.size
+ b_size = seq2.size
+ ai = bj = 0
+
+ matches.each do |b_line|
+ if b_line.nil?
+ unless seq1[ai].nil?
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ bx = string ? seq2[bj, 1] : seq2[bj]
+
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_a(event)
+ end
+ else
+ ax = string ? seq1[ai, 1] : seq1[ai]
+
+ loop do
+ break unless bj < b_line
+
+ bx = string ? seq2[bj, 1] : seq2[bj]
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_b(event)
+ bj += 1
+ end
+ bx = string ? seq2[bj, 1] : seq2[bj]
+ event = Diff::LCS::ContextChange.new('=', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.match(event)
+ bj += 1
+ end
+ ai += 1
+ end
+
+ # The last entry (if any) processed was a match. +ai+ and +bj+ point just
+ # past the last matching lines in their sequences.
+ while (ai < a_size) or (bj < b_size)
+ # last A?
+ if ai == a_size and bj < b_size
+ if callbacks.respond_to?(:finished_a) and !run_finished_a
+ ax = string ? seq1[-1, 1] : seq1[-1]
+ bx = string ? seq2[bj, 1] : seq2[bj]
+ event = Diff::LCS::ContextChange.new('>', (a_size - 1), ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.finished_a(event)
+ run_finished_a = true
+ else
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ loop do
+ bx = string ? seq2[bj, 1] : seq2[bj]
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_b(event)
+ bj += 1
+ break unless bj < b_size
+ end
+ end
+ end
+
+ # last B?
+ if bj == b_size and ai < a_size
+ if callbacks.respond_to?(:finished_b) and !run_finished_b
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ bx = string ? seq2[-1, 1] : seq2[-1]
+ event = Diff::LCS::ContextChange.new('<', ai, ax, (b_size - 1), bx)
+ event = yield event if block_given?
+ callbacks.finished_b(event)
+ run_finished_b = true
+ else
+ bx = string ? seq2[bj, 1] : seq2[bj]
+ loop do
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_a(event)
+ ai += 1
+ break unless bj < b_size
+ end
+ end
+ end
+
+ if ai < a_size
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ bx = string ? seq2[bj, 1] : seq2[bj]
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_a(event)
+ ai += 1
+ end
+
+ if bj < b_size
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ bx = string ? seq2[bj, 1] : seq2[bj]
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_b(event)
+ bj += 1
+ end
+ end
+ end
+
+ # #traverse_balanced is an alternative to #traverse_sequences. It uses a
+ # different algorithm to iterate through the entries in the computed longest
+ # common subsequence. Instead of viewing the changes as insertions or
+ # deletions from one of the sequences, #traverse_balanced will report
+ # changes between the sequences.
+ #
+ # The arguments to #traverse_balanced are the two sequences to traverse and a
+ # callback object, like this:
+ #
+ # traverse_balanced(seq1, seq2, Diff::LCS::ContextDiffCallbacks.new)
+ #
+ # #sdiff is implemented with #traverse_balanced.
+ #
+ # == Callback Methods
+ #
+ # Optional callback methods are emphasized.
+ #
+ # callbacks#match:: Called when +a+ and +b+ are pointing to
+ # common elements in +A+ and +B+.
+ # callbacks#discard_a:: Called when +a+ is pointing to an
+ # element not in +B+.
+ # callbacks#discard_b:: Called when +b+ is pointing to an
+ # element not in +A+.
+ # callbacks#change:: Called when +a+ and +b+ are pointing to
+ # the same relative position, but
+ # A[a] and B[b] are not
+ # the same; a change has
+ # occurred.
+ #
+ # #traverse_balanced might be a bit slower than #traverse_sequences,
+ # noticable only while processing huge amounts of data.
+ #
+ # == Algorithm
+ #
+ # a---+
+ # v
+ # A = a b c e h j l m n p
+ # B = b c d e f j k l m r s t
+ # ^
+ # b---+
+ #
+ # === Matches
+ #
+ # If there are two arrows (+a+ and +b+) pointing to elements of sequences +A+
+ # and +B+, the arrows will initially point to the first elements of their
+ # respective sequences. #traverse_sequences will advance the arrows through
+ # the sequences one element at a time, calling a method on the user-specified
+ # callback object before each advance. It will advance the arrows in such a
+ # way that if there are elements A[i] and B[j] which are
+ # both equal and part of the longest common subsequence, there will be some
+ # moment during the execution of #traverse_sequences when arrow +a+ is
+ # pointing to A[i] and arrow +b+ is pointing to B[j]. When
+ # this happens, #traverse_sequences will call callbacks#match and
+ # then it will advance both arrows.
+ #
+ # === Discards
+ #
+ # Otherwise, one of the arrows is pointing to an element of its sequence that
+ # is not part of the longest common subsequence. #traverse_sequences will
+ # advance that arrow and will call callbacks#discard_a or
+ # callbacks#discard_b, depending on which arrow it advanced.
+ #
+ # === Changes
+ #
+ # If both +a+ and +b+ point to elements that are not part of the longest
+ # common subsequence, then #traverse_sequences will try to call
+ # callbacks#change and advance both arrows. If
+ # callbacks#change is not implemented, then
+ # callbacks#discard_a and callbacks#discard_b will be
+ # called in turn.
+ #
+ # The methods for callbacks#match, callbacks#discard_a,
+ # callbacks#discard_b, and callbacks#change are invoked
+ # with an event comprising the action ("=", "+", "-", or "!", respectively),
+ # the indicies +i+ and +j+, and the elements A[i] and B[j].
+ # Return values are discarded by #traverse_balanced.
+ #
+ # === Context
+ #
+ # Note that +i+ and +j+ may not be the same index position, even if +a+ and
+ # +b+ are considered to be pointing to matching or changed elements.
+ def traverse_balanced(seq1, seq2, callbacks = Diff::LCS::BalancedCallbacks)
+ matches = Diff::LCS::Internals.lcs(seq1, seq2)
+ a_size = seq1.size
+ b_size = seq2.size
+ ai = bj = mb = 0
+ ma = -1
+ string = seq1.kind_of?(String)
+
+ # Process all the lines in the match vector.
+ loop do
+ # Find next match indices +ma+ and +mb+
+ loop do
+ ma += 1
+ break unless ma < matches.size and matches[ma].nil?
+ end
+
+ break if ma >= matches.size # end of matches?
+
+ mb = matches[ma]
+
+ # Change(seq2)
+ while (ai < ma) or (bj < mb)
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ bx = string ? seq2[bj, 1] : seq2[bj]
+
+ case [(ai < ma), (bj < mb)]
+ when [true, true]
+ if callbacks.respond_to?(:change)
+ event = Diff::LCS::ContextChange.new('!', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.change(event)
+ ai += 1
+ else
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_a(event)
+ ai += 1
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_b(event)
+ end
+
+ bj += 1
+ when [true, false]
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_a(event)
+ ai += 1
+ when [false, true]
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_b(event)
+ bj += 1
+ end
+ end
+
+ # Match
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ bx = string ? seq2[bj, 1] : seq2[bj]
+ event = Diff::LCS::ContextChange.new('=', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.match(event)
+ ai += 1
+ bj += 1
+ end
+
+ while (ai < a_size) or (bj < b_size)
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ bx = string ? seq2[bj, 1] : seq2[bj]
+
+ case [(ai < a_size), (bj < b_size)]
+ when [true, true]
+ if callbacks.respond_to?(:change)
+ event = Diff::LCS::ContextChange.new('!', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.change(event)
+ ai += 1
+ else
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_a(event)
+ ai += 1
+ ax = string ? seq1[ai, 1] : seq1[ai]
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_b(event)
+ end
+
+ bj += 1
+ when [true, false]
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_a(event)
+ ai += 1
+ when [false, true]
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
+ event = yield event if block_given?
+ callbacks.discard_b(event)
+ bj += 1
+ end
+ end
+ end
+
+ PATCH_MAP = { #:nodoc:
+ :patch => { '+' => '+', '-' => '-', '!' => '!', '=' => '=' }.freeze,
+ :unpatch => { '+' => '-', '-' => '+', '!' => '!', '=' => '=' }.freeze
+ }.freeze
+
+ # Applies a +patchset+ to the sequence +src+ according to the +direction+
+ # (:patch or :unpatch), producing a new sequence.
+ #
+ # If the +direction+ is not specified, Diff::LCS::patch will attempt to
+ # discover the direction of the +patchset+.
+ #
+ # A +patchset+ can be considered to apply forward (:patch) if the
+ # following expression is true:
+ #
+ # patch(s1, diff(s1, s2)) -> s2
+ #
+ # A +patchset+ can be considered to apply backward (:unpatch) if the
+ # following expression is true:
+ #
+ # patch(s2, diff(s1, s2)) -> s1
+ #
+ # If the +patchset+ contains no changes, the +src+ value will be returned as
+ # either src.dup or +src+. A +patchset+ can be deemed as having no
+ # changes if the following predicate returns true:
+ #
+ # patchset.empty? or
+ # patchset.flatten(1).all? { |change| change.unchanged? }
+ #
+ # === Patchsets
+ #
+ # A +patchset+ is always an enumerable sequence of changes, hunks of changes,
+ # or a mix of the two. A hunk of changes is an enumerable sequence of
+ # changes:
+ #
+ # [ # patchset
+ # # change
+ # [ # hunk
+ # # change
+ # ]
+ # ]
+ #
+ # The +patch+ method accepts patchsets that are enumerable sequences
+ # containing either Diff::LCS::Change objects (or a subclass) or the array
+ # representations of those objects. Prior to application, array
+ # representations of Diff::LCS::Change objects will be reified.
+ def patch(src, patchset, direction = nil)
+ # Normalize the patchset.
+ has_changes, patchset = Diff::LCS::Internals.analyze_patchset(patchset)
+
+ return src.respond_to?(:dup) ? src.dup : src unless has_changes
+
+ string = src.kind_of?(String)
+ # Start with a new empty type of the source's class
+ res = src.class.new
+
+ direction ||= Diff::LCS::Internals.intuit_diff_direction(src, patchset)
+
+ ai = bj = 0
+
+ patch_map = PATCH_MAP[direction]
+
+ patchset.each do |change|
+ # Both Change and ContextChange support #action
+ action = patch_map[change.action]
+
+ case change
+ when Diff::LCS::ContextChange
+ case direction
+ when :patch
+ el = change.new_element
+ op = change.old_position
+ np = change.new_position
+ when :unpatch
+ el = change.old_element
+ op = change.new_position
+ np = change.old_position
+ end
+
+ case action
+ when '-' # Remove details from the old string
+ while ai < op
+ res << (string ? src[ai, 1] : src[ai])
+ ai += 1
+ bj += 1
+ end
+ ai += 1
+ when '+'
+ while bj < np
+ res << (string ? src[ai, 1] : src[ai])
+ ai += 1
+ bj += 1
+ end
+
+ res << el
+ bj += 1
+ when '='
+ # This only appears in sdiff output with the SDiff callback.
+ # Therefore, we only need to worry about dealing with a single
+ # element.
+ res << el
+
+ ai += 1
+ bj += 1
+ when '!'
+ while ai < op
+ res << (string ? src[ai, 1] : src[ai])
+ ai += 1
+ bj += 1
+ end
+
+ bj += 1
+ ai += 1
+
+ res << el
+ end
+ when Diff::LCS::Change
+ case action
+ when '-'
+ while ai < change.position
+ res << (string ? src[ai, 1] : src[ai])
+ ai += 1
+ bj += 1
+ end
+ ai += 1
+ when '+'
+ while bj < change.position
+ res << (string ? src[ai, 1] : src[ai])
+ ai += 1
+ bj += 1
+ end
+
+ bj += 1
+
+ res << change.element
+ end
+ end
+ end
+
+ while ai < src.size
+ res << (string ? src[ai, 1] : src[ai])
+ ai += 1
+ bj += 1
+ end
+
+ res
+ end
+
+ # Given a set of patchset, convert the current version to the prior version.
+ # Does no auto-discovery.
+ def unpatch!(src, patchset)
+ patch(src, patchset, :unpatch)
+ end
+
+ # Given a set of patchset, convert the current version to the next version.
+ # Does no auto-discovery.
+ def patch!(src, patchset)
+ patch(src, patchset, :patch)
+ end
+end
+
+require 'diff/lcs/backports'
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/array.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/array.rb
new file mode 100644
index 000000000..5c250f6b3
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/array.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+require 'diff/lcs'
+
+class Array
+ include Diff::LCS
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/backports.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/backports.rb
new file mode 100644
index 000000000..642fc9c97
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/backports.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+unless 0.respond_to?(:positive?)
+ class Fixnum # rubocop:disable Lint/UnifiedInteger, Style/Documentation
+ def positive?
+ self > 0 # rubocop:disable Style/NumericPredicate
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/block.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/block.rb
new file mode 100644
index 000000000..430702dd9
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/block.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+# A block is an operation removing, adding, or changing a group of items.
+# Basically, this is just a list of changes, where each change adds or
+# deletes a single item. Used by bin/ldiff.
+class Diff::LCS::Block
+ attr_reader :changes, :insert, :remove
+
+ def initialize(chunk)
+ @changes = []
+ @insert = []
+ @remove = []
+
+ chunk.each do |item|
+ @changes << item
+ @remove << item if item.deleting?
+ @insert << item if item.adding?
+ end
+ end
+
+ def diff_size
+ @insert.size - @remove.size
+ end
+
+ def op
+ case [@remove.empty?, @insert.empty?]
+ when [false, false]
+ '!'
+ when [false, true]
+ '-'
+ when [true, false]
+ '+'
+ else # [true, true]
+ '^'
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/callbacks.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/callbacks.rb
new file mode 100644
index 000000000..2a7665b95
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/callbacks.rb
@@ -0,0 +1,325 @@
+# frozen_string_literal: true
+
+require 'diff/lcs/change'
+
+module Diff::LCS # rubocop:disable Style/Documentation
+ # This callback object implements the default set of callback events,
+ # which only returns the event itself. Note that #finished_a and
+ # #finished_b are not implemented -- I haven't yet figured out where they
+ # would be useful.
+ #
+ # Note that this is intended to be called as is, e.g.,
+ #
+ # Diff::LCS.LCS(seq1, seq2, Diff::LCS::DefaultCallbacks)
+ class DefaultCallbacks
+ class << self
+ # Called when two items match.
+ def match(event)
+ event
+ end
+
+ # Called when the old value is discarded in favour of the new value.
+ def discard_a(event)
+ event
+ end
+
+ # Called when the new value is discarded in favour of the old value.
+ def discard_b(event)
+ event
+ end
+
+ # Called when both the old and new values have changed.
+ def change(event)
+ event
+ end
+
+ private :new
+ end
+ end
+
+ # An alias for DefaultCallbacks that is used in
+ # Diff::LCS#traverse_sequences.
+ #
+ # Diff::LCS.LCS(seq1, seq2, Diff::LCS::SequenceCallbacks)
+ SequenceCallbacks = DefaultCallbacks
+
+ # An alias for DefaultCallbacks that is used in
+ # Diff::LCS#traverse_balanced.
+ #
+ # Diff::LCS.LCS(seq1, seq2, Diff::LCS::BalancedCallbacks)
+ BalancedCallbacks = DefaultCallbacks
+
+ def self.callbacks_for(callbacks)
+ callbacks.new rescue callbacks
+ end
+end
+
+# This will produce a compound array of simple diff change objects. Each
+# element in the #diffs array is a +hunk+ or +hunk+ array, where each
+# element in each +hunk+ array is a single Change object representing the
+# addition or removal of a single element from one of the two tested
+# sequences. The +hunk+ provides the full context for the changes.
+#
+# diffs = Diff::LCS.diff(seq1, seq2)
+# # This example shows a simplified array format.
+# # [ [ [ '-', 0, 'a' ] ], # 1
+# # [ [ '+', 2, 'd' ] ], # 2
+# # [ [ '-', 4, 'h' ], # 3
+# # [ '+', 4, 'f' ] ],
+# # [ [ '+', 6, 'k' ] ], # 4
+# # [ [ '-', 8, 'n' ], # 5
+# # [ '-', 9, 'p' ],
+# # [ '+', 9, 'r' ],
+# # [ '+', 10, 's' ],
+# # [ '+', 11, 't' ] ] ]
+#
+# There are five hunks here. The first hunk says that the +a+ at position 0
+# of the first sequence should be deleted ('-'). The second hunk
+# says that the +d+ at position 2 of the second sequence should be inserted
+# ('+'). The third hunk says that the +h+ at position 4 of the
+# first sequence should be removed and replaced with the +f+ from position 4
+# of the second sequence. The other two hunks are described similarly.
+#
+# === Use
+#
+# This callback object must be initialised and is used by the Diff::LCS#diff
+# method.
+#
+# cbo = Diff::LCS::DiffCallbacks.new
+# Diff::LCS.LCS(seq1, seq2, cbo)
+# cbo.finish
+#
+# Note that the call to #finish is absolutely necessary, or the last set of
+# changes will not be visible. Alternatively, can be used as:
+#
+# cbo = Diff::LCS::DiffCallbacks.new { |tcbo| Diff::LCS.LCS(seq1, seq2, tcbo) }
+#
+# The necessary #finish call will be made.
+#
+# === Simplified Array Format
+#
+# The simplified array format used in the example above can be obtained
+# with:
+#
+# require 'pp'
+# pp diffs.map { |e| e.map { |f| f.to_a } }
+class Diff::LCS::DiffCallbacks
+ # Returns the difference set collected during the diff process.
+ attr_reader :diffs
+
+ def initialize # :yields self:
+ @hunk = []
+ @diffs = []
+
+ return unless block_given?
+
+ begin
+ yield self
+ ensure
+ finish
+ end
+ end
+
+ # Finalizes the diff process. If an unprocessed hunk still exists, then it
+ # is appended to the diff list.
+ def finish
+ finish_hunk
+ end
+
+ def match(_event)
+ finish_hunk
+ end
+
+ def discard_a(event)
+ @hunk << Diff::LCS::Change.new('-', event.old_position, event.old_element)
+ end
+
+ def discard_b(event)
+ @hunk << Diff::LCS::Change.new('+', event.new_position, event.new_element)
+ end
+
+ def finish_hunk
+ @diffs << @hunk unless @hunk.empty?
+ @hunk = []
+ end
+ private :finish_hunk
+end
+
+# This will produce a compound array of contextual diff change objects. Each
+# element in the #diffs array is a "hunk" array, where each element in each
+# "hunk" array is a single change. Each change is a Diff::LCS::ContextChange
+# that contains both the old index and new index values for the change. The
+# "hunk" provides the full context for the changes. Both old and new objects
+# will be presented for changed objects. +nil+ will be substituted for a
+# discarded object.
+#
+# seq1 = %w(a b c e h j l m n p)
+# seq2 = %w(b c d e f j k l m r s t)
+#
+# diffs = Diff::LCS.diff(seq1, seq2, Diff::LCS::ContextDiffCallbacks)
+# # This example shows a simplified array format.
+# # [ [ [ '-', [ 0, 'a' ], [ 0, nil ] ] ], # 1
+# # [ [ '+', [ 3, nil ], [ 2, 'd' ] ] ], # 2
+# # [ [ '-', [ 4, 'h' ], [ 4, nil ] ], # 3
+# # [ '+', [ 5, nil ], [ 4, 'f' ] ] ],
+# # [ [ '+', [ 6, nil ], [ 6, 'k' ] ] ], # 4
+# # [ [ '-', [ 8, 'n' ], [ 9, nil ] ], # 5
+# # [ '+', [ 9, nil ], [ 9, 'r' ] ],
+# # [ '-', [ 9, 'p' ], [ 10, nil ] ],
+# # [ '+', [ 10, nil ], [ 10, 's' ] ],
+# # [ '+', [ 10, nil ], [ 11, 't' ] ] ] ]
+#
+# The five hunks shown are comprised of individual changes; if there is a
+# related set of changes, they are still shown individually.
+#
+# This callback can also be used with Diff::LCS#sdiff, which will produce
+# results like:
+#
+# diffs = Diff::LCS.sdiff(seq1, seq2, Diff::LCS::ContextCallbacks)
+# # This example shows a simplified array format.
+# # [ [ [ "-", [ 0, "a" ], [ 0, nil ] ] ], # 1
+# # [ [ "+", [ 3, nil ], [ 2, "d" ] ] ], # 2
+# # [ [ "!", [ 4, "h" ], [ 4, "f" ] ] ], # 3
+# # [ [ "+", [ 6, nil ], [ 6, "k" ] ] ], # 4
+# # [ [ "!", [ 8, "n" ], [ 9, "r" ] ], # 5
+# # [ "!", [ 9, "p" ], [ 10, "s" ] ],
+# # [ "+", [ 10, nil ], [ 11, "t" ] ] ] ]
+#
+# The five hunks are still present, but are significantly shorter in total
+# presentation, because changed items are shown as changes ("!") instead of
+# potentially "mismatched" pairs of additions and deletions.
+#
+# The result of this operation is similar to that of
+# Diff::LCS::SDiffCallbacks. They may be compared as:
+#
+# s = Diff::LCS.sdiff(seq1, seq2).reject { |e| e.action == "=" }
+# c = Diff::LCS.sdiff(seq1, seq2, Diff::LCS::ContextDiffCallbacks).flatten(1)
+#
+# s == c # -> true
+#
+# === Use
+#
+# This callback object must be initialised and can be used by the
+# Diff::LCS#diff or Diff::LCS#sdiff methods.
+#
+# cbo = Diff::LCS::ContextDiffCallbacks.new
+# Diff::LCS.LCS(seq1, seq2, cbo)
+# cbo.finish
+#
+# Note that the call to #finish is absolutely necessary, or the last set of
+# changes will not be visible. Alternatively, can be used as:
+#
+# cbo = Diff::LCS::ContextDiffCallbacks.new { |tcbo| Diff::LCS.LCS(seq1, seq2, tcbo) }
+#
+# The necessary #finish call will be made.
+#
+# === Simplified Array Format
+#
+# The simplified array format used in the example above can be obtained
+# with:
+#
+# require 'pp'
+# pp diffs.map { |e| e.map { |f| f.to_a } }
+class Diff::LCS::ContextDiffCallbacks < Diff::LCS::DiffCallbacks
+ def discard_a(event)
+ @hunk << Diff::LCS::ContextChange.simplify(event)
+ end
+
+ def discard_b(event)
+ @hunk << Diff::LCS::ContextChange.simplify(event)
+ end
+
+ def change(event)
+ @hunk << Diff::LCS::ContextChange.simplify(event)
+ end
+end
+
+# This will produce a simple array of diff change objects. Each element in
+# the #diffs array is a single ContextChange. In the set of #diffs provided
+# by SDiffCallbacks, both old and new objects will be presented for both
+# changed and unchanged objects. +nil+ will be substituted
+# for a discarded object.
+#
+# The diffset produced by this callback, when provided to Diff::LCS#sdiff,
+# will compute and display the necessary components to show two sequences
+# and their minimized differences side by side, just like the Unix utility
+# +sdiff+.
+#
+# same same
+# before | after
+# old < -
+# - > new
+#
+# seq1 = %w(a b c e h j l m n p)
+# seq2 = %w(b c d e f j k l m r s t)
+#
+# diffs = Diff::LCS.sdiff(seq1, seq2)
+# # This example shows a simplified array format.
+# # [ [ "-", [ 0, "a"], [ 0, nil ] ],
+# # [ "=", [ 1, "b"], [ 0, "b" ] ],
+# # [ "=", [ 2, "c"], [ 1, "c" ] ],
+# # [ "+", [ 3, nil], [ 2, "d" ] ],
+# # [ "=", [ 3, "e"], [ 3, "e" ] ],
+# # [ "!", [ 4, "h"], [ 4, "f" ] ],
+# # [ "=", [ 5, "j"], [ 5, "j" ] ],
+# # [ "+", [ 6, nil], [ 6, "k" ] ],
+# # [ "=", [ 6, "l"], [ 7, "l" ] ],
+# # [ "=", [ 7, "m"], [ 8, "m" ] ],
+# # [ "!", [ 8, "n"], [ 9, "r" ] ],
+# # [ "!", [ 9, "p"], [ 10, "s" ] ],
+# # [ "+", [ 10, nil], [ 11, "t" ] ] ]
+#
+# The result of this operation is similar to that of
+# Diff::LCS::ContextDiffCallbacks. They may be compared as:
+#
+# s = Diff::LCS.sdiff(seq1, seq2).reject { |e| e.action == "=" }
+# c = Diff::LCS.sdiff(seq1, seq2, Diff::LCS::ContextDiffCallbacks).flatten(1)
+#
+# s == c # -> true
+#
+# === Use
+#
+# This callback object must be initialised and is used by the Diff::LCS#sdiff
+# method.
+#
+# cbo = Diff::LCS::SDiffCallbacks.new
+# Diff::LCS.LCS(seq1, seq2, cbo)
+#
+# As with the other initialisable callback objects,
+# Diff::LCS::SDiffCallbacks can be initialised with a block. As there is no
+# "fininishing" to be done, this has no effect on the state of the object.
+#
+# cbo = Diff::LCS::SDiffCallbacks.new { |tcbo| Diff::LCS.LCS(seq1, seq2, tcbo) }
+#
+# === Simplified Array Format
+#
+# The simplified array format used in the example above can be obtained
+# with:
+#
+# require 'pp'
+# pp diffs.map { |e| e.to_a }
+class Diff::LCS::SDiffCallbacks
+ # Returns the difference set collected during the diff process.
+ attr_reader :diffs
+
+ def initialize #:yields self:
+ @diffs = []
+ yield self if block_given?
+ end
+
+ def match(event)
+ @diffs << Diff::LCS::ContextChange.simplify(event)
+ end
+
+ def discard_a(event)
+ @diffs << Diff::LCS::ContextChange.simplify(event)
+ end
+
+ def discard_b(event)
+ @diffs << Diff::LCS::ContextChange.simplify(event)
+ end
+
+ def change(event)
+ @diffs << Diff::LCS::ContextChange.simplify(event)
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/change.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/change.rb
new file mode 100644
index 000000000..76faf831b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/change.rb
@@ -0,0 +1,174 @@
+# frozen_string_literal: true
+
+# Represents a simplistic (non-contextual) change. Represents the removal or
+# addition of an element from either the old or the new sequenced
+# enumerable.
+class Diff::LCS::Change
+ IntClass = 1.class # Fixnum is deprecated in Ruby 2.4 # rubocop:disable Naming/ConstantName
+
+ # The only actions valid for changes are '+' (add), '-' (delete), '='
+ # (no change), '!' (changed), '<' (tail changes from first sequence), or
+ # '>' (tail changes from second sequence). The last two ('<>') are only
+ # found with Diff::LCS::diff and Diff::LCS::sdiff.
+ VALID_ACTIONS = %w(+ - = ! > <).freeze
+
+ def self.valid_action?(action)
+ VALID_ACTIONS.include? action
+ end
+
+ # Returns the action this Change represents.
+ attr_reader :action
+
+ # Returns the position of the Change.
+ attr_reader :position
+ # Returns the sequence element of the Change.
+ attr_reader :element
+
+ def initialize(*args)
+ @action, @position, @element = *args
+
+ fail "Invalid Change Action '#{@action}'" unless Diff::LCS::Change.valid_action?(@action)
+ fail 'Invalid Position Type' unless @position.kind_of? IntClass
+ end
+
+ def inspect(*_args)
+ "#<#{self.class}: #{to_a.inspect}>"
+ end
+
+ def to_a
+ [@action, @position, @element]
+ end
+
+ alias to_ary to_a
+
+ def self.from_a(arr)
+ arr = arr.flatten(1)
+ case arr.size
+ when 5
+ Diff::LCS::ContextChange.new(*(arr[0...5]))
+ when 3
+ Diff::LCS::Change.new(*(arr[0...3]))
+ else
+ fail 'Invalid change array format provided.'
+ end
+ end
+
+ include Comparable
+
+ def ==(other)
+ (self.class == other.class) and
+ (action == other.action) and
+ (position == other.position) and
+ (element == other.element)
+ end
+
+ def <=>(other)
+ r = action <=> other.action
+ r = position <=> other.position if r.zero?
+ r = element <=> other.element if r.zero?
+ r
+ end
+
+ def adding?
+ @action == '+'
+ end
+
+ def deleting?
+ @action == '-'
+ end
+
+ def unchanged?
+ @action == '='
+ end
+
+ def changed?
+ @action == '!'
+ end
+
+ def finished_a?
+ @action == '>'
+ end
+
+ def finished_b?
+ @action == '<'
+ end
+end
+
+# Represents a contextual change. Contains the position and values of the
+# elements in the old and the new sequenced enumerables as well as the action
+# taken.
+class Diff::LCS::ContextChange < Diff::LCS::Change
+ # We don't need these two values.
+ undef :position
+ undef :element
+
+ # Returns the old position being changed.
+ attr_reader :old_position
+ # Returns the new position being changed.
+ attr_reader :new_position
+ # Returns the old element being changed.
+ attr_reader :old_element
+ # Returns the new element being changed.
+ attr_reader :new_element
+
+ def initialize(*args)
+ @action, @old_position, @old_element, @new_position, @new_element = *args
+
+ fail "Invalid Change Action '#{@action}'" unless Diff::LCS::Change.valid_action?(@action)
+ fail 'Invalid (Old) Position Type' unless @old_position.nil? or @old_position.kind_of? IntClass
+ fail 'Invalid (New) Position Type' unless @new_position.nil? or @new_position.kind_of? IntClass
+ end
+
+ def to_a
+ [
+ @action,
+ [@old_position, @old_element],
+ [@new_position, @new_element]
+ ]
+ end
+
+ alias to_ary to_a
+
+ def self.from_a(arr)
+ Diff::LCS::Change.from_a(arr)
+ end
+
+ # Simplifies a context change for use in some diff callbacks. '<' actions
+ # are converted to '-' and '>' actions are converted to '+'.
+ def self.simplify(event)
+ ea = event.to_a
+
+ case ea[0]
+ when '-'
+ ea[2][1] = nil
+ when '<'
+ ea[0] = '-'
+ ea[2][1] = nil
+ when '+'
+ ea[1][1] = nil
+ when '>'
+ ea[0] = '+'
+ ea[1][1] = nil
+ end
+
+ Diff::LCS::ContextChange.from_a(ea)
+ end
+
+ def ==(other)
+ (self.class == other.class) and
+ (@action == other.action) and
+ (@old_position == other.old_position) and
+ (@new_position == other.new_position) and
+ (@old_element == other.old_element) and
+ (@new_element == other.new_element)
+ end
+
+ def <=>(other)
+ r = @action <=> other.action
+ r = @old_position <=> other.old_position if r.zero?
+ r = @new_position <=> other.new_position if r.zero?
+ r = @old_element <=> other.old_element if r.zero?
+ r = @new_element <=> other.new_element if r.zero?
+ r
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/htmldiff.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/htmldiff.rb
new file mode 100644
index 000000000..f12220b3b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/htmldiff.rb
@@ -0,0 +1,150 @@
+# frozen_string_literal: true
+
+require 'cgi'
+
+# Produce a simple HTML diff view.
+class Diff::LCS::HTMLDiff
+ class << self
+ attr_accessor :can_expand_tabs #:nodoc:
+ end
+ self.can_expand_tabs = true
+
+ class Callbacks #:nodoc:
+ attr_accessor :output
+ attr_accessor :match_class
+ attr_accessor :only_a_class
+ attr_accessor :only_b_class
+
+ def initialize(output, options = {})
+ @output = output
+ options ||= {}
+
+ @match_class = options[:match_class] || 'match'
+ @only_a_class = options[:only_a_class] || 'only_a'
+ @only_b_class = options[:only_b_class] || 'only_b'
+ end
+
+ def htmlize(element, css_class)
+ element = ' ' if element.empty?
+ %Q(#{element}
\n)
+ end
+ private :htmlize
+
+ # This will be called with both lines are the same
+ def match(event)
+ @output << htmlize(event.old_element, :match_class)
+ end
+
+ # This will be called when there is a line in A that isn't in B
+ def discard_a(event)
+ @output << htmlize(event.old_element, :only_a_class)
+ end
+
+ # This will be called when there is a line in B that isn't in A
+ def discard_b(event)
+ @output << htmlize(event.new_element, :only_b_class)
+ end
+ end
+
+ DEFAULT_OPTIONS = {
+ :expand_tabs => nil,
+ :output => nil,
+ :css => nil,
+ :title => nil
+ }.freeze
+
+ DEFAULT_CSS = <<-CSS
+body { margin: 0; }
+.diff
+{
+ border: 1px solid black;
+ margin: 1em 2em;
+}
+p
+{
+ margin-left: 2em;
+}
+pre
+{
+ padding-left: 1em;
+ margin: 0;
+ font-family: Inconsolata, Consolas, Lucida, Courier, monospaced;
+ white-space: pre;
+}
+.match { }
+.only_a
+{
+ background-color: #fdd;
+ color: red;
+ text-decoration: line-through;
+}
+.only_b
+{
+ background-color: #ddf;
+ color: blue;
+ border-left: 3px solid blue
+}
+h1 { margin-left: 2em; }
+ CSS
+
+ def initialize(left, right, options = nil)
+ @left = left
+ @right = right
+ @options = options
+
+ @options = DEFAULT_OPTIONS.dup if @options.nil?
+ end
+
+ def verify_options
+ @options[:expand_tabs] ||= 4
+ @options[:expand_tabs] = 4 if @options[:expand_tabs].negative?
+
+ @options[:output] ||= $stdout
+
+ @options[:css] ||= DEFAULT_CSS.dup
+
+ @options[:title] ||= 'diff'
+ end
+ private :verify_options
+
+ attr_reader :options
+
+ def run
+ verify_options
+
+ if @options[:expand_tabs].positive? && self.class.can_expand_tabs
+ formatter = Text::Format.new
+ formatter.tabstop = @options[:expand_tabs]
+
+ @left.map! do |line| formatter.expand(line.chomp) end
+ @right.map! do |line| formatter.expand(line.chomp) end
+ end
+
+ @left.map! do |line| CGI.escapeHTML(line.chomp) end
+ @right.map! do |line| CGI.escapeHTML(line.chomp) end
+
+ @options[:output] << <<-OUTPUT
+
+
+ #{@options[:title]}
+
+
+
+ #{@options[:title]}
+ Legend: Only in Old
+ Only in New
+
+ OUTPUT
+
+ callbacks = Callbacks.new(@options[:output])
+ Diff::LCS.traverse_sequences(@left, @right, callbacks)
+
+ @options[:output] << <<-OUTPUT
+
+
+
+ OUTPUT
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/hunk.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/hunk.rb
new file mode 100644
index 000000000..49b520ead
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/hunk.rb
@@ -0,0 +1,358 @@
+# frozen_string_literal: true
+
+require 'diff/lcs/block'
+
+# A Hunk is a group of Blocks which overlap because of the context surrounding
+# each block. (So if we're not using context, every hunk will contain one
+# block.) Used in the diff program (bin/ldiff).
+class Diff::LCS::Hunk
+ OLD_DIFF_OP_ACTION = { '+' => 'a', '-' => 'd', '!' => 'c' }.freeze #:nodoc:
+ ED_DIFF_OP_ACTION = { '+' => 'a', '-' => 'd', '!' => 'c' }.freeze #:nodoc:
+
+ private_constant :OLD_DIFF_OP_ACTION, :ED_DIFF_OP_ACTION if respond_to?(:private_constant)
+
+ # Create a hunk using references to both the old and new data, as well as the
+ # piece of data.
+ def initialize(data_old, data_new, piece, flag_context, file_length_difference)
+ # At first, a hunk will have just one Block in it
+ @blocks = [Diff::LCS::Block.new(piece)]
+
+ if @blocks[0].remove.empty? && @blocks[0].insert.empty?
+ fail "Cannot build a hunk from #{piece.inspect}; has no add or remove actions"
+ end
+
+ if String.method_defined?(:encoding)
+ @preferred_data_encoding = data_old.fetch(0, data_new.fetch(0, '')).encoding
+ end
+
+ @data_old = data_old
+ @data_new = data_new
+
+ before = after = file_length_difference
+ after += @blocks[0].diff_size
+ @file_length_difference = after # The caller must get this manually
+ @max_diff_size = @blocks.map { |e| e.diff_size.abs }.max
+
+
+ # Save the start & end of each array. If the array doesn't exist (e.g.,
+ # we're only adding items in this block), then figure out the line number
+ # based on the line number of the other file and the current difference in
+ # file lengths.
+ if @blocks[0].remove.empty?
+ a1 = a2 = nil
+ else
+ a1 = @blocks[0].remove[0].position
+ a2 = @blocks[0].remove[-1].position
+ end
+
+ if @blocks[0].insert.empty?
+ b1 = b2 = nil
+ else
+ b1 = @blocks[0].insert[0].position
+ b2 = @blocks[0].insert[-1].position
+ end
+
+ @start_old = a1 || (b1 - before)
+ @start_new = b1 || (a1 + before)
+ @end_old = a2 || (b2 - after)
+ @end_new = b2 || (a2 + after)
+
+ self.flag_context = flag_context
+ end
+
+ attr_reader :blocks
+ attr_reader :start_old, :start_new
+ attr_reader :end_old, :end_new
+ attr_reader :file_length_difference
+
+ # Change the "start" and "end" fields to note that context should be added
+ # to this hunk.
+ attr_accessor :flag_context # rubocop:disable Layout/EmptyLinesAroundAttributeAccessor
+ undef :flag_context=
+ def flag_context=(context) #:nodoc: # rubocop:disable Lint/DuplicateMethods
+ return if context.nil? or context.zero?
+
+ add_start = context > @start_old ? @start_old : context
+
+ @start_old -= add_start
+ @start_new -= add_start
+
+ old_size = @data_old.size
+
+ add_end =
+ if (@end_old + context) > old_size
+ old_size - @end_old
+ else
+ context
+ end
+
+ add_end = @max_diff_size if add_end >= old_size
+
+ @end_old += add_end
+ @end_new += add_end
+ end
+
+ # Merges this hunk and the provided hunk together if they overlap. Returns
+ # a truthy value so that if there is no overlap, you can know the merge
+ # was skipped.
+ def merge(hunk)
+ return unless overlaps?(hunk)
+
+ @start_old = hunk.start_old
+ @start_new = hunk.start_new
+ blocks.unshift(*hunk.blocks)
+ end
+ alias unshift merge
+
+ # Determines whether there is an overlap between this hunk and the
+ # provided hunk. This will be true if the difference between the two hunks
+ # start or end positions is within one position of each other.
+ def overlaps?(hunk)
+ hunk and (((@start_old - hunk.end_old) <= 1) or
+ ((@start_new - hunk.end_new) <= 1))
+ end
+
+ # Returns a diff string based on a format.
+ def diff(format, last = false)
+ case format
+ when :old
+ old_diff(last)
+ when :unified
+ unified_diff(last)
+ when :context
+ context_diff(last)
+ when :ed
+ self
+ when :reverse_ed, :ed_finish
+ ed_diff(format, last)
+ else
+ fail "Unknown diff format #{format}."
+ end
+ end
+
+ # Note that an old diff can't have any context. Therefore, we know that
+ # there's only one block in the hunk.
+ def old_diff(_last = false)
+ warn 'Expecting only one block in an old diff hunk!' if @blocks.size > 1
+
+ block = @blocks[0]
+
+ # Calculate item number range. Old diff range is just like a context
+ # diff range, except the ranges are on one line with the action between
+ # them.
+ s = encode("#{context_range(:old, ',')}#{OLD_DIFF_OP_ACTION[block.op]}#{context_range(:new, ',')}\n")
+ # If removing anything, just print out all the remove lines in the hunk
+ # which is just all the remove lines in the block.
+ unless block.remove.empty?
+ @data_old[@start_old..@end_old].each { |e| s << encode('< ') + e.chomp + encode("\n") }
+ end
+
+ s << encode("---\n") if block.op == '!'
+
+ unless block.insert.empty?
+ @data_new[@start_new..@end_new].each { |e| s << encode('> ') + e.chomp + encode("\n") }
+ end
+
+ s
+ end
+ private :old_diff
+
+ def unified_diff(last = false)
+ # Calculate item number range.
+ s = encode("@@ -#{unified_range(:old, last)} +#{unified_range(:new, last)} @@\n")
+
+ # Outlist starts containing the hunk of the old file. Removing an item
+ # just means putting a '-' in front of it. Inserting an item requires
+ # getting it from the new file and splicing it in. We splice in
+ # +num_added+ items. Remove blocks use +num_added+ because splicing
+ # changed the length of outlist.
+ #
+ # We remove +num_removed+ items. Insert blocks use +num_removed+
+ # because their item numbers -- corresponding to positions in the NEW
+ # file -- don't take removed items into account.
+ lo, hi, num_added, num_removed = @start_old, @end_old, 0, 0
+
+ outlist = @data_old[lo..hi].map { |e| String.new("#{encode(' ')}#{e.chomp}") }
+
+ last_block = blocks[-1]
+
+ if last
+ old_missing_newline = missing_last_newline?(@data_old)
+ new_missing_newline = missing_last_newline?(@data_new)
+ end
+
+ @blocks.each do |block|
+ block.remove.each do |item|
+ op = item.action.to_s # -
+ offset = item.position - lo + num_added
+ outlist[offset][0, 1] = encode(op)
+ num_removed += 1
+ end
+
+ if last && block == last_block && old_missing_newline && !new_missing_newline
+ outlist << encode('\\ No newline at end of file')
+ num_removed += 1
+ end
+
+ block.insert.each do |item|
+ op = item.action.to_s # +
+ offset = item.position - @start_new + num_removed
+ outlist[offset, 0] = encode(op) + @data_new[item.position].chomp
+ num_added += 1
+ end
+ end
+
+ outlist << encode('\\ No newline at end of file') if last && new_missing_newline
+
+ s << outlist.join(encode("\n"))
+
+ s
+ end
+ private :unified_diff
+
+ def context_diff(last = false)
+ s = encode("***************\n")
+ s << encode("*** #{context_range(:old, ',', last)} ****\n")
+ r = context_range(:new, ',', last)
+
+ if last
+ old_missing_newline = missing_last_newline?(@data_old)
+ new_missing_newline = missing_last_newline?(@data_new)
+ end
+
+ # Print out file 1 part for each block in context diff format if there
+ # are any blocks that remove items
+ lo, hi = @start_old, @end_old
+ removes = @blocks.reject { |e| e.remove.empty? }
+
+ unless removes.empty?
+ outlist = @data_old[lo..hi].map { |e| String.new("#{encode(' ')}#{e.chomp}") }
+
+ last_block = removes[-1]
+
+ removes.each do |block|
+ block.remove.each do |item|
+ outlist[item.position - lo][0, 1] = encode(block.op) # - or !
+ end
+
+ if last && block == last_block && old_missing_newline
+ outlist << encode('\\ No newline at end of file')
+ end
+ end
+
+ s << outlist.join(encode("\n")) << encode("\n")
+ end
+
+ s << encode("--- #{r} ----\n")
+ lo, hi = @start_new, @end_new
+ inserts = @blocks.reject { |e| e.insert.empty? }
+
+ unless inserts.empty?
+ outlist = @data_new[lo..hi].map { |e| String.new("#{encode(' ')}#{e.chomp}") }
+
+ last_block = inserts[-1]
+
+ inserts.each do |block|
+ block.insert.each do |item|
+ outlist[item.position - lo][0, 1] = encode(block.op) # + or !
+ end
+
+ if last && block == last_block && new_missing_newline
+ outlist << encode('\\ No newline at end of file')
+ end
+ end
+ s << outlist.join(encode("\n"))
+ end
+
+ s
+ end
+ private :context_diff
+
+ def ed_diff(format, _last = false)
+ warn 'Expecting only one block in an old diff hunk!' if @blocks.size > 1
+
+ s =
+ if format == :reverse_ed
+ encode("#{ED_DIFF_OP_ACTION[@blocks[0].op]}#{context_range(:old, ',')}\n")
+ else
+ encode("#{context_range(:old, ' ')}#{ED_DIFF_OP_ACTION[@blocks[0].op]}\n")
+ end
+
+ unless @blocks[0].insert.empty?
+ @data_new[@start_new..@end_new].each do |e|
+ s << e.chomp + encode("\n")
+ end
+ s << encode(".\n")
+ end
+ s
+ end
+ private :ed_diff
+
+ # Generate a range of item numbers to print. Only print 1 number if the
+ # range has only one item in it. Otherwise, it's 'start,end'
+ def context_range(mode, op, last = false)
+ case mode
+ when :old
+ s, e = (@start_old + 1), (@end_old + 1)
+ when :new
+ s, e = (@start_new + 1), (@end_new + 1)
+ end
+
+ e -= 1 if last
+ e = 1 if e.zero?
+
+ s < e ? "#{s}#{op}#{e}" : e.to_s
+ end
+ private :context_range
+
+ # Generate a range of item numbers to print for unified diff. Print number
+ # where block starts, followed by number of lines in the block
+ # (don't print number of lines if it's 1)
+ def unified_range(mode, last)
+ case mode
+ when :old
+ s, e = (@start_old + 1), (@end_old + 1)
+ when :new
+ s, e = (@start_new + 1), (@end_new + 1)
+ end
+
+ length = e - s + (last ? 0 : 1)
+
+ first = length < 2 ? e : s # "strange, but correct"
+ length <= 1 ? first.to_s : "#{first},#{length}"
+ end
+ private :unified_range
+
+ def missing_last_newline?(data)
+ newline = encode("\n")
+
+ if data[-2]
+ data[-2].end_with?(newline) && !data[-1].end_with?(newline)
+ elsif data[-1]
+ !data[-1].end_with?(newline)
+ else
+ true
+ end
+ end
+
+ if String.method_defined?(:encoding)
+ def encode(literal, target_encoding = @preferred_data_encoding)
+ literal.encode target_encoding
+ end
+
+ def encode_as(string, *args)
+ args.map { |arg| arg.encode(string.encoding) }
+ end
+ else
+ def encode(literal, _target_encoding = nil)
+ literal
+ end
+
+ def encode_as(_string, *args)
+ args
+ end
+ end
+
+ private :encode
+ private :encode_as
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/internals.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/internals.rb
new file mode 100644
index 000000000..ef7766743
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/internals.rb
@@ -0,0 +1,308 @@
+# frozen_string_literal: true
+
+class << Diff::LCS
+ def diff_traversal(method, seq1, seq2, callbacks, &block)
+ callbacks = callbacks_for(callbacks)
+ case method
+ when :diff
+ traverse_sequences(seq1, seq2, callbacks)
+ when :sdiff
+ traverse_balanced(seq1, seq2, callbacks)
+ end
+ callbacks.finish if callbacks.respond_to? :finish
+
+ if block
+ callbacks.diffs.map do |hunk|
+ if hunk.kind_of? Array
+ hunk.map { |hunk_block| block[hunk_block] }
+ else
+ block[hunk]
+ end
+ end
+ else
+ callbacks.diffs
+ end
+ end
+ private :diff_traversal
+end
+
+module Diff::LCS::Internals # :nodoc:
+end
+
+class << Diff::LCS::Internals
+ # Compute the longest common subsequence between the sequenced
+ # Enumerables +a+ and +b+. The result is an array whose contents is such
+ # that
+ #
+ # result = Diff::LCS::Internals.lcs(a, b)
+ # result.each_with_index do |e, i|
+ # assert_equal(a[i], b[e]) unless e.nil?
+ # end
+ def lcs(a, b)
+ a_start = b_start = 0
+ a_finish = a.size - 1
+ b_finish = b.size - 1
+ vector = []
+
+ # Collect any common elements at the beginning...
+ while (a_start <= a_finish) and (b_start <= b_finish) and (a[a_start] == b[b_start])
+ vector[a_start] = b_start
+ a_start += 1
+ b_start += 1
+ end
+
+ # Now the end...
+ while (a_start <= a_finish) and (b_start <= b_finish) and (a[a_finish] == b[b_finish])
+ vector[a_finish] = b_finish
+ a_finish -= 1
+ b_finish -= 1
+ end
+
+ # Now, compute the equivalence classes of positions of elements.
+ # An explanation for how this works: https://codeforces.com/topic/92191
+ b_matches = position_hash(b, b_start..b_finish)
+
+ thresh = []
+ links = []
+ string = a.kind_of?(String)
+
+ (a_start..a_finish).each do |i|
+ ai = string ? a[i, 1] : a[i]
+ bm = b_matches[ai]
+ k = nil
+ bm.reverse_each do |j|
+ # Although the threshold check is not mandatory for this to work,
+ # it may have an optimization purpose
+ # An attempt to remove it: https://github.com/halostatue/diff-lcs/pull/72
+ # Why it is reintroduced: https://github.com/halostatue/diff-lcs/issues/78
+ if k and (thresh[k] > j) and (thresh[k - 1] < j)
+ thresh[k] = j
+ else
+ k = replace_next_larger(thresh, j, k)
+ end
+ links[k] = [k.positive? ? links[k - 1] : nil, i, j] unless k.nil?
+ end
+ end
+
+ unless thresh.empty?
+ link = links[thresh.size - 1]
+ until link.nil?
+ vector[link[1]] = link[2]
+ link = link[0]
+ end
+ end
+
+ vector
+ end
+
+ # This method will analyze the provided patchset to provide a single-pass
+ # normalization (conversion of the array form of Diff::LCS::Change objects to
+ # the object form of same) and detection of whether the patchset represents
+ # changes to be made.
+ def analyze_patchset(patchset, depth = 0)
+ fail 'Patchset too complex' if depth > 1
+
+ has_changes = false
+ new_patchset = []
+
+ # Format:
+ # [ # patchset
+ # # hunk (change)
+ # [ # hunk
+ # # change
+ # ]
+ # ]
+
+ patchset.each do |hunk|
+ case hunk
+ when Diff::LCS::Change
+ has_changes ||= !hunk.unchanged?
+ new_patchset << hunk
+ when Array
+ # Detect if the 'hunk' is actually an array-format change object.
+ if Diff::LCS::Change.valid_action? hunk[0]
+ hunk = Diff::LCS::Change.from_a(hunk)
+ has_changes ||= !hunk.unchanged?
+ new_patchset << hunk
+ else
+ with_changes, hunk = analyze_patchset(hunk, depth + 1)
+ has_changes ||= with_changes
+ new_patchset.concat(hunk)
+ end
+ else
+ fail ArgumentError, "Cannot normalise a hunk of class #{hunk.class}."
+ end
+ end
+
+ [has_changes, new_patchset]
+ end
+
+ # Examine the patchset and the source to see in which direction the
+ # patch should be applied.
+ #
+ # WARNING: By default, this examines the whole patch, so this could take
+ # some time. This also works better with Diff::LCS::ContextChange or
+ # Diff::LCS::Change as its source, as an array will cause the creation
+ # of one of the above.
+ def intuit_diff_direction(src, patchset, limit = nil)
+ string = src.kind_of?(String)
+ count = left_match = left_miss = right_match = right_miss = 0
+
+ patchset.each do |change|
+ count += 1
+
+ case change
+ when Diff::LCS::ContextChange
+ le = string ? src[change.old_position, 1] : src[change.old_position]
+ re = string ? src[change.new_position, 1] : src[change.new_position]
+
+ case change.action
+ when '-' # Remove details from the old string
+ if le == change.old_element
+ left_match += 1
+ else
+ left_miss += 1
+ end
+ when '+'
+ if re == change.new_element
+ right_match += 1
+ else
+ right_miss += 1
+ end
+ when '='
+ left_miss += 1 if le != change.old_element
+ right_miss += 1 if re != change.new_element
+ when '!'
+ if le == change.old_element
+ left_match += 1
+ elsif re == change.new_element
+ right_match += 1
+ else
+ left_miss += 1
+ right_miss += 1
+ end
+ end
+ when Diff::LCS::Change
+ # With a simplistic change, we can't tell the difference between
+ # the left and right on '!' actions, so we ignore those. On '='
+ # actions, if there's a miss, we miss both left and right.
+ element = string ? src[change.position, 1] : src[change.position]
+
+ case change.action
+ when '-'
+ if element == change.element
+ left_match += 1
+ else
+ left_miss += 1
+ end
+ when '+'
+ if element == change.element
+ right_match += 1
+ else
+ right_miss += 1
+ end
+ when '='
+ if element != change.element
+ left_miss += 1
+ right_miss += 1
+ end
+ end
+ end
+
+ break if !limit.nil? && (count > limit)
+ end
+
+ no_left = left_match.zero? && left_miss.positive?
+ no_right = right_match.zero? && right_miss.positive?
+
+ case [no_left, no_right]
+ when [false, true]
+ :patch
+ when [true, false]
+ :unpatch
+ else
+ case left_match <=> right_match
+ when 1
+ if left_miss.zero?
+ :patch
+ else
+ :unpatch
+ end
+ when -1
+ if right_miss.zero?
+ :unpatch
+ else
+ :patch
+ end
+ else
+ fail "The provided patchset does not appear to apply to the provided \
+enumerable as either source or destination value."
+ end
+ end
+ end
+
+ # Find the place at which +value+ would normally be inserted into the
+ # Enumerable. If that place is already occupied by +value+, do nothing
+ # and return +nil+. If the place does not exist (i.e., it is off the end
+ # of the Enumerable), add it to the end. Otherwise, replace the element
+ # at that point with +value+. It is assumed that the Enumerable's values
+ # are numeric.
+ #
+ # This operation preserves the sort order.
+ def replace_next_larger(enum, value, last_index = nil)
+ # Off the end?
+ if enum.empty? or (value > enum[-1])
+ enum << value
+ return enum.size - 1
+ end
+
+ # Binary search for the insertion point
+ last_index ||= enum.size - 1
+ first_index = 0
+ while first_index <= last_index
+ i = (first_index + last_index) >> 1
+
+ found = enum[i]
+
+ return nil if value == found
+
+ if value > found
+ first_index = i + 1
+ else
+ last_index = i - 1
+ end
+ end
+
+ # The insertion point is in first_index; overwrite the next larger
+ # value.
+ enum[first_index] = value
+ first_index
+ end
+ private :replace_next_larger
+
+ # If +vector+ maps the matching elements of another collection onto this
+ # Enumerable, compute the inverse of +vector+ that maps this Enumerable
+ # onto the collection. (Currently unused.)
+ def inverse_vector(a, vector)
+ inverse = a.dup
+ (0...vector.size).each do |i|
+ inverse[vector[i]] = i unless vector[i].nil?
+ end
+ inverse
+ end
+ private :inverse_vector
+
+ # Returns a hash mapping each element of an Enumerable to the set of
+ # positions it occupies in the Enumerable, optionally restricted to the
+ # elements specified in the range of indexes specified by +interval+.
+ def position_hash(enum, interval)
+ string = enum.kind_of?(String)
+ hash = Hash.new { |h, k| h[k] = [] }
+ interval.each do |i|
+ k = string ? enum[i, 1] : enum[i]
+ hash[k] << i
+ end
+ hash
+ end
+ private :position_hash
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/ldiff.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/ldiff.rb
new file mode 100644
index 000000000..17b374cc3
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/ldiff.rb
@@ -0,0 +1,171 @@
+# frozen_string_literal: true
+
+require 'optparse'
+require 'ostruct'
+require 'diff/lcs/hunk'
+
+module Diff::LCS::Ldiff #:nodoc:
+ BANNER = <<-COPYRIGHT
+ldiff #{Diff::LCS::VERSION}
+ Copyright 2004-2019 Austin Ziegler
+
+ Part of Diff::LCS.
+ https://github.com/halostatue/diff-lcs
+
+ This program is free software. It may be redistributed and/or modified under
+ the terms of the GPL version 2 (or later), the Perl Artistic licence, or the
+ MIT licence.
+ COPYRIGHT
+end
+
+class << Diff::LCS::Ldiff
+ attr_reader :format, :lines #:nodoc:
+ attr_reader :file_old, :file_new #:nodoc:
+ attr_reader :data_old, :data_new #:nodoc:
+
+ def run(args, _input = $stdin, output = $stdout, error = $stderr) #:nodoc:
+ @binary = nil
+
+ args.options do |o|
+ o.banner = "Usage: #{File.basename($0)} [options] oldfile newfile"
+ o.separator ''
+ o.on(
+ '-c', '-C', '--context [LINES]', Integer,
+ 'Displays a context diff with LINES lines', 'of context. Default 3 lines.'
+ ) do |ctx|
+ @format = :context
+ @lines = ctx || 3
+ end
+ o.on(
+ '-u', '-U', '--unified [LINES]', Integer,
+ 'Displays a unified diff with LINES lines', 'of context. Default 3 lines.'
+ ) do |ctx|
+ @format = :unified
+ @lines = ctx || 3
+ end
+ o.on('-e', 'Creates an \'ed\' script to change', 'oldfile to newfile.') do |_ctx|
+ @format = :ed
+ end
+ o.on('-f', 'Creates an \'ed\' script to change', 'oldfile to newfile in reverse order.') do |_ctx|
+ @format = :reverse_ed
+ end
+ o.on(
+ '-a', '--text',
+ 'Treat the files as text and compare them', 'line-by-line, even if they do not seem', 'to be text.'
+ ) do |_txt|
+ @binary = false
+ end
+ o.on('--binary', 'Treats the files as binary.') do |_bin|
+ @binary = true
+ end
+ o.on('-q', '--brief', 'Report only whether or not the files', 'differ, not the details.') do |_ctx|
+ @format = :report
+ end
+ o.on_tail('--help', 'Shows this text.') do
+ error << o
+ return 0
+ end
+ o.on_tail('--version', 'Shows the version of Diff::LCS.') do
+ error << Diff::LCS::Ldiff::BANNER
+ return 0
+ end
+ o.on_tail ''
+ o.on_tail 'By default, runs produces an "old-style" diff, with output like UNIX diff.'
+ o.parse!
+ end
+
+ unless args.size == 2
+ error << args.options
+ return 127
+ end
+
+ # Defaults are for old-style diff
+ @format ||= :old
+ @lines ||= 0
+
+ file_old, file_new = *ARGV
+
+ case @format
+ when :context
+ char_old = '*' * 3
+ char_new = '-' * 3
+ when :unified
+ char_old = '-' * 3
+ char_new = '+' * 3
+ end
+
+ # After we've read up to a certain point in each file, the number of
+ # items we've read from each file will differ by FLD (could be 0).
+ file_length_difference = 0
+
+ data_old = IO.read(file_old)
+ data_new = IO.read(file_new)
+
+ # Test binary status
+ if @binary.nil?
+ old_txt = data_old[0, 4096].scan(/\0/).empty?
+ new_txt = data_new[0, 4096].scan(/\0/).empty?
+ @binary = !old_txt || !new_txt
+ end
+
+ unless @binary
+ data_old = data_old.lines.to_a
+ data_new = data_new.lines.to_a
+ end
+
+ # diff yields lots of pieces, each of which is basically a Block object
+ if @binary
+ diffs = (data_old == data_new)
+ else
+ diffs = Diff::LCS.diff(data_old, data_new)
+ diffs = nil if diffs.empty?
+ end
+
+ return 0 unless diffs
+
+ if @format == :report
+ output << "Files #{file_old} and #{file_new} differ\n"
+ return 1
+ end
+
+ if (@format == :unified) or (@format == :context)
+ ft = File.stat(file_old).mtime.localtime.strftime('%Y-%m-%d %H:%M:%S.000000000 %z')
+ output << "#{char_old} #{file_old}\t#{ft}\n"
+ ft = File.stat(file_new).mtime.localtime.strftime('%Y-%m-%d %H:%M:%S.000000000 %z')
+ output << "#{char_new} #{file_new}\t#{ft}\n"
+ end
+
+ # Loop over hunks. If a hunk overlaps with the last hunk, join them.
+ # Otherwise, print out the old one.
+ oldhunk = hunk = nil
+
+ if @format == :ed
+ real_output = output
+ output = []
+ end
+
+ diffs.each do |piece|
+ begin # rubocop:disable Style/RedundantBegin
+ hunk = Diff::LCS::Hunk.new(data_old, data_new, piece, @lines, file_length_difference)
+ file_length_difference = hunk.file_length_difference
+
+ next unless oldhunk
+ next if @lines.positive? and hunk.merge(oldhunk)
+
+ output << oldhunk.diff(@format)
+ output << "\n" if @format == :unified
+ ensure
+ oldhunk = hunk
+ end
+ end
+
+ last = oldhunk.diff(@format, true)
+ last << "\n" if last.respond_to?(:end_with?) && !last.end_with?("\n")
+
+ output << last
+
+ output.reverse_each { |e| real_output << e.diff(:ed_finish) } if @format == :ed
+
+ 1
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/string.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/string.rb
new file mode 100644
index 000000000..9ab32e92b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/lib/diff/lcs/string.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+class String
+ include Diff::LCS
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/change_spec.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/change_spec.rb
new file mode 100644
index 000000000..b8d3443e5
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/change_spec.rb
@@ -0,0 +1,89 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Diff::LCS::Change do
+ describe 'an add' do
+ subject { described_class.new('+', 0, 'element') }
+ it { should_not be_deleting }
+ it { should be_adding }
+ it { should_not be_unchanged }
+ it { should_not be_changed }
+ it { should_not be_finished_a }
+ it { should_not be_finished_b }
+ end
+
+ describe 'a delete' do
+ subject { described_class.new('-', 0, 'element') }
+ it { should be_deleting }
+ it { should_not be_adding }
+ it { should_not be_unchanged }
+ it { should_not be_changed }
+ it { should_not be_finished_a }
+ it { should_not be_finished_b }
+ end
+
+ describe 'an unchanged' do
+ subject { described_class.new('=', 0, 'element') }
+ it { should_not be_deleting }
+ it { should_not be_adding }
+ it { should be_unchanged }
+ it { should_not be_changed }
+ it { should_not be_finished_a }
+ it { should_not be_finished_b }
+ end
+
+ describe 'a changed' do
+ subject { described_class.new('!', 0, 'element') }
+ it { should_not be_deleting }
+ it { should_not be_adding }
+ it { should_not be_unchanged }
+ it { should be_changed }
+ it { should_not be_finished_a }
+ it { should_not be_finished_b }
+ end
+
+ describe 'a finished_a' do
+ subject { described_class.new('>', 0, 'element') }
+ it { should_not be_deleting }
+ it { should_not be_adding }
+ it { should_not be_unchanged }
+ it { should_not be_changed }
+ it { should be_finished_a }
+ it { should_not be_finished_b }
+ end
+
+ describe 'a finished_b' do
+ subject { described_class.new('<', 0, 'element') }
+ it { should_not be_deleting }
+ it { should_not be_adding }
+ it { should_not be_unchanged }
+ it { should_not be_changed }
+ it { should_not be_finished_a }
+ it { should be_finished_b }
+ end
+
+ describe 'as array' do
+ it 'should be converted' do
+ action, position, element = described_class.new('!', 0, 'element')
+ expect(action).to eq '!'
+ expect(position).to eq 0
+ expect(element).to eq 'element'
+ end
+ end
+end
+
+describe Diff::LCS::ContextChange do
+ describe 'as array' do
+ it 'should be converted' do
+ action, (old_position, old_element), (new_position, new_element) =
+ described_class.new('!', 1, 'old_element', 2, 'new_element')
+
+ expect(action).to eq '!'
+ expect(old_position).to eq 1
+ expect(old_element).to eq 'old_element'
+ expect(new_position).to eq 2
+ expect(new_element).to eq 'new_element'
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/diff_spec.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/diff_spec.rb
new file mode 100644
index 000000000..e7d632aef
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/diff_spec.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Diff::LCS, '.diff' do
+ include Diff::LCS::SpecHelper::Matchers
+
+ it 'correctly diffs seq1 to seq2' do
+ diff_s1_s2 = Diff::LCS.diff(seq1, seq2)
+ expect(change_diff(correct_forward_diff)).to eq(diff_s1_s2)
+ end
+
+ it 'correctly diffs seq2 to seq1' do
+ diff_s2_s1 = Diff::LCS.diff(seq2, seq1)
+ expect(change_diff(correct_backward_diff)).to eq(diff_s2_s1)
+ end
+
+ it 'correctly diffs against an empty sequence' do
+ diff = Diff::LCS.diff(word_sequence, [])
+ correct_diff = [
+ [
+ ['-', 0, 'abcd'],
+ ['-', 1, 'efgh'],
+ ['-', 2, 'ijkl'],
+ ['-', 3, 'mnopqrstuvwxyz']
+ ]
+ ]
+
+ expect(change_diff(correct_diff)).to eq(diff)
+
+ diff = Diff::LCS.diff([], word_sequence)
+ correct_diff.each do |hunk|
+ hunk.each do |change| change[0] = '+' end
+ end
+ expect(change_diff(correct_diff)).to eq(diff)
+ end
+
+ it "correctly diffs 'xx' and 'xaxb'" do
+ left = 'xx'
+ right = 'xaxb'
+ expect(Diff::LCS.patch(left, Diff::LCS.diff(left, right))).to eq(right)
+ end
+
+ it 'returns an empty diff with (hello, hello)' do
+ expect(Diff::LCS.diff(hello, hello)).to be_empty
+ end
+
+ it 'returns an empty diff with (hello_ary, hello_ary)' do
+ expect(Diff::LCS.diff(hello_ary, hello_ary)).to be_empty
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/aX b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/aX
new file mode 100644
index 000000000..5765d6a73
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/aX
@@ -0,0 +1 @@
+aX
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/bXaX b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/bXaX
new file mode 100644
index 000000000..a1c813dbd
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/bXaX
@@ -0,0 +1 @@
+bXaX
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ds1.csv b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ds1.csv
new file mode 100644
index 000000000..9ac84281d
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ds1.csv
@@ -0,0 +1,50 @@
+1,3
+2,7
+3,13
+4,21
+5,31
+6,43
+7,57
+8,73
+9,91
+10,111
+11,133
+12,157
+13,183
+14,211
+15,241
+16,273
+17,307
+18,343
+19,381
+20,421
+21,463
+22,507
+23,553
+24,601
+25,651
+26,703
+27,757
+28,813
+29,871
+30,931
+31,993
+32,1057
+33,1123
+34,1191
+35,1261
+36,1333
+37,1407
+38,1483
+39,1561
+40,1641
+41,1723
+42,1807
+43,1893
+44,1981
+45,2071
+46,2163
+47,2257
+48,2353
+49,2451
+50,2500
\ No newline at end of file
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ds2.csv b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ds2.csv
new file mode 100644
index 000000000..797de7619
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ds2.csv
@@ -0,0 +1,51 @@
+ 1,3
+2,7
+3,13
+4,21
+5,31
+6,42
+7,57
+8,73
+9,91
+10,111
+11,133
+12,157
+13,183
+14,211
+15,241
+16,273
+17,307
+18,343
+19,200
+20,421
+21,463
+22,507
+23,553
+24,601
+25,651
+26,703
+27,757
+28,813
+29,871
+30,931
+31,123
+32,1057
+33,1123
+34,1000
+35,1261
+36,1333
+37,1407
+38,1483
+39,1561
+40,1641
+41,1723
+42,1807
+43,1893
+44,1981
+45,2071
+46,2163
+47,1524
+48,2353
+49,2451
+50,2500
+51,2520
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff
new file mode 100644
index 000000000..fa1a34796
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff
@@ -0,0 +1,4 @@
+1c1
+< aX
+---
+> bXaX
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-c b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-c
new file mode 100644
index 000000000..0e1ad9986
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-c
@@ -0,0 +1,7 @@
+*** spec/fixtures/aX 2020-06-23 11:15:32.000000000 -0400
+--- spec/fixtures/bXaX 2020-06-23 11:15:32.000000000 -0400
+***************
+*** 1 ****
+! aX
+--- 1 ----
+! bXaX
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-e b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-e
new file mode 100644
index 000000000..13e0f7f05
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-e
@@ -0,0 +1,3 @@
+1c
+bXaX
+.
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-f b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-f
new file mode 100644
index 000000000..77710c76e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-f
@@ -0,0 +1,3 @@
+c1
+bXaX
+.
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-u b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-u
new file mode 100644
index 000000000..b84f71805
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff-u
@@ -0,0 +1,5 @@
+--- spec/fixtures/aX 2020-06-23 11:15:32.000000000 -0400
++++ spec/fixtures/bXaX 2020-06-23 11:15:32.000000000 -0400
+@@ -1 +1 @@
+-aX
++bXaX
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef
new file mode 100644
index 000000000..8b98efb1e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef
@@ -0,0 +1,4 @@
+3c3
+< "description": "hi"
+---
+> "description": "lo"
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-c b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-c
new file mode 100644
index 000000000..efbfa1957
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-c
@@ -0,0 +1,15 @@
+*** spec/fixtures/old-chef 2020-06-23 23:18:20.000000000 -0400
+--- spec/fixtures/new-chef 2020-06-23 23:18:20.000000000 -0400
+***************
+*** 1,4 ****
+ {
+ "name": "x",
+! "description": "hi"
+ }
+\ No newline at end of file
+--- 1,4 ----
+ {
+ "name": "x",
+! "description": "lo"
+ }
+\ No newline at end of file
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-e b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-e
new file mode 100644
index 000000000..775d881c1
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-e
@@ -0,0 +1,3 @@
+3c
+ "description": "lo"
+.
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-f b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-f
new file mode 100644
index 000000000..9bf1e67f0
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-f
@@ -0,0 +1,3 @@
+c3
+ "description": "lo"
+.
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-u b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-u
new file mode 100644
index 000000000..dbacd8898
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef-u
@@ -0,0 +1,9 @@
+--- spec/fixtures/old-chef 2020-06-23 23:18:20.000000000 -0400
++++ spec/fixtures/new-chef 2020-06-23 23:18:20.000000000 -0400
+@@ -1,4 +1,4 @@
+ {
+ "name": "x",
+- "description": "hi"
++ "description": "lo"
+ }
+\ No newline at end of file
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2 b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2
new file mode 100644
index 000000000..496b3dc8c
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2
@@ -0,0 +1,7 @@
+2d1
+< recipe[b::default]
+14a14,17
+> recipe[o::new]
+> recipe[p::new]
+> recipe[q::new]
+> recipe[r::new]
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-c b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-c
new file mode 100644
index 000000000..8349a7a80
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-c
@@ -0,0 +1,20 @@
+*** spec/fixtures/old-chef2 2020-06-30 09:43:35.000000000 -0400
+--- spec/fixtures/new-chef2 2020-06-30 09:44:32.000000000 -0400
+***************
+*** 1,5 ****
+ recipe[a::default]
+- recipe[b::default]
+ recipe[c::default]
+ recipe[d::default]
+ recipe[e::default]
+--- 1,4 ----
+***************
+*** 12,14 ****
+--- 11,17 ----
+ recipe[l::default]
+ recipe[m::default]
+ recipe[n::default]
++ recipe[o::new]
++ recipe[p::new]
++ recipe[q::new]
++ recipe[r::new]
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-d b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-d
new file mode 100644
index 000000000..ca32a4903
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-d
@@ -0,0 +1,7 @@
+d2
+a14
+recipe[o::new]
+recipe[p::new]
+recipe[q::new]
+recipe[r::new]
+.
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-e b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-e
new file mode 100644
index 000000000..89f3fa07d
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-e
@@ -0,0 +1,7 @@
+14a
+recipe[o::new]
+recipe[p::new]
+recipe[q::new]
+recipe[r::new]
+.
+2d
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-f b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-f
new file mode 100644
index 000000000..ca32a4903
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-f
@@ -0,0 +1,7 @@
+d2
+a14
+recipe[o::new]
+recipe[p::new]
+recipe[q::new]
+recipe[r::new]
+.
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-u b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-u
new file mode 100644
index 000000000..ef025c7e4
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/ldiff/output.diff.chef2-u
@@ -0,0 +1,16 @@
+--- spec/fixtures/old-chef2 2020-06-30 09:43:35.000000000 -0400
++++ spec/fixtures/new-chef2 2020-06-30 09:44:32.000000000 -0400
+@@ -1,5 +1,4 @@
+ recipe[a::default]
+-recipe[b::default]
+ recipe[c::default]
+ recipe[d::default]
+ recipe[e::default]
+@@ -12,3 +11,7 @@
+ recipe[l::default]
+ recipe[m::default]
+ recipe[n::default]
++recipe[o::new]
++recipe[p::new]
++recipe[q::new]
++recipe[r::new]
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/new-chef b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/new-chef
new file mode 100644
index 000000000..d7babfec1
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/new-chef
@@ -0,0 +1,4 @@
+{
+ "name": "x",
+ "description": "lo"
+}
\ No newline at end of file
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/new-chef2 b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/new-chef2
new file mode 100644
index 000000000..8213c73c1
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/new-chef2
@@ -0,0 +1,17 @@
+recipe[a::default]
+recipe[c::default]
+recipe[d::default]
+recipe[e::default]
+recipe[f::default]
+recipe[g::default]
+recipe[h::default]
+recipe[i::default]
+recipe[j::default]
+recipe[k::default]
+recipe[l::default]
+recipe[m::default]
+recipe[n::default]
+recipe[o::new]
+recipe[p::new]
+recipe[q::new]
+recipe[r::new]
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/old-chef b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/old-chef
new file mode 100644
index 000000000..5f9e38b84
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/old-chef
@@ -0,0 +1,4 @@
+{
+ "name": "x",
+ "description": "hi"
+}
\ No newline at end of file
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/old-chef2 b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/old-chef2
new file mode 100644
index 000000000..4a23407fd
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/fixtures/old-chef2
@@ -0,0 +1,14 @@
+recipe[a::default]
+recipe[b::default]
+recipe[c::default]
+recipe[d::default]
+recipe[e::default]
+recipe[f::default]
+recipe[g::default]
+recipe[h::default]
+recipe[i::default]
+recipe[j::default]
+recipe[k::default]
+recipe[l::default]
+recipe[m::default]
+recipe[n::default]
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/hunk_spec.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/hunk_spec.rb
new file mode 100644
index 000000000..b3616bf02
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/hunk_spec.rb
@@ -0,0 +1,83 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+if String.method_defined?(:encoding)
+ require 'diff/lcs/hunk'
+
+ describe Diff::LCS::Hunk do
+ let(:old_data) { ['Tu a un carté avec {count} itéms'.encode('UTF-16LE')] }
+ let(:new_data) { ['Tu a un carte avec {count} items'.encode('UTF-16LE')] }
+ let(:pieces) { Diff::LCS.diff old_data, new_data }
+ let(:hunk) { Diff::LCS::Hunk.new(old_data, new_data, pieces[0], 3, 0) }
+
+ it 'produces a unified diff from the two pieces' do
+ expected = <<-EXPECTED.gsub(/^\s+/, '').encode('UTF-16LE').chomp
+ @@ -1 +1 @@
+ -Tu a un carté avec {count} itéms
+ +Tu a un carte avec {count} items
+ EXPECTED
+
+ expect(hunk.diff(:unified)).to eq(expected)
+ end
+
+ it 'produces a unified diff from the two pieces (last entry)' do
+ expected = <<-EXPECTED.gsub(/^\s+/, '').encode('UTF-16LE').chomp
+ @@ -1 +1 @@
+ -Tu a un carté avec {count} itéms
+ +Tu a un carte avec {count} items
+ \\ No newline at end of file
+ EXPECTED
+
+ expect(hunk.diff(:unified, true)).to eq(expected)
+ end
+
+ it 'produces a context diff from the two pieces' do
+ expected = <<-EXPECTED.gsub(/^\s+/, '').encode('UTF-16LE').chomp
+ ***************
+ *** 1 ****
+ ! Tu a un carté avec {count} itéms
+ --- 1 ----
+ ! Tu a un carte avec {count} items
+ EXPECTED
+
+ expect(hunk.diff(:context)).to eq(expected)
+ end
+
+ it 'produces an old diff from the two pieces' do
+ expected = <<-EXPECTED.gsub(/^ +/, '').encode('UTF-16LE').chomp
+ 1c1
+ < Tu a un carté avec {count} itéms
+ ---
+ > Tu a un carte avec {count} items
+
+ EXPECTED
+
+ expect(hunk.diff(:old)).to eq(expected)
+ end
+
+ it 'produces a reverse ed diff from the two pieces' do
+ expected = <<-EXPECTED.gsub(/^ +/, '').encode('UTF-16LE').chomp
+ c1
+ Tu a un carte avec {count} items
+ .
+
+ EXPECTED
+
+ expect(hunk.diff(:reverse_ed)).to eq(expected)
+ end
+
+ context 'with empty first data set' do
+ let(:old_data) { [] }
+
+ it 'produces a unified diff' do
+ expected = <<-EXPECTED.gsub(/^\s+/, '').encode('UTF-16LE').chomp
+ @@ -1 +1,2 @@
+ +Tu a un carte avec {count} items
+ EXPECTED
+
+ expect(hunk.diff(:unified)).to eq(expected)
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/issues_spec.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/issues_spec.rb
new file mode 100644
index 000000000..ad73123cb
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/issues_spec.rb
@@ -0,0 +1,154 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require 'diff/lcs/hunk'
+
+describe 'Diff::LCS Issues' do
+ include Diff::LCS::SpecHelper::Matchers
+
+ describe 'issue #1' do
+ shared_examples 'handles simple diffs' do |s1, s2, forward_diff|
+ before do
+ @diff_s1_s2 = Diff::LCS.diff(s1, s2)
+ end
+
+ it 'creates the correct diff' do
+ expect(change_diff(forward_diff)).to eq(@diff_s1_s2)
+ end
+
+ it 'creates the correct patch s1->s2' do
+ expect(Diff::LCS.patch(s1, @diff_s1_s2)).to eq(s2)
+ end
+
+ it 'creates the correct patch s2->s1' do
+ expect(Diff::LCS.patch(s2, @diff_s1_s2)).to eq(s1)
+ end
+ end
+
+ describe 'string' do
+ it_has_behavior 'handles simple diffs', 'aX', 'bXaX', [
+ [
+ ['+', 0, 'b'],
+ ['+', 1, 'X']
+ ]
+ ]
+ it_has_behavior 'handles simple diffs', 'bXaX', 'aX', [
+ [
+ ['-', 0, 'b'],
+ ['-', 1, 'X']
+ ]
+ ]
+ end
+
+ describe 'array' do
+ it_has_behavior 'handles simple diffs', %w(a X), %w(b X a X), [
+ [
+ ['+', 0, 'b'],
+ ['+', 1, 'X']
+ ]
+ ]
+ it_has_behavior 'handles simple diffs', %w(b X a X), %w(a X), [
+ [
+ ['-', 0, 'b'],
+ ['-', 1, 'X']
+ ]
+ ]
+ end
+ end
+
+ describe 'issue #57' do
+ it 'should fail with a correct error' do
+ expect {
+ actual = { :category => 'app.rack.request' }
+ expected = { :category => 'rack.middleware', :title => 'Anonymous Middleware' }
+ expect(actual).to eq(expected)
+ }.to raise_error(RSpec::Expectations::ExpectationNotMetError)
+ end
+ end
+
+ describe 'issue #60' do
+ it 'should produce unified output with correct context' do
+ old_data = <<-DATA_OLD.strip.split("\n").map(&:chomp)
+{
+ "name": "x",
+ "description": "hi"
+}
+ DATA_OLD
+
+ new_data = <<-DATA_NEW.strip.split("\n").map(&:chomp)
+{
+ "name": "x",
+ "description": "lo"
+}
+ DATA_NEW
+
+ diff = ::Diff::LCS.diff(old_data, new_data)
+ hunk = ::Diff::LCS::Hunk.new(old_data, new_data, diff.first, 3, 0)
+
+ expect(hunk.diff(:unified)).to eq(<<-EXPECTED.chomp)
+@@ -1,5 +1,5 @@
+ {
+ "name": "x",
+- "description": "hi"
++ "description": "lo"
+ }
+ EXPECTED
+ end
+ end
+
+ describe 'issue #65' do
+ def diff_lines(old_lines, new_lines)
+ file_length_difference = 0
+ previous_hunk = nil
+ output = []
+
+ Diff::LCS.diff(old_lines, new_lines).each do |piece|
+ hunk = Diff::LCS::Hunk.new(old_lines, new_lines, piece, 3, file_length_difference)
+ file_length_difference = hunk.file_length_difference
+ maybe_contiguous_hunks = (previous_hunk.nil? || hunk.merge(previous_hunk))
+
+ output << "#{previous_hunk.diff(:unified)}\n" unless maybe_contiguous_hunks
+
+ previous_hunk = hunk
+ end
+ output << "#{previous_hunk.diff(:unified, true)}\n" unless previous_hunk.nil?
+ output.join
+ end
+
+ it 'should not misplace the new chunk' do
+ old_data = [
+ 'recipe[a::default]', 'recipe[b::default]', 'recipe[c::default]',
+ 'recipe[d::default]', 'recipe[e::default]', 'recipe[f::default]',
+ 'recipe[g::default]', 'recipe[h::default]', 'recipe[i::default]',
+ 'recipe[j::default]', 'recipe[k::default]', 'recipe[l::default]',
+ 'recipe[m::default]', 'recipe[n::default]'
+ ]
+
+ new_data = [
+ 'recipe[a::default]', 'recipe[c::default]', 'recipe[d::default]',
+ 'recipe[e::default]', 'recipe[f::default]', 'recipe[g::default]',
+ 'recipe[h::default]', 'recipe[i::default]', 'recipe[j::default]',
+ 'recipe[k::default]', 'recipe[l::default]', 'recipe[m::default]',
+ 'recipe[n::default]', 'recipe[o::new]', 'recipe[p::new]',
+ 'recipe[q::new]', 'recipe[r::new]'
+ ]
+
+ expect(diff_lines(old_data, new_data)).to eq(<<-EODIFF)
+@@ -1,5 +1,4 @@
+ recipe[a::default]
+-recipe[b::default]
+ recipe[c::default]
+ recipe[d::default]
+ recipe[e::default]
+@@ -12,3 +11,7 @@
+ recipe[l::default]
+ recipe[m::default]
+ recipe[n::default]
++recipe[o::new]
++recipe[p::new]
++recipe[q::new]
++recipe[r::new]
+ EODIFF
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/lcs_spec.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/lcs_spec.rb
new file mode 100644
index 000000000..94428fd17
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/lcs_spec.rb
@@ -0,0 +1,56 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Diff::LCS::Internals, '.lcs' do
+ include Diff::LCS::SpecHelper::Matchers
+
+ it 'returns a meaningful LCS array with (seq1, seq2)' do
+ res = Diff::LCS::Internals.lcs(seq1, seq2)
+ # The result of the LCS (less the +nil+ values) must be as long as the
+ # correct result.
+ expect(res.compact.size).to eq(correct_lcs.size)
+ expect(res).to correctly_map_sequence(seq1).to_other_sequence(seq2)
+
+ # Compact these transformations and they should be the correct LCS.
+ x_seq1 = (0...res.size).map { |ix| res[ix] ? seq1[ix] : nil }.compact
+ x_seq2 = (0...res.size).map { |ix| res[ix] ? seq2[res[ix]] : nil }.compact
+
+ expect(x_seq1).to eq(correct_lcs)
+ expect(x_seq2).to eq(correct_lcs)
+ end
+
+ it 'returns all indexes with (hello, hello)' do
+ expect(Diff::LCS::Internals.lcs(hello, hello)).to \
+ eq((0...hello.size).to_a)
+ end
+
+ it 'returns all indexes with (hello_ary, hello_ary)' do
+ expect(Diff::LCS::Internals.lcs(hello_ary, hello_ary)).to \
+ eq((0...hello_ary.size).to_a)
+ end
+end
+
+describe Diff::LCS, '.LCS' do
+ include Diff::LCS::SpecHelper::Matchers
+
+ it 'returns the correct compacted values from Diff::LCS.LCS' do
+ res = Diff::LCS.LCS(seq1, seq2)
+ expect(res).to eq(correct_lcs)
+ expect(res.compact).to eq(res)
+ end
+
+ it 'is transitive' do
+ res = Diff::LCS.LCS(seq2, seq1)
+ expect(res).to eq(correct_lcs)
+ expect(res.compact).to eq(res)
+ end
+
+ it 'returns %W(h e l l o) with (hello, hello)' do
+ expect(Diff::LCS.LCS(hello, hello)).to eq(hello.split(//))
+ end
+
+ it 'returns hello_ary with (hello_ary, hello_ary)' do
+ expect(Diff::LCS.LCS(hello_ary, hello_ary)).to eq(hello_ary)
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/ldiff_spec.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/ldiff_spec.rb
new file mode 100644
index 000000000..a2468f811
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/ldiff_spec.rb
@@ -0,0 +1,87 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'bin/ldiff' do
+ include CaptureSubprocessIO
+
+ fixtures = [
+ { :name => 'output.diff', :left => 'aX', :right => 'bXaX' },
+ { :name => 'output.diff.chef', :left => 'old-chef', :right => 'new-chef' },
+ { :name => 'output.diff.chef2', :left => 'old-chef2', :right => 'new-chef2' }
+ ].product([nil, '-e', '-f', '-c', '-u']).map { |(fixture, flag)|
+ fixture = fixture.dup
+ fixture[:flag] = flag
+ fixture
+ }
+
+ def self.test_ldiff(fixture)
+ desc = [
+ fixture[:flag],
+ "spec/fixtures/#{fixture[:left]}",
+ "spec/fixtures/#{fixture[:right]}",
+ '#',
+ '=>',
+ "spec/fixtures/ldiff/#{fixture[:name]}#{fixture[:flag]}"
+ ].join(' ')
+
+ it desc do
+ expect(run_ldiff(fixture)).to eq(read_fixture(fixture))
+ end
+ end
+
+ fixtures.each do |fixture|
+ test_ldiff(fixture)
+ end
+
+ def read_fixture(options)
+ fixture = options.fetch(:name)
+ flag = options.fetch(:flag)
+ name = "spec/fixtures/ldiff/#{fixture}#{flag}"
+ data = IO.__send__(IO.respond_to?(:binread) ? :binread : :read, name)
+ clean_data(data, flag)
+ end
+
+ def clean_data(data, flag)
+ data =
+ case flag
+ when '-c', '-u'
+ clean_output_timestamp(data)
+ else
+ data
+ end
+ data.gsub(/\r\n?/, "\n")
+ end
+
+ def clean_output_timestamp(data)
+ data.gsub(
+ %r{
+ ^
+ [-+*]{3}
+ \s*
+ spec/fixtures/(\S+)
+ \s*
+ \d{4}-\d\d-\d\d
+ \s*
+ \d\d:\d\d:\d\d(?:\.\d+)
+ \s*
+ (?:[-+]\d{4}|Z)
+ }x,
+ '*** spec/fixtures/\1 0000-00-00 :00 =>:00 =>00.000000000 -0000'
+ )
+ end
+
+ def run_ldiff(options)
+ flag = options.fetch(:flag)
+ left = options.fetch(:left)
+ right = options.fetch(:right)
+
+ stdout, stderr = capture_subprocess_io do
+ system("ruby -Ilib bin/ldiff #{flag} spec/fixtures/#{left} spec/fixtures/#{right}")
+ end
+
+ expect(stderr).to be_empty if RUBY_VERSION >= '1.9'
+ expect(stdout).not_to be_empty
+ clean_data(stdout, flag)
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/patch_spec.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/patch_spec.rb
new file mode 100644
index 000000000..11b098117
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/patch_spec.rb
@@ -0,0 +1,416 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Diff::LCS.patch' do
+ include Diff::LCS::SpecHelper::Matchers
+
+ shared_examples 'patch sequences correctly' do
+ it 'correctly patches left-to-right (patch autodiscovery)' do
+ expect(Diff::LCS.patch(s1, patch_set)).to eq(s2)
+ end
+
+ it 'correctly patches left-to-right (explicit patch)' do
+ expect(Diff::LCS.patch(s1, patch_set, :patch)).to eq(s2)
+ expect(Diff::LCS.patch!(s1, patch_set)).to eq(s2)
+ end
+
+ it 'correctly patches right-to-left (unpatch autodiscovery)' do
+ expect(Diff::LCS.patch(s2, patch_set)).to eq(s1)
+ end
+
+ it 'correctly patches right-to-left (explicit unpatch)' do
+ expect(Diff::LCS.patch(s2, patch_set, :unpatch)).to eq(s1)
+ expect(Diff::LCS.unpatch!(s2, patch_set)).to eq(s1)
+ end
+ end
+
+ describe 'using a Diff::LCS.diff patchset' do
+ describe 'an empty patchset returns the source' do
+ it 'works on a string (hello)' do
+ diff = Diff::LCS.diff(hello, hello)
+ expect(Diff::LCS.patch(hello, diff)).to eq(hello)
+ end
+
+ it 'works on an array %W(h e l l o)' do
+ diff = Diff::LCS.diff(hello_ary, hello_ary)
+ expect(Diff::LCS.patch(hello_ary, diff)).to eq(hello_ary)
+ end
+ end
+
+ describe 'with default diff callbacks (DiffCallbacks)' do
+ describe 'forward (s1 -> s2)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) { Diff::LCS.diff(seq1, seq2) }
+ end
+ end
+
+ describe 'reverse (s2 -> s1)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) { Diff::LCS.diff(seq2, seq1) }
+ end
+ end
+ end
+
+ describe 'with context diff callbacks (ContextDiffCallbacks)' do
+ describe 'forward (s1 -> s2)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) {
+ Diff::LCS.diff(seq1, seq2, Diff::LCS::ContextDiffCallbacks)
+ }
+ end
+ end
+
+ describe 'reverse (s2 -> s1)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) {
+ Diff::LCS.diff(seq2, seq1, Diff::LCS::ContextDiffCallbacks)
+ }
+ end
+ end
+ end
+
+ describe 'with sdiff callbacks (SDiffCallbacks)' do
+ describe 'forward (s1 -> s2)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) {
+ Diff::LCS.diff(seq1, seq2, Diff::LCS::SDiffCallbacks)
+ }
+ end
+ end
+
+ describe 'reverse (s2 -> s1)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) {
+ Diff::LCS.diff(seq2, seq1, Diff::LCS::SDiffCallbacks)
+ }
+ end
+ end
+ end
+ end
+
+ describe 'using a Diff::LCS.sdiff patchset' do
+ describe 'an empty patchset returns the source' do
+ it 'works on a string (hello)' do
+ expect(Diff::LCS.patch(hello, Diff::LCS.sdiff(hello, hello))).to eq(hello)
+ end
+
+ it 'works on an array %W(h e l l o)' do
+ expect(Diff::LCS.patch(hello_ary, Diff::LCS.sdiff(hello_ary, hello_ary))).to eq(hello_ary)
+ end
+ end
+
+ describe 'with default diff callbacks (DiffCallbacks)' do
+ describe 'forward (s1 -> s2)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) {
+ Diff::LCS.sdiff(seq1, seq2, Diff::LCS::DiffCallbacks)
+ }
+ end
+ end
+
+ describe 'reverse (s2 -> s1)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) {
+ Diff::LCS.sdiff(seq2, seq1, Diff::LCS::DiffCallbacks)
+ }
+ end
+ end
+ end
+
+ describe 'with context diff callbacks (DiffCallbacks)' do
+ describe 'forward (s1 -> s2)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) {
+ Diff::LCS.sdiff(seq1, seq2, Diff::LCS::ContextDiffCallbacks)
+ }
+ end
+ end
+
+ describe 'reverse (s2 -> s1)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) {
+ Diff::LCS.sdiff(seq2, seq1, Diff::LCS::ContextDiffCallbacks)
+ }
+ end
+ end
+ end
+
+ describe 'with sdiff callbacks (SDiffCallbacks)' do
+ describe 'forward (s1 -> s2)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:patch_set) { Diff::LCS.sdiff(seq1, seq2) }
+ end
+ end
+
+ describe 'reverse (s2 -> s1)' do
+ it_has_behavior 'patch sequences correctly' do
+ let(:s1) { seq2 }
+ let(:s2) { seq1 }
+ let(:patch_set) { Diff::LCS.sdiff(seq2, seq1) }
+ end
+ end
+ end
+ end
+
+ # Note: because of the error in autodiscovery ("does not autodiscover s1
+ # to s2 patches"), this cannot use the "patch sequences correctly" shared
+ # set. Once the bug in autodiscovery is fixed, this can be converted as
+ # above.
+ describe 'fix bug 891: patchsets do not contain the last equal part' do
+ before :each do
+ @s1 = %w(a b c d e f g h i j k) # rubocop:disable Layout/SpaceInsideArrayPercentLiteral
+ @s2 = %w(a b c d D e f g h i j k)
+ end
+
+ describe 'using Diff::LCS.diff with default diff callbacks' do
+ before :each do
+ @patch_set_s1_s2 = Diff::LCS.diff(@s1, @s2)
+ @patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1)
+ end
+
+ it 'autodiscovers s1 to s2 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 the left-to-right patches' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1)
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1)
+ end
+
+ it 'correctly patches left-to-right (explicit patch)' do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2)
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1)
+ expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2)
+ expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1)
+ end
+
+ it 'correctly patches right-to-left (explicit unpatch)' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1)
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2)
+ expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1)
+ expect(Diff::LCS.unpatch!(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end
+ end
+
+ describe 'using Diff::LCS.diff with context diff callbacks' do
+ before :each do
+ @patch_set_s1_s2 = Diff::LCS.diff(@s1, @s2, Diff::LCS::ContextDiffCallbacks)
+ @patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1, Diff::LCS::ContextDiffCallbacks)
+ end
+
+ it 'autodiscovers s1 to s2 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 the left-to-right patches' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1)
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1)
+ end
+
+ it 'correctly patches left-to-right (explicit patch)' do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2)
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1)
+ expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2)
+ expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1)
+ end
+
+ it 'correctly patches right-to-left (explicit unpatch)' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1)
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2)
+ expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1)
+ expect(Diff::LCS.unpatch!(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end
+ end
+
+ describe 'using Diff::LCS.diff with sdiff callbacks' do
+ before(:each) do
+ @patch_set_s1_s2 = Diff::LCS.diff(@s1, @s2, Diff::LCS::SDiffCallbacks)
+ @patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1, Diff::LCS::SDiffCallbacks)
+ end
+
+ it 'autodiscovers s1 to s2 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 the left-to-right patches' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1)
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1)
+ end
+
+ it 'correctly patches left-to-right (explicit patch)' do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2)
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1)
+ expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2)
+ expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1)
+ end
+
+ it 'correctly patches right-to-left (explicit unpatch)' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1)
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2)
+ expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1)
+ expect(Diff::LCS.unpatch!(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end
+ end
+
+ describe 'using Diff::LCS.sdiff with default sdiff callbacks' do
+ before(:each) do
+ @patch_set_s1_s2 = Diff::LCS.sdiff(@s1, @s2)
+ @patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1)
+ end
+
+ it 'autodiscovers s1 to s2 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 the left-to-right patches' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1)
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1)
+ end
+
+ it 'correctly patches left-to-right (explicit patch)' do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2)
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1)
+ expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2)
+ expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1)
+ end
+
+ it 'correctly patches right-to-left (explicit unpatch)' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1)
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2)
+ expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1)
+ expect(Diff::LCS.unpatch!(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end
+ end
+
+ describe 'using Diff::LCS.sdiff with context diff callbacks' do
+ before(:each) do
+ @patch_set_s1_s2 = Diff::LCS.sdiff(@s1, @s2, Diff::LCS::ContextDiffCallbacks)
+ @patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1, Diff::LCS::ContextDiffCallbacks)
+ end
+
+ it 'autodiscovers s1 to s2 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 the left-to-right patches' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1)
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1)
+ end
+
+ it 'correctly patches left-to-right (explicit patch)' do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2)
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1)
+ expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2)
+ expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1)
+ end
+
+ it 'correctly patches right-to-left (explicit unpatch)' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1)
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2)
+ expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1)
+ expect(Diff::LCS.unpatch!(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end
+ end
+
+ describe 'using Diff::LCS.sdiff with default diff callbacks' do
+ before(:each) do
+ @patch_set_s1_s2 = Diff::LCS.sdiff(@s1, @s2, Diff::LCS::DiffCallbacks)
+ @patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1, Diff::LCS::DiffCallbacks)
+ end
+
+ it 'autodiscovers s1 to s2 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 patches' do
+ expect do
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end.to_not raise_error
+ end
+
+ it 'autodiscovers s2 to s1 the left-to-right patches' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1)
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1)
+ end
+
+ it 'correctly patches left-to-right (explicit patch)' do
+ expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2)
+ expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1)
+ expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2)
+ expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1)
+ end
+
+ it 'correctly patches right-to-left (explicit unpatch)' do
+ expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1)
+ expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2)
+ expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1)
+ expect(Diff::LCS.unpatch!(@s1, @patch_set_s2_s1)).to eq(@s2)
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/sdiff_spec.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/sdiff_spec.rb
new file mode 100644
index 000000000..06d39d6a7
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/sdiff_spec.rb
@@ -0,0 +1,214 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Diff::LCS.sdiff' do
+ include Diff::LCS::SpecHelper::Matchers
+
+ shared_examples 'compare sequences correctly' do
+ it 'compares s1 -> s2 correctly' do
+ expect(Diff::LCS.sdiff(s1, s2)).to eq(context_diff(result))
+ end
+
+ it 'compares s2 -> s1 correctly' do
+ expect(Diff::LCS.sdiff(s2, s1)).to eq(context_diff(reverse_sdiff(result)))
+ end
+ end
+
+ describe 'using seq1 & seq2' do
+ let(:s1) { seq1 }
+ let(:s2) { seq2 }
+ let(:result) { correct_forward_sdiff }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w(abc def yyy xxx ghi jkl) & %w(abc dxf xxx ghi jkl)' do
+ let(:s1) { %w(abc def yyy xxx ghi jkl) }
+ let(:s2) { %w(abc dxf xxx ghi jkl) }
+ let(:result) {
+ [
+ ['=', [0, 'abc'], [0, 'abc']],
+ ['!', [1, 'def'], [1, 'dxf']],
+ ['-', [2, 'yyy'], [2, nil]],
+ ['=', [3, 'xxx'], [2, 'xxx']],
+ ['=', [4, 'ghi'], [3, 'ghi']],
+ ['=', [5, 'jkl'], [4, 'jkl']]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w(a b c d e) & %w(a e)' do
+ let(:s1) { %w(a b c d e) }
+ let(:s2) { %w(a e) }
+ let(:result) {
+ [
+ ['=', [0, 'a'], [0, 'a']],
+ ['-', [1, 'b'], [1, nil]],
+ ['-', [2, 'c'], [1, nil]],
+ ['-', [3, 'd'], [1, nil]],
+ ['=', [4, 'e'], [1, 'e']]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w(a e) & %w(a b c d e)' do
+ let(:s1) { %w(a e) }
+ let(:s2) { %w(a b c d e) }
+ let(:result) {
+ [
+ ['=', [0, 'a'], [0, 'a']],
+ ['+', [1, nil], [1, 'b']],
+ ['+', [1, nil], [2, 'c']],
+ ['+', [1, nil], [3, 'd']],
+ ['=', [1, 'e'], [4, 'e']]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w(v x a e) & %w(w y a b c d e)' do
+ let(:s1) { %w(v x a e) }
+ let(:s2) { %w(w y a b c d e) }
+ let(:result) {
+ [
+ ['!', [0, 'v'], [0, 'w']],
+ ['!', [1, 'x'], [1, 'y']],
+ ['=', [2, 'a'], [2, 'a']],
+ ['+', [3, nil], [3, 'b']],
+ ['+', [3, nil], [4, 'c']],
+ ['+', [3, nil], [5, 'd']],
+ ['=', [3, 'e'], [6, 'e']]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w(x a e) & %w(a b c d e)' do
+ let(:s1) { %w(x a e) }
+ let(:s2) { %w(a b c d e) }
+ let(:result) {
+ [
+ ['-', [0, 'x'], [0, nil]],
+ ['=', [1, 'a'], [0, 'a']],
+ ['+', [2, nil], [1, 'b']],
+ ['+', [2, nil], [2, 'c']],
+ ['+', [2, nil], [3, 'd']],
+ ['=', [2, 'e'], [4, 'e']]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w(a e) & %w(x a b c d e)' do
+ let(:s1) { %w(a e) }
+ let(:s2) { %w(x a b c d e) }
+ let(:result) {
+ [
+ ['+', [0, nil], [0, 'x']],
+ ['=', [0, 'a'], [1, 'a']],
+ ['+', [1, nil], [2, 'b']],
+ ['+', [1, nil], [3, 'c']],
+ ['+', [1, nil], [4, 'd']],
+ ['=', [1, 'e'], [5, 'e']]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w(a e v) & %w(x a b c d e w x)' do
+ let(:s1) { %w(a e v) }
+ let(:s2) { %w(x a b c d e w x) }
+ let(:result) {
+ [
+ ['+', [0, nil], [0, 'x']],
+ ['=', [0, 'a'], [1, 'a']],
+ ['+', [1, nil], [2, 'b']],
+ ['+', [1, nil], [3, 'c']],
+ ['+', [1, nil], [4, 'd']],
+ ['=', [1, 'e'], [5, 'e']],
+ ['!', [2, 'v'], [6, 'w']],
+ ['+', [3, nil], [7, 'x']]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w() & %w(a b c)' do
+ let(:s1) { %w() }
+ let(:s2) { %w(a b c) }
+ let(:result) {
+ [
+ ['+', [0, nil], [0, 'a']],
+ ['+', [0, nil], [1, 'b']],
+ ['+', [0, nil], [2, 'c']]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w(a b c) & %w(1)' do
+ let(:s1) { %w(a b c) }
+ let(:s2) { %w(1) }
+ let(:result) {
+ [
+ ['!', [0, 'a'], [0, '1']],
+ ['-', [1, 'b'], [1, nil]],
+ ['-', [2, 'c'], [1, nil]]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w(a b c) & %w(c)' do
+ let(:s1) { %w(a b c) }
+ let(:s2) { %w(c) }
+ let(:result) {
+ [
+ ['-', [0, 'a'], [0, nil]],
+ ['-', [1, 'b'], [0, nil]],
+ ['=', [2, 'c'], [0, 'c']]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using %w(abcd efgh ijkl mnop) & []' do
+ let(:s1) { %w(abcd efgh ijkl mnop) }
+ let(:s2) { [] }
+ let(:result) {
+ [
+ ['-', [0, 'abcd'], [0, nil]],
+ ['-', [1, 'efgh'], [0, nil]],
+ ['-', [2, 'ijkl'], [0, nil]],
+ ['-', [3, 'mnop'], [0, nil]]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+
+ describe 'using [[1,2]] & []' do
+ let(:s1) { [[1, 2]] }
+ let(:s2) { [] }
+ let(:result) {
+ [
+ ['-', [0, [1, 2]], [0, nil]]
+ ]
+ }
+
+ it_has_behavior 'compare sequences correctly'
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/spec_helper.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/spec_helper.rb
new file mode 100644
index 000000000..41e1f8e93
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/spec_helper.rb
@@ -0,0 +1,374 @@
+# frozen_string_literal: true
+
+require 'rubygems'
+require 'pathname'
+
+require 'psych' if RUBY_VERSION >= '1.9'
+
+if ENV['COVERAGE']
+ require 'simplecov'
+
+ def require_do(resource)
+ require resource
+ yield if block_given?
+ rescue LoadError
+ nil
+ end
+
+ formatters = [SimpleCov::Formatter::HTMLFormatter]
+
+ require_do('simplecov-rcov') {
+ formatters << SimpleCov::Formatter::RcovFormatter
+ }
+ require_do('simplecov-vim/formatter') {
+ formatters << SimpleCov::Formatter::VimFormatter
+ }
+ require_do('simplecov-sublime-ruby-coverage') {
+ formatters << SimpleCov::Formatter::SublimeRubyCoverageFormatter
+ }
+
+ SimpleCov.start do
+ formatter SimpleCov::Formatter::MultiFormatter.new(formatters)
+ end
+end
+
+file = Pathname.new(__FILE__).expand_path
+path = file.parent
+parent = path.parent
+
+$:.unshift parent.join('lib')
+
+module CaptureSubprocessIO
+ def _synchronize
+ yield
+ end
+
+ def capture_subprocess_io
+ _synchronize { _capture_subprocess_io { yield } }
+ end
+
+ def _capture_subprocess_io
+ require 'tempfile'
+
+ captured_stdout, captured_stderr = Tempfile.new('out'), Tempfile.new('err')
+
+ orig_stdout, orig_stderr = $stdout.dup, $stderr.dup
+ $stdout.reopen captured_stdout
+ $stderr.reopen captured_stderr
+
+ yield
+
+ $stdout.rewind
+ $stderr.rewind
+
+ [captured_stdout.read, captured_stderr.read]
+ ensure
+ captured_stdout.unlink
+ captured_stderr.unlink
+ $stdout.reopen orig_stdout
+ $stderr.reopen orig_stderr
+ end
+ private :_capture_subprocess_io
+end
+
+require 'diff-lcs'
+
+module Diff::LCS::SpecHelper
+ def hello
+ 'hello'
+ end
+
+ def hello_ary
+ %w(h e l l o)
+ end
+
+ def seq1
+ %w(a b c e h j l m n p)
+ end
+
+ def skipped_seq1
+ %w(a h n p)
+ end
+
+ def seq2
+ %w(b c d e f j k l m r s t)
+ end
+
+ def skipped_seq2
+ %w(d f k r s t)
+ end
+
+ def word_sequence
+ %w(abcd efgh ijkl mnopqrstuvwxyz)
+ end
+
+ def correct_lcs
+ %w(b c e j l m)
+ end
+
+ def correct_forward_diff
+ [
+ [
+ ['-', 0, 'a']
+ ],
+ [
+ ['+', 2, 'd']
+ ],
+ [
+ ['-', 4, 'h'],
+ ['+', 4, 'f']
+ ],
+ [
+ ['+', 6, 'k']
+ ],
+ [
+ ['-', 8, 'n'],
+ ['+', 9, 'r'],
+ ['-', 9, 'p'],
+ ['+', 10, 's'],
+ ['+', 11, 't']
+ ]
+ ]
+ end
+
+ def correct_backward_diff
+ [
+ [
+ ['+', 0, 'a']
+ ],
+ [
+ ['-', 2, 'd']
+ ],
+ [
+ ['-', 4, 'f'],
+ ['+', 4, 'h']
+ ],
+ [
+ ['-', 6, 'k']
+ ],
+ [
+ ['-', 9, 'r'],
+ ['+', 8, 'n'],
+ ['-', 10, 's'],
+ ['+', 9, 'p'],
+ ['-', 11, 't']
+ ]
+ ]
+ end
+
+ def correct_forward_sdiff
+ [
+ ['-', [0, 'a'], [0, nil]],
+ ['=', [1, 'b'], [0, 'b']],
+ ['=', [2, 'c'], [1, 'c']],
+ ['+', [3, nil], [2, 'd']],
+ ['=', [3, 'e'], [3, 'e']],
+ ['!', [4, 'h'], [4, 'f']],
+ ['=', [5, 'j'], [5, 'j']],
+ ['+', [6, nil], [6, 'k']],
+ ['=', [6, 'l'], [7, 'l']],
+ ['=', [7, 'm'], [8, 'm']],
+ ['!', [8, 'n'], [9, 'r']],
+ ['!', [9, 'p'], [10, 's']],
+ ['+', [10, nil], [11, 't']]
+ ]
+ end
+
+ def reverse_sdiff(forward_sdiff)
+ forward_sdiff.map { |line|
+ line[1], line[2] = line[2], line[1]
+ case line[0]
+ when '-' then line[0] = '+'
+ when '+' then line[0] = '-'
+ end
+ line
+ }
+ end
+
+ def change_diff(diff)
+ map_diffs(diff, Diff::LCS::Change)
+ end
+
+ def context_diff(diff)
+ map_diffs(diff, Diff::LCS::ContextChange)
+ end
+
+ def format_diffs(diffs)
+ diffs.map { |e|
+ if e.kind_of?(Array)
+ e.map { |f| f.to_a.join }.join(', ')
+ else
+ e.to_a.join
+ end
+ }.join("\n")
+ end
+
+ def map_diffs(diffs, klass = Diff::LCS::ContextChange)
+ diffs.map do |chunks|
+ if klass == Diff::LCS::ContextChange
+ klass.from_a(chunks)
+ else
+ chunks.map { |changes| klass.from_a(changes) }
+ end
+ end
+ end
+
+ def balanced_traversal(s1, s2, callback_type)
+ callback = __send__(callback_type)
+ Diff::LCS.traverse_balanced(s1, s2, callback)
+ callback
+ end
+
+ def balanced_reverse(change_result)
+ new_result = []
+ change_result.each do |line|
+ line = [line[0], line[2], line[1]]
+ case line[0]
+ when '<'
+ line[0] = '>'
+ when '>'
+ line[0] = '<'
+ end
+ new_result << line
+ end
+ new_result.sort_by { |line| [line[1], line[2]] }
+ end
+
+ def map_to_no_change(change_result)
+ new_result = []
+ change_result.each do |line|
+ case line[0]
+ when '!'
+ new_result << ['<', line[1], line[2]]
+ new_result << ['>', line[1] + 1, line[2]]
+ else
+ new_result << line
+ end
+ end
+ new_result
+ end
+
+ def simple_callback
+ callbacks = Object.new
+ class << callbacks
+ attr_reader :matched_a
+ attr_reader :matched_b
+ attr_reader :discards_a
+ attr_reader :discards_b
+ attr_reader :done_a
+ attr_reader :done_b
+
+ def reset
+ @matched_a = []
+ @matched_b = []
+ @discards_a = []
+ @discards_b = []
+ @done_a = []
+ @done_b = []
+ end
+
+ def match(event)
+ @matched_a << event.old_element
+ @matched_b << event.new_element
+ end
+
+ def discard_b(event)
+ @discards_b << event.new_element
+ end
+
+ def discard_a(event)
+ @discards_a << event.old_element
+ end
+
+ def finished_a(event)
+ @done_a << [
+ event.old_element, event.old_position,
+ event.new_element, event.new_position
+ ]
+ end
+
+ def finished_b(event)
+ @done_b << [
+ event.old_element, event.old_position,
+ event.new_element, event.new_position
+ ]
+ end
+ end
+ callbacks.reset
+ callbacks
+ end
+
+ def simple_callback_no_finishers
+ simple = simple_callback
+ class << simple
+ undef :finished_a
+ undef :finished_b
+ end
+ simple
+ end
+
+ def balanced_callback
+ cb = Object.new
+ class << cb
+ attr_reader :result
+
+ def reset
+ @result = []
+ end
+
+ def match(event)
+ @result << ['=', event.old_position, event.new_position]
+ end
+
+ def discard_a(event)
+ @result << ['<', event.old_position, event.new_position]
+ end
+
+ def discard_b(event)
+ @result << ['>', event.old_position, event.new_position]
+ end
+
+ def change(event)
+ @result << ['!', event.old_position, event.new_position]
+ end
+ end
+ cb.reset
+ cb
+ end
+
+ def balanced_callback_no_change
+ balanced = balanced_callback
+ class << balanced
+ undef :change
+ end
+ balanced
+ end
+
+ module Matchers
+ extend RSpec::Matchers::DSL
+
+ matcher :be_nil_or_match_values do |ii, s1, s2|
+ match do |ee|
+ expect(ee).to(satisfy { |vee| vee.nil? || s1[ii] == s2[ee] })
+ end
+ end
+
+ matcher :correctly_map_sequence do |s1|
+ match do |actual|
+ actual.each_with_index { |ee, ii|
+ expect(ee).to be_nil_or_match_values(ii, s1, @s2)
+ }
+ end
+
+ chain :to_other_sequence do |s2|
+ @s2 = s2
+ end
+ end
+ end
+end
+
+RSpec.configure do |conf|
+ conf.include Diff::LCS::SpecHelper
+ conf.alias_it_should_behave_like_to :it_has_behavior, 'has behavior:'
+ conf.filter_run_excluding :broken => true
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/traverse_balanced_spec.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/traverse_balanced_spec.rb
new file mode 100644
index 000000000..9ee68ea89
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/traverse_balanced_spec.rb
@@ -0,0 +1,310 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Diff::LCS.traverse_balanced' do
+ include Diff::LCS::SpecHelper::Matchers
+
+ shared_examples 'with a #change callback' do |s1, s2, result|
+ it 'traverses s1 -> s2 correctly' do
+ traversal = balanced_traversal(s1, s2, :balanced_callback)
+ expect(traversal.result).to eq(result)
+ end
+
+ it 'traverses s2 -> s1 correctly' do
+ traversal = balanced_traversal(s2, s1, :balanced_callback)
+ expect(traversal.result).to eq(balanced_reverse(result))
+ end
+ end
+
+ shared_examples 'without a #change callback' do |s1, s2, result|
+ it 'traverses s1 -> s2 correctly' do
+ traversal = balanced_traversal(s1, s2, :balanced_callback_no_change)
+ expect(traversal.result).to eq(map_to_no_change(result))
+ end
+
+ it 'traverses s2 -> s1 correctly' do
+ traversal = balanced_traversal(s2, s1, :balanced_callback_no_change)
+ expect(traversal.result).to eq(map_to_no_change(balanced_reverse(result)))
+ end
+ end
+
+ describe "identical string sequences ('abc')" do
+ s1 = s2 = 'abc'
+
+ result = [
+ ['=', 0, 0],
+ ['=', 1, 1],
+ ['=', 2, 2]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'identical array sequences %w(a b c)' do
+ s1 = s2 = %w(a b c)
+
+ result = [
+ ['=', 0, 0],
+ ['=', 1, 1],
+ ['=', 2, 2]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'sequences %w(a b c) & %w(a x c)' do
+ s1 = %w(a b c)
+ s2 = %w(a x c)
+
+ result = [
+ ['=', 0, 0],
+ ['!', 1, 1],
+ ['=', 2, 2]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'sequences %w(a x y c) & %w(a v w c)' do
+ s1 = %w(a x y c)
+ s2 = %w(a v w c)
+
+ result = [
+ ['=', 0, 0],
+ ['!', 1, 1],
+ ['!', 2, 2],
+ ['=', 3, 3]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'sequences %w(x y c) & %w(v w c)' do
+ s1 = %w(x y c)
+ s2 = %w(v w c)
+ result = [
+ ['!', 0, 0],
+ ['!', 1, 1],
+ ['=', 2, 2]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'sequences %w(a x y z) & %w(b v w)' do
+ s1 = %w(a x y z)
+ s2 = %w(b v w)
+ result = [
+ ['!', 0, 0],
+ ['!', 1, 1],
+ ['!', 2, 2],
+ ['<', 3, 3]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'sequences %w(a z) & %w(a)' do
+ s1 = %w(a z)
+ s2 = %w(a)
+ result = [
+ ['=', 0, 0],
+ ['<', 1, 1]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'sequences %w(z a) & %w(a)' do
+ s1 = %w(z a)
+ s2 = %w(a)
+ result = [
+ ['<', 0, 0],
+ ['=', 1, 0]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'sequences %w(a b c) & %w(x y z)' do
+ s1 = %w(a b c)
+ s2 = %w(x y z)
+ result = [
+ ['!', 0, 0],
+ ['!', 1, 1],
+ ['!', 2, 2]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'sequences %w(abcd efgh ijkl mnoopqrstuvwxyz) & []' do
+ s1 = %w(abcd efgh ijkl mnopqrstuvwxyz)
+ s2 = []
+ result = [
+ ['<', 0, 0],
+ ['<', 1, 0],
+ ['<', 2, 0],
+ ['<', 3, 0]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'strings %q(a b c) & %q(a x c)' do
+ s1 = 'a b c'
+ s2 = 'a x c'
+
+ result = [
+ ['=', 0, 0],
+ ['=', 1, 1],
+ ['!', 2, 2],
+ ['=', 3, 3],
+ ['=', 4, 4]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'strings %q(a x y c) & %q(a v w c)' do
+ s1 = 'a x y c'
+ s2 = 'a v w c'
+
+ result = [
+ ['=', 0, 0],
+ ['=', 1, 1],
+ ['!', 2, 2],
+ ['=', 3, 3],
+ ['!', 4, 4],
+ ['=', 5, 5],
+ ['=', 6, 6]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'strings %q(x y c) & %q(v w c)' do
+ s1 = 'x y c'
+ s2 = 'v w c'
+ result = [
+ ['!', 0, 0],
+ ['=', 1, 1],
+ ['!', 2, 2],
+ ['=', 3, 3],
+ ['=', 4, 4]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'strings %q(a x y z) & %q(b v w)' do
+ s1 = 'a x y z'
+ s2 = 'b v w'
+ result = [
+ ['!', 0, 0],
+ ['=', 1, 1],
+ ['!', 2, 2],
+ ['=', 3, 3],
+ ['!', 4, 4],
+ ['<', 5, 5],
+ ['<', 6, 5]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'strings %q(a z) & %q(a)' do
+ s1 = 'a z'
+ s2 = 'a'
+ result = [
+ ['=', 0, 0],
+ ['<', 1, 1],
+ ['<', 2, 1]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'strings %q(z a) & %q(a)' do
+ s1 = 'z a'
+ s2 = 'a'
+ result = [
+ ['<', 0, 0],
+ ['<', 1, 0],
+ ['=', 2, 0]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'strings %q(a b c) & %q(x y z)' do
+ s1 = 'a b c'
+ s2 = 'x y z'
+ result = [
+ ['!', 0, 0],
+ ['=', 1, 1],
+ ['!', 2, 2],
+ ['=', 3, 3],
+ ['!', 4, 4]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+
+ describe 'strings %q(abcd efgh ijkl mnopqrstuvwxyz) & %q()' do
+ s1 = 'abcd efgh ijkl mnopqrstuvwxyz'
+ s2 = ''
+ result = [
+ ['<', 0, 0],
+ ['<', 1, 0],
+ ['<', 2, 0],
+ ['<', 3, 0],
+ ['<', 4, 0],
+ ['<', 5, 0],
+ ['<', 6, 0],
+ ['<', 7, 0],
+ ['<', 8, 0],
+ ['<', 9, 0],
+ ['<', 10, 0],
+ ['<', 11, 0],
+ ['<', 12, 0],
+ ['<', 13, 0],
+ ['<', 14, 0],
+ ['<', 15, 0],
+ ['<', 16, 0],
+ ['<', 17, 0],
+ ['<', 18, 0],
+ ['<', 19, 0],
+ ['<', 20, 0],
+ ['<', 21, 0],
+ ['<', 22, 0],
+ ['<', 23, 0],
+ ['<', 24, 0],
+ ['<', 25, 0],
+ ['<', 26, 0],
+ ['<', 27, 0],
+ ['<', 28, 0]
+ ]
+
+ it_has_behavior 'with a #change callback', s1, s2, result
+ it_has_behavior 'without a #change callback', s1, s2, result
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/traverse_sequences_spec.rb b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/traverse_sequences_spec.rb
new file mode 100644
index 000000000..b185e1dec
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/diff-lcs-1.5.0/spec/traverse_sequences_spec.rb
@@ -0,0 +1,137 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Diff::LCS.traverse_sequences' do
+ describe 'callback with no finishers' do
+ describe 'over (seq1, seq2)' do
+ before(:each) do
+ @callback_s1_s2 = simple_callback_no_finishers
+ Diff::LCS.traverse_sequences(seq1, seq2, @callback_s1_s2)
+
+ @callback_s2_s1 = simple_callback_no_finishers
+ Diff::LCS.traverse_sequences(seq2, seq1, @callback_s2_s1)
+ end
+
+ it 'has the correct LCS result on left-matches' do
+ expect(@callback_s1_s2.matched_a).to eq(correct_lcs)
+ expect(@callback_s2_s1.matched_a).to eq(correct_lcs)
+ end
+
+ it 'has the correct LCS result on right-matches' do
+ expect(@callback_s1_s2.matched_b).to eq(correct_lcs)
+ expect(@callback_s2_s1.matched_b).to eq(correct_lcs)
+ end
+
+ it 'has the correct skipped sequences with the left sequence' do
+ expect(@callback_s1_s2.discards_a).to eq(skipped_seq1)
+ expect(@callback_s2_s1.discards_a).to eq(skipped_seq2)
+ end
+
+ it 'has the correct skipped sequences with the right sequence' do
+ expect(@callback_s1_s2.discards_b).to eq(skipped_seq2)
+ expect(@callback_s2_s1.discards_b).to eq(skipped_seq1)
+ end
+
+ it 'does not have anything done markers from the left or right sequences' do
+ expect(@callback_s1_s2.done_a).to be_empty
+ expect(@callback_s1_s2.done_b).to be_empty
+ expect(@callback_s2_s1.done_a).to be_empty
+ expect(@callback_s2_s1.done_b).to be_empty
+ end
+ end
+
+ describe 'over (hello, hello)' do
+ before(:each) do
+ @callback = simple_callback_no_finishers
+ Diff::LCS.traverse_sequences(hello, hello, @callback)
+ end
+
+ it 'has the correct LCS result on left-matches' do
+ expect(@callback.matched_a).to eq(hello.split(//))
+ end
+
+ it 'has the correct LCS result on right-matches' do
+ expect(@callback.matched_b).to eq(hello.split(//))
+ end
+
+ it 'has the correct skipped sequences with the left sequence', :only => true do
+ expect(@callback.discards_a).to be_empty
+ end
+
+ it 'has the correct skipped sequences with the right sequence' do
+ expect(@callback.discards_b).to be_empty
+ end
+
+ it 'does not have anything done markers from the left or right sequences' do
+ expect(@callback.done_a).to be_empty
+ expect(@callback.done_b).to be_empty
+ end
+ end
+
+ describe 'over (hello_ary, hello_ary)' do
+ before(:each) do
+ @callback = simple_callback_no_finishers
+ Diff::LCS.traverse_sequences(hello_ary, hello_ary, @callback)
+ end
+
+ it 'has the correct LCS result on left-matches' do
+ expect(@callback.matched_a).to eq(hello_ary)
+ end
+
+ it 'has the correct LCS result on right-matches' do
+ expect(@callback.matched_b).to eq(hello_ary)
+ end
+
+ it 'has the correct skipped sequences with the left sequence' do
+ expect(@callback.discards_a).to be_empty
+ end
+
+ it 'has the correct skipped sequences with the right sequence' do
+ expect(@callback.discards_b).to be_empty
+ end
+
+ it 'does not have anything done markers from the left or right sequences' do
+ expect(@callback.done_a).to be_empty
+ expect(@callback.done_b).to be_empty
+ end
+ end
+ end
+
+ describe 'callback with finisher' do
+ before(:each) do
+ @callback_s1_s2 = simple_callback
+ Diff::LCS.traverse_sequences(seq1, seq2, @callback_s1_s2)
+ @callback_s2_s1 = simple_callback
+ Diff::LCS.traverse_sequences(seq2, seq1, @callback_s2_s1)
+ end
+
+ it 'has the correct LCS result on left-matches' do
+ expect(@callback_s1_s2.matched_a).to eq(correct_lcs)
+ expect(@callback_s2_s1.matched_a).to eq(correct_lcs)
+ end
+
+ it 'has the correct LCS result on right-matches' do
+ expect(@callback_s1_s2.matched_b).to eq(correct_lcs)
+ expect(@callback_s2_s1.matched_b).to eq(correct_lcs)
+ end
+
+ it 'has the correct skipped sequences for the left sequence' do
+ expect(@callback_s1_s2.discards_a).to eq(skipped_seq1)
+ expect(@callback_s2_s1.discards_a).to eq(skipped_seq2)
+ end
+
+ it 'has the correct skipped sequences for the right sequence' do
+ expect(@callback_s1_s2.discards_b).to eq(skipped_seq2)
+ expect(@callback_s2_s1.discards_b).to eq(skipped_seq1)
+ end
+
+ it 'has done markers differently-sized sequences' do
+ expect(@callback_s1_s2.done_a).to eq([['p', 9, 't', 11]])
+ expect(@callback_s1_s2.done_b).to be_empty
+
+ expect(@callback_s2_s1.done_a).to be_empty
+ expect(@callback_s2_s1.done_b).to eq([['t', 11, 'p', 9]])
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.gitignore b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.gitignore
new file mode 100644
index 000000000..134a8706c
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.gitignore
@@ -0,0 +1,15 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+#
+# If you find yourself ignoring temporary files generated by your text editor
+# or operating system, you probably want to add a global ignore instead:
+# git config --global core.excludesfile ~/.gitignore_global
+
+# Ignore bundler config
+/.bundle
+/doc
+/.yardoc
+/Gemfile.lock
+
+*.swp
+*.bak
+*.gem
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.rspec b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.rspec
new file mode 100644
index 000000000..4e1e0d2f7
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.rspec
@@ -0,0 +1 @@
+--color
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.rubocop.yml b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.rubocop.yml
new file mode 100644
index 000000000..4f70ab863
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.rubocop.yml
@@ -0,0 +1,32 @@
+require: rubocop-rspec
+AllCops:
+ TargetRubyVersion: 2.0 # always the lowest version we support
+Metrics/PerceivedComplexity:
+ Enabled: false
+Metrics/CyclomaticComplexity:
+ Enabled: false
+Metrics/MethodLength:
+ Enabled: false
+Metrics/AbcSize:
+ Enabled: false
+Metrics/LineLength:
+ Enabled: false
+Metrics/ClassLength:
+ Enabled: false
+Metrics/BlockLength:
+ Enabled: false
+Metrics/ModuleLength:
+ Enabled: false
+Style/Documentation:
+ Enabled: false
+Style/FrozenStringLiteralComment:
+ Enabled: true
+ EnforcedStyle: always
+Style/NumericPredicate:
+ Enabled: false
+Style/RedundantFreeze:
+ Enabled: false
+RSpec/ExampleLength:
+ Enabled: false
+RSpec/DescribeClass:
+ Enabled: false
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.travis.yml b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.travis.yml
new file mode 100644
index 000000000..3386da203
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.travis.yml
@@ -0,0 +1,11 @@
+sudo: false
+language: ruby
+cache: bundler
+rvm:
+ - 2.0.0
+ - 2.1.10
+ - 2.2.8
+ - 2.3.4
+ - 2.4.2
+ - 2.5.3
+ - 2.6.0
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.yardopts b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.yardopts
new file mode 100644
index 000000000..22ce944f6
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/.yardopts
@@ -0,0 +1 @@
+--no-private
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/Gemfile b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/Gemfile
new file mode 100644
index 000000000..4f7b655ba
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/Gemfile
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+source 'http://rubygems.org'
+gemspec
+
+group :test do
+ gem 'rake', '< 11'
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/LICENSE b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/LICENSE
new file mode 100644
index 000000000..9adfb9dd6
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2012 Liu Fengyun
+
+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.
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/README.md b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/README.md
new file mode 100644
index 000000000..088ed6766
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/README.md
@@ -0,0 +1,276 @@
+# Hashdiff [![Build Status](https://secure.travis-ci.org/liufengyun/hashdiff.svg)](http://travis-ci.org/liufengyun/hashdiff) [![Gem Version](https://badge.fury.io/rb/hashdiff.svg)](http://badge.fury.io/rb/hashdiff)
+
+Hashdiff is a ruby library to compute the smallest difference between two hashes.
+
+It also supports comparing two arrays.
+
+Hashdiff does not monkey-patch any existing class. All features are contained inside the `Hashdiff` module.
+
+**Docs**: [Documentation](http://rubydoc.info/gems/hashdiff)
+
+
+__WARNING__: Don't use the library for comparing large arrays, say ~10K (see #49).
+
+## Why Hashdiff?
+
+Given two Hashes A and B, sometimes you face the question: what's the smallest modification that can be made to change A into B?
+
+An algorithm that responds to this question has to do following:
+
+* Generate a list of additions, deletions and changes, so that `A + ChangeSet = B` and `B - ChangeSet = A`.
+* Compute recursively -- Arrays and Hashes may be nested arbitrarily in A or B.
+* Compute the smallest change -- it should recognize similar child Hashes or child Arrays between A and B.
+
+Hashdiff answers the question above using an opinionated approach:
+
+* Hash can be represented as a list of (dot-syntax-path, value) pairs. For example, `{a:[{c:2}]}` can be represented as `["a[0].c", 2]`.
+* The change set can be represented using the dot-syntax representation. For example, `[['-', 'b.x', 3], ['~', 'b.z', 45, 30], ['+', 'b.y', 3]]`.
+* It compares Arrays using the [LCS(longest common subsequence)](http://en.wikipedia.org/wiki/Longest_common_subsequence_problem) algorithm.
+* It recognizes similar Hashes in an Array using a similarity value (0 < similarity <= 1).
+
+## Usage
+
+To use the gem, add the following to your Gemfile:
+
+```Ruby
+gem 'hashdiff'
+```
+
+## Quick Start
+
+### Diff
+
+Two simple hashes:
+
+```ruby
+a = {a:3, b:2}
+b = {}
+
+diff = Hashdiff.diff(a, b)
+diff.should == [['-', 'a', 3], ['-', 'b', 2]]
+```
+
+More complex hashes:
+
+```ruby
+a = {a:{x:2, y:3, z:4}, b:{x:3, z:45}}
+b = {a:{y:3}, b:{y:3, z:30}}
+
+diff = Hashdiff.diff(a, b)
+diff.should == [['-', 'a.x', 2], ['-', 'a.z', 4], ['-', 'b.x', 3], ['~', 'b.z', 45, 30], ['+', 'b.y', 3]]
+```
+
+Arrays in hashes:
+
+```ruby
+a = {a:[{x:2, y:3, z:4}, {x:11, y:22, z:33}], b:{x:3, z:45}}
+b = {a:[{y:3}, {x:11, z:33}], b:{y:22}}
+
+diff = Hashdiff.best_diff(a, b)
+diff.should == [['-', 'a[0].x', 2], ['-', 'a[0].z', 4], ['-', 'a[1].y', 22], ['-', 'b.x', 3], ['-', 'b.z', 45], ['+', 'b.y', 22]]
+```
+
+### Patch
+
+patch example:
+
+```ruby
+a = {'a' => 3}
+b = {'a' => {'a1' => 1, 'a2' => 2}}
+
+diff = Hashdiff.diff(a, b)
+Hashdiff.patch!(a, diff).should == b
+```
+
+unpatch example:
+
+```ruby
+a = [{'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5}, {'x' => 5, 'y' => 6, 'z' => 3}, 1]
+b = [1, {'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5}]
+
+diff = Hashdiff.diff(a, b) # diff two array is OK
+Hashdiff.unpatch!(b, diff).should == a
+```
+
+### Options
+
+There are eight options available: `:delimiter`, `:similarity`,
+`:strict`, `:indifferent`, `:numeric_tolerance`, `:strip`, `:case_insensitive`,
+`:array_path` and `:use_lcs`
+
+#### `:delimiter`
+
+You can specify `:delimiter` to be something other than the default dot. For example:
+
+```ruby
+a = {a:{x:2, y:3, z:4}, b:{x:3, z:45}}
+b = {a:{y:3}, b:{y:3, z:30}}
+
+diff = Hashdiff.diff(a, b, delimiter: '\t')
+diff.should == [['-', 'a\tx', 2], ['-', 'a\tz', 4], ['-', 'b\tx', 3], ['~', 'b\tz', 45, 30], ['+', 'b\ty', 3]]
+```
+
+#### `:similarity`
+
+In cases where you have similar hash objects in arrays, you can pass a custom value for `:similarity` instead of the default `0.8`. This is interpreted as a ratio of similarity (default is 80% similar, whereas `:similarity => 0.5` would look for at least a 50% similarity).
+
+#### `:strict`
+
+The `:strict` option, which defaults to `true`, specifies whether numeric types are compared on type as well as value. By default, an Integer will never be equal to a Float (e.g. 4 != 4.0). Setting `:strict` to false makes the comparison looser (e.g. 4 == 4.0).
+
+#### `:indifferent`
+
+The `:indifferent` option, which defaults to `false`, specifies whether to treat hash keys indifferently. Setting `:indifferent` to true has the effect of ignoring differences between symbol keys (ie. {a: 1} ~= {'a' => 1})
+
+#### `:numeric_tolerance`
+
+The :numeric_tolerance option allows for a small numeric tolerance.
+
+```ruby
+a = {x:5, y:3.75, z:7}
+b = {x:6, y:3.76, z:7}
+
+diff = Hashdiff.diff(a, b, numeric_tolerance: 0.1)
+diff.should == [["~", "x", 5, 6]]
+```
+
+#### `:strip`
+
+The :strip option strips all strings before comparing.
+
+```ruby
+a = {x:5, s:'foo '}
+b = {x:6, s:'foo'}
+
+diff = Hashdiff.diff(a, b, numeric_tolerance: 0.1, strip: true)
+diff.should == [["~", "x", 5, 6]]
+```
+
+#### `:case_insensitive`
+
+The :case_insensitive option makes string comparisons ignore case.
+
+```ruby
+a = {x:5, s:'FooBar'}
+b = {x:6, s:'foobar'}
+
+diff = Hashdiff.diff(a, b, numeric_tolerance: 0.1, case_insensitive: true)
+diff.should == [["~", "x", 5, 6]]
+```
+
+#### `:array_path`
+
+The :array_path option represents the path of the diff in an array rather than
+a string. This can be used to show differences in between hash key types and
+is useful for `patch!` when used on hashes without string keys.
+
+```ruby
+a = {x:5}
+b = {'x'=>6}
+
+diff = Hashdiff.diff(a, b, array_path: true)
+diff.should == [['-', [:x], 5], ['+', ['x'], 6]]
+```
+
+For cases where there are arrays in paths their index will be added to the path.
+```ruby
+a = {x:[0,1]}
+b = {x:[0,2]}
+
+diff = Hashdiff.diff(a, b, array_path: true)
+diff.should == [["-", [:x, 1], 1], ["+", [:x, 1], 2]]
+```
+
+This shouldn't cause problems if you are comparing an array with a hash:
+
+```ruby
+a = {x:{0=>1}}
+b = {x:[1]}
+
+diff = Hashdiff.diff(a, b, array_path: true)
+diff.should == [["~", [:x], {0=>1}, [1]]]
+```
+
+#### `:use_lcs`
+
+The :use_lcs option is used to specify whether a
+[Longest common subsequence](https://en.wikipedia.org/wiki/Longest_common_subsequence_problem)
+(LCS) algorithm is used to determine differences in arrays. This defaults to
+`true` but can be changed to `false` for significantly faster array comparisons
+(O(n) complexity rather than O(n2) for LCS).
+
+When :use_lcs is false the results of array comparisons have a tendency to
+show changes at indexes rather than additions and subtractions when :use_lcs is
+true.
+
+Note, currently the :similarity option has no effect when :use_lcs is false.
+
+```ruby
+a = {x: [0, 1, 2]}
+b = {x: [0, 2, 2, 3]}
+
+diff = Hashdiff.diff(a, b, use_lcs: false)
+diff.should == [["~", "x[1]", 1, 2], ["+", "x[3]", 3]]
+```
+
+#### Specifying a custom comparison method
+
+It's possible to specify how the values of a key should be compared.
+
+```ruby
+a = {a:'car', b:'boat', c:'plane'}
+b = {a:'bus', b:'truck', c:' plan'}
+
+diff = Hashdiff.diff(a, b) do |path, obj1, obj2|
+ case path
+ when /a|b|c/
+ obj1.length == obj2.length
+ end
+end
+
+diff.should == [['~', 'b', 'boat', 'truck']]
+```
+
+The yielded params of the comparison block is `|path, obj1, obj2|`, in which path is the key (or delimited compound key) to the value being compared. When comparing elements in array, the path is with the format `array[*]`. For example:
+
+```ruby
+a = {a:'car', b:['boat', 'plane'] }
+b = {a:'bus', b:['truck', ' plan'] }
+
+diff = Hashdiff.diff(a, b) do |path, obj1, obj2|
+ case path
+ when 'b[*]'
+ obj1.length == obj2.length
+ end
+end
+
+diff.should == [["~", "a", "car", "bus"], ["~", "b[1]", "plane", " plan"], ["-", "b[0]", "boat"], ["+", "b[0]", "truck"]]
+```
+
+When a comparison block is given, it'll be given priority over other specified options. If the block returns value other than `true` or `false`, then the two values will be compared with other specified options.
+
+When used in conjunction with the `array_path` option, the path passed in as an argument will be an array. When determining the ordering of an array a key of `"*"` will be used in place of the `key[*]` field. It is possible, if you have hashes with integer or `"*"` keys, to have problems distinguishing between arrays and hashes - although this shouldn't be an issue unless your data is very difficult to predict and/or your custom rules are very specific.
+
+#### Sorting arrays before comparison
+
+An order difference alone between two arrays can create too many diffs to be useful. Consider sorting them prior to diffing.
+
+```ruby
+a = {a:'car', b:['boat', 'plane'] }
+b = {a:'car', b:['plane', 'boat'] }
+
+Hashdiff.diff(a, b).should == [["+", "b[0]", "plane"], ["-", "b[2]", "plane"]]
+
+b[:b].sort!
+
+Hashdiff.diff(a, b).should == []
+```
+
+## Maintainers
+
+- Krzysztof Rybka ([@krzysiek1507](https://github.com/krzysiek1507))
+- Fengyun Liu ([@liufengyun](https://github.com/liufengyun))
+
+## License
+
+Hashdiff is distributed under the MIT-LICENSE.
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/Rakefile b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/Rakefile
new file mode 100644
index 000000000..b78b4a2bb
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/Rakefile
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+$LOAD_PATH.push File.expand_path('lib', __dir__)
+
+require 'rubocop/rake_task'
+
+require 'bundler'
+Bundler::GemHelper.install_tasks
+
+require 'rspec/core/rake_task'
+
+RuboCop::RakeTask.new
+
+task default: %w[spec rubocop]
+
+RSpec::Core::RakeTask.new(:spec) do |spec|
+ spec.pattern = './spec/**/*_spec.rb'
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/changelog.md b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/changelog.md
new file mode 100644
index 000000000..300d635e9
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/changelog.md
@@ -0,0 +1,100 @@
+# Change Log
+
+## v1.0.1 2020-02-25
+
+* Add indifferent option
+
+## v1.0.0 2019-06-06
+
+* Fix typo in readme (#72 @koic)
+* Fix Rubocop offence (#73 @koic)
+* Bumps version to v1.0.0 (#74 @jfelchner)
+
+## v1.0.0.beta1 2019-06-06
+
+* fix warnings in ci (#69 @y-yagi)
+* drop warnings of the constant change (#70 @jfelchner)
+
+## v0.4.0 2019-05-28
+
+* refactoring (#56 #57 #59 #61 krzysiek1507)
+* fix typo in README (#64 @pboling)
+* change HashDiff to Hashdiff (#65 @jfelchner)
+
+## v0.3.9 2019-04-22
+
+* Performance tweak (thanks @krzysiek1507: #51 #52 #53)
+
+## v0.3.8 2018-12-30
+
+* Add Rubocop and drops Ruby 1.9 support #47
+
+## v0.3.7 2017-10-08
+
+* remove 1.8.7 support from gemspec #39
+
+## v0.3.6 2017-08-22
+
+* add option `use_lcs` #35
+
+## v0.3.5 2017-08-06
+
+* add option `array_path` #34
+
+## v0.3.4 2017-05-01
+
+* performance improvement of `#similar?` #31
+
+## v0.3.2 2016-12-27
+
+* replace `Fixnum` by `Integer` #28
+
+## v0.3.1 2016-11-24
+
+* fix an error when a hash has mixed types #26
+
+## v0.3.0 2016-2-11
+
+* support `:case_insensitive` option
+
+## v0.2.3 2015-11-5
+
+* improve performance of LCS algorithm #12
+
+## v0.2.2 2014-10-6
+
+* make library 1.8.7 compatible
+
+## v0.2.1 2014-7-13
+
+* yield added/deleted keys for custom comparison
+
+## v0.2.0 2014-3-29
+
+* support custom comparison blocks
+* support `:strip`, `:numeric_tolerance` and `:strict` options
+
+## v0.1.0 2013-8-25
+
+* use options for parameters `:delimiter` and `:similarity` in interfaces
+
+## v0.0.6 2013-3-2
+
+* Add parameter for custom property-path delimiter.
+
+## v0.0.5 2012-7-1
+
+* fix a bug in judging whehter two objects are similiar.
+* add more spec test for `.best_diff`
+
+## v0.0.4 2012-6-24
+
+Main changes in this version is to output the whole object in addition & deletion, instead of recursely add/deletes the object.
+
+For example, `diff({a:2, c:[4, 5]}, {a:2}) will generate following output:
+
+ [['-', 'c', [4, 5]]]
+
+instead of following:
+
+ [['-', 'c[0]', 4], ['-', 'c[1]', 5], ['-', 'c', []]]
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/hashdiff.gemspec b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/hashdiff.gemspec
new file mode 100644
index 000000000..d972f3418
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/hashdiff.gemspec
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+$LOAD_PATH << File.expand_path('lib', __dir__)
+require 'hashdiff/version'
+
+Gem::Specification.new do |s|
+ s.name = 'hashdiff'
+ s.version = Hashdiff::VERSION
+ s.license = 'MIT'
+ s.summary = ' Hashdiff is a diff lib to compute the smallest difference between two hashes. '
+ s.description = ' Hashdiff is a diff lib to compute the smallest difference between two hashes. '
+
+ s.files = `git ls-files`.split("\n")
+ s.test_files = `git ls-files -- Appraisals {spec}/*`.split("\n")
+
+ s.require_paths = ['lib']
+ s.required_ruby_version = Gem::Requirement.new('>= 2.0.0')
+
+ s.authors = ['Liu Fengyun']
+ s.email = ['liufengyunchina@gmail.com']
+
+ s.homepage = 'https://github.com/liufengyun/hashdiff'
+
+ s.add_development_dependency('bluecloth')
+ s.add_development_dependency('rspec', '~> 2.0')
+ s.add_development_dependency('rubocop', '~> 0.49.1') # last version that works with ruby 2.0
+ s.add_development_dependency('rubocop-rspec')
+ s.add_development_dependency('yard')
+
+ if s.respond_to?(:metadata)
+ s.metadata = {
+ 'bug_tracker_uri' => 'https://github.com/liufengyun/hashdiff/issues',
+ 'changelog_uri' => 'https://github.com/liufengyun/hashdiff/blob/master/changelog.md',
+ 'documentation_uri' => 'https://www.rubydoc.info/gems/hashdiff',
+ 'homepage_uri' => 'https://github.com/liufengyun/hashdiff',
+ 'source_code_uri' => 'https://github.com/liufengyun/hashdiff'
+ }
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff.rb
new file mode 100644
index 000000000..d44deb381
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+require 'hashdiff/util'
+require 'hashdiff/compare_hashes'
+require 'hashdiff/lcs'
+require 'hashdiff/lcs_compare_arrays'
+require 'hashdiff/linear_compare_array'
+require 'hashdiff/diff'
+require 'hashdiff/patch'
+require 'hashdiff/version'
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/compare_hashes.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/compare_hashes.rb
new file mode 100644
index 000000000..4223ac215
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/compare_hashes.rb
@@ -0,0 +1,69 @@
+# frozen_string_literal: true
+
+module Hashdiff
+ # @private
+ # Used to compare hashes
+ class CompareHashes
+ class << self
+ def call(obj1, obj2, opts = {})
+ return [] if obj1.empty? && obj2.empty?
+
+ obj1_keys = obj1.keys
+ obj2_keys = obj2.keys
+ obj1_lookup = {}
+ obj2_lookup = {}
+
+ if opts[:indifferent]
+ obj1_lookup = obj1_keys.each_with_object({}) { |k, h| h[k.to_s] = k }
+ obj2_lookup = obj2_keys.each_with_object({}) { |k, h| h[k.to_s] = k }
+ obj1_keys = obj1_keys.map { |k| k.is_a?(Symbol) ? k.to_s : k }
+ obj2_keys = obj2_keys.map { |k| k.is_a?(Symbol) ? k.to_s : k }
+ end
+
+ added_keys = (obj2_keys - obj1_keys).sort_by(&:to_s)
+ common_keys = (obj1_keys & obj2_keys).sort_by(&:to_s)
+ deleted_keys = (obj1_keys - obj2_keys).sort_by(&:to_s)
+
+ result = []
+
+ # add deleted properties
+ deleted_keys.each do |k|
+ k = opts[:indifferent] ? obj1_lookup[k] : k
+ change_key = Hashdiff.prefix_append_key(opts[:prefix], k, opts)
+ custom_result = Hashdiff.custom_compare(opts[:comparison], change_key, obj1[k], nil)
+
+ if custom_result
+ result.concat(custom_result)
+ else
+ result << ['-', change_key, obj1[k]]
+ end
+ end
+
+ # recursive comparison for common keys
+ common_keys.each do |k|
+ prefix = Hashdiff.prefix_append_key(opts[:prefix], k, opts)
+
+ k1 = opts[:indifferent] ? obj1_lookup[k] : k
+ k2 = opts[:indifferent] ? obj2_lookup[k] : k
+ result.concat(Hashdiff.diff(obj1[k1], obj2[k2], opts.merge(prefix: prefix)))
+ end
+
+ # added properties
+ added_keys.each do |k|
+ change_key = Hashdiff.prefix_append_key(opts[:prefix], k, opts)
+
+ k = opts[:indifferent] ? obj2_lookup[k] : k
+ custom_result = Hashdiff.custom_compare(opts[:comparison], change_key, nil, obj2[k])
+
+ if custom_result
+ result.concat(custom_result)
+ else
+ result << ['+', change_key, obj2[k]]
+ end
+ end
+
+ result
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/diff.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/diff.rb
new file mode 100644
index 000000000..5a1046277
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/diff.rb
@@ -0,0 +1,177 @@
+# frozen_string_literal: true
+
+module Hashdiff
+ # Best diff two objects, which tries to generate the smallest change set using different similarity values.
+ #
+ # Hashdiff.best_diff is useful in case of comparing two objects which include similar hashes in arrays.
+ #
+ # @param [Array, Hash] obj1
+ # @param [Array, Hash] obj2
+ # @param [Hash] options the options to use when comparing
+ # * :strict (Boolean) [true] whether numeric values will be compared on type as well as value. Set to false to allow comparing Integer, Float, BigDecimal to each other
+ # * :indifferent (Boolean) [false] whether to treat hash keys indifferently. Set to true to ignore differences between symbol keys (ie. {a: 1} ~= {'a' => 1})
+ # * :delimiter (String) ['.'] the delimiter used when returning nested key references
+ # * :numeric_tolerance (Numeric) [0] should be a positive numeric value. Value by which numeric differences must be greater than. By default, numeric values are compared exactly; with the :tolerance option, the difference between numeric values must be greater than the given value.
+ # * :strip (Boolean) [false] whether or not to call #strip on strings before comparing
+ # * :array_path (Boolean) [false] whether to return the path references for nested values in an array, can be used for patch compatibility with non string keys.
+ # * :use_lcs (Boolean) [true] whether or not to use an implementation of the Longest common subsequence algorithm for comparing arrays, produces better diffs but is slower.
+ #
+ # @yield [path, value1, value2] Optional block is used to compare each value, instead of default #==. If the block returns value other than true of false, then other specified comparison options will be used to do the comparison.
+ #
+ # @return [Array] an array of changes.
+ # e.g. [[ '+', 'a.b', '45' ], [ '-', 'a.c', '5' ], [ '~', 'a.x', '45', '63']]
+ #
+ # @example
+ # a = {'x' => [{'a' => 1, 'c' => 3, 'e' => 5}, {'y' => 3}]}
+ # b = {'x' => [{'a' => 1, 'b' => 2, 'e' => 5}] }
+ # diff = Hashdiff.best_diff(a, b)
+ # diff.should == [['-', 'x[0].c', 3], ['+', 'x[0].b', 2], ['-', 'x[1].y', 3], ['-', 'x[1]', {}]]
+ #
+ # @since 0.0.1
+ def self.best_diff(obj1, obj2, options = {}, &block)
+ options[:comparison] = block if block_given?
+
+ opts = { similarity: 0.3 }.merge!(options)
+ diffs1 = diff(obj1, obj2, opts)
+ count1 = count_diff diffs1
+
+ opts = { similarity: 0.5 }.merge!(options)
+ diffs2 = diff(obj1, obj2, opts)
+ count2 = count_diff diffs2
+
+ opts = { similarity: 0.8 }.merge!(options)
+ diffs3 = diff(obj1, obj2, opts)
+ count3 = count_diff diffs3
+
+ count, diffs = count1 < count2 ? [count1, diffs1] : [count2, diffs2]
+ count < count3 ? diffs : diffs3
+ end
+
+ # Compute the diff of two hashes or arrays
+ #
+ # @param [Array, Hash] obj1
+ # @param [Array, Hash] obj2
+ # @param [Hash] options the options to use when comparing
+ # * :strict (Boolean) [true] whether numeric values will be compared on type as well as value. Set to false to allow comparing Integer, Float, BigDecimal to each other
+ # * :indifferent (Boolean) [false] whether to treat hash keys indifferently. Set to true to ignore differences between symbol keys (ie. {a: 1} ~= {'a' => 1})
+ # * :similarity (Numeric) [0.8] should be between (0, 1]. Meaningful if there are similar hashes in arrays. See {best_diff}.
+ # * :delimiter (String) ['.'] the delimiter used when returning nested key references
+ # * :numeric_tolerance (Numeric) [0] should be a positive numeric value. Value by which numeric differences must be greater than. By default, numeric values are compared exactly; with the :tolerance option, the difference between numeric values must be greater than the given value.
+ # * :strip (Boolean) [false] whether or not to call #strip on strings before comparing
+ # * :array_path (Boolean) [false] whether to return the path references for nested values in an array, can be used for patch compatibility with non string keys.
+ # * :use_lcs (Boolean) [true] whether or not to use an implementation of the Longest common subsequence algorithm for comparing arrays, produces better diffs but is slower.
+ #
+ #
+ # @yield [path, value1, value2] Optional block is used to compare each value, instead of default #==. If the block returns value other than true of false, then other specified comparison options will be used to do the comparison.
+ #
+ # @return [Array] an array of changes.
+ # e.g. [[ '+', 'a.b', '45' ], [ '-', 'a.c', '5' ], [ '~', 'a.x', '45', '63']]
+ #
+ # @example
+ # a = {"a" => 1, "b" => {"b1" => 1, "b2" =>2}}
+ # b = {"a" => 1, "b" => {}}
+ #
+ # diff = Hashdiff.diff(a, b)
+ # diff.should == [['-', 'b.b1', 1], ['-', 'b.b2', 2]]
+ #
+ # @since 0.0.1
+ def self.diff(obj1, obj2, options = {}, &block)
+ opts = {
+ prefix: '',
+ similarity: 0.8,
+ delimiter: '.',
+ strict: true,
+ indifferent: false,
+ strip: false,
+ numeric_tolerance: 0,
+ array_path: false,
+ use_lcs: true
+ }.merge!(options)
+
+ opts[:prefix] = [] if opts[:array_path] && opts[:prefix] == ''
+
+ opts[:comparison] = block if block_given?
+
+ # prefer to compare with provided block
+ result = custom_compare(opts[:comparison], opts[:prefix], obj1, obj2)
+ return result if result
+
+ return [] if obj1.nil? && obj2.nil?
+
+ return [['~', opts[:prefix], obj1, obj2]] if obj1.nil? || obj2.nil?
+
+ return [['~', opts[:prefix], obj1, obj2]] unless comparable?(obj1, obj2, opts[:strict])
+
+ return LcsCompareArrays.call(obj1, obj2, opts) if obj1.is_a?(Array) && opts[:use_lcs]
+
+ return LinearCompareArray.call(obj1, obj2, opts) if obj1.is_a?(Array) && !opts[:use_lcs]
+
+ return CompareHashes.call(obj1, obj2, opts) if obj1.is_a?(Hash)
+
+ return [] if compare_values(obj1, obj2, opts)
+
+ [['~', opts[:prefix], obj1, obj2]]
+ end
+
+ # @private
+ #
+ # diff array using LCS algorithm
+ def self.diff_array_lcs(arraya, arrayb, options = {})
+ return [] if arraya.empty? && arrayb.empty?
+
+ change_set = []
+
+ if arraya.empty?
+ arrayb.each_index do |index|
+ change_set << ['+', index, arrayb[index]]
+ end
+
+ return change_set
+ end
+
+ if arrayb.empty?
+ arraya.each_index do |index|
+ i = arraya.size - index - 1
+ change_set << ['-', i, arraya[i]]
+ end
+
+ return change_set
+ end
+
+ opts = {
+ prefix: '',
+ similarity: 0.8,
+ delimiter: '.'
+ }.merge!(options)
+
+ links = lcs(arraya, arrayb, opts)
+
+ # yield common
+ yield links if block_given?
+
+ # padding the end
+ links << [arraya.size, arrayb.size]
+
+ last_x = -1
+ last_y = -1
+ links.each do |pair|
+ x, y = pair
+
+ # remove from a, beginning from the end
+ (x > last_x + 1) && (x - last_x - 2).downto(0).each do |i|
+ change_set << ['-', last_y + i + 1, arraya[i + last_x + 1]]
+ end
+
+ # add from b, beginning from the head
+ (y > last_y + 1) && 0.upto(y - last_y - 2).each do |i|
+ change_set << ['+', last_y + i + 1, arrayb[i + last_y + 1]]
+ end
+
+ # update flags
+ last_x = x
+ last_y = y
+ end
+
+ change_set
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/lcs.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/lcs.rb
new file mode 100644
index 000000000..b23c3e8db
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/lcs.rb
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+module Hashdiff
+ # @private
+ #
+ # caculate array difference using LCS algorithm
+ # http://en.wikipedia.org/wiki/Longest_common_subsequence_problem
+ def self.lcs(arraya, arrayb, options = {})
+ return [] if arraya.empty? || arrayb.empty?
+
+ opts = { similarity: 0.8 }.merge!(options)
+
+ opts[:prefix] = prefix_append_array_index(opts[:prefix], '*', opts)
+
+ a_start = b_start = 0
+ a_finish = arraya.size - 1
+ b_finish = arrayb.size - 1
+ vector = []
+
+ lcs = []
+ (b_start..b_finish).each do |bi|
+ lcs[bi] = []
+ (a_start..a_finish).each do |ai|
+ if similar?(arraya[ai], arrayb[bi], opts)
+ topleft = (ai > 0) && (bi > 0) ? lcs[bi - 1][ai - 1][1] : 0
+ lcs[bi][ai] = [:topleft, topleft + 1]
+ elsif (top = bi > 0 ? lcs[bi - 1][ai][1] : 0)
+ left = ai > 0 ? lcs[bi][ai - 1][1] : 0
+ count = top > left ? top : left
+
+ direction = if top > left
+ :top
+ elsif top < left
+ :left
+ elsif bi.zero?
+ :top
+ elsif ai.zero?
+ :left
+ else
+ :both
+ end
+
+ lcs[bi][ai] = [direction, count]
+ end
+ end
+ end
+
+ x = a_finish
+ y = b_finish
+ while (x >= 0) && (y >= 0) && (lcs[y][x][1] > 0)
+ if lcs[y][x][0] == :both
+ x -= 1
+ elsif lcs[y][x][0] == :topleft
+ vector.insert(0, [x, y])
+ x -= 1
+ y -= 1
+ elsif lcs[y][x][0] == :top
+ y -= 1
+ elsif lcs[y][x][0] == :left
+ x -= 1
+ end
+ end
+
+ vector
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/lcs_compare_arrays.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/lcs_compare_arrays.rb
new file mode 100644
index 000000000..1bae9127f
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/lcs_compare_arrays.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+module Hashdiff
+ # @private
+ # Used to compare arrays using the lcs algorithm
+ class LcsCompareArrays
+ class << self
+ def call(obj1, obj2, opts = {})
+ result = []
+
+ changeset = Hashdiff.diff_array_lcs(obj1, obj2, opts) do |lcs|
+ # use a's index for similarity
+ lcs.each do |pair|
+ prefix = Hashdiff.prefix_append_array_index(opts[:prefix], pair[0], opts)
+
+ result.concat(Hashdiff.diff(obj1[pair[0]], obj2[pair[1]], opts.merge(prefix: prefix)))
+ end
+ end
+
+ changeset.each do |change|
+ next if change[0] != '-' && change[0] != '+'
+
+ change_key = Hashdiff.prefix_append_array_index(opts[:prefix], change[1], opts)
+
+ result << [change[0], change_key, change[2]]
+ end
+
+ result
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/linear_compare_array.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/linear_compare_array.rb
new file mode 100644
index 000000000..0b9623c76
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/linear_compare_array.rb
@@ -0,0 +1,159 @@
+# frozen_string_literal: true
+
+module Hashdiff
+ # @private
+ #
+ # Used to compare arrays in a linear complexity, which produces longer diffs
+ # than using the lcs algorithm but is considerably faster
+ class LinearCompareArray
+ def self.call(old_array, new_array, options = {})
+ instance = new(old_array, new_array, options)
+ instance.call
+ end
+
+ def call
+ return [] if old_array.empty? && new_array.empty?
+
+ self.old_index = 0
+ self.new_index = 0
+ # by comparing the array lengths we can expect that a number of items
+ # are either added or removed
+ self.expected_additions = new_array.length - old_array.length
+
+ loop do
+ if extra_items_in_old_array?
+ append_deletion(old_array[old_index], old_index)
+ elsif extra_items_in_new_array?
+ append_addition(new_array[new_index], new_index)
+ else
+ compare_at_index
+ end
+
+ self.old_index = old_index + 1
+ self.new_index = new_index + 1
+ break if iterated_through_both_arrays?
+ end
+
+ changes
+ end
+
+ private
+
+ attr_reader :old_array, :new_array, :options, :additions, :deletions, :differences
+ attr_accessor :old_index, :new_index, :expected_additions
+
+ def initialize(old_array, new_array, options)
+ @old_array = old_array
+ @new_array = new_array
+ @options = { prefix: '' }.merge!(options)
+
+ @additions = []
+ @deletions = []
+ @differences = []
+ end
+
+ def extra_items_in_old_array?
+ old_index < old_array.length && new_index >= new_array.length
+ end
+
+ def extra_items_in_new_array?
+ new_index < new_array.length && old_index >= old_array.length
+ end
+
+ def iterated_through_both_arrays?
+ old_index >= old_array.length && new_index >= new_array.length
+ end
+
+ def compare_at_index
+ difference = item_difference(old_array[old_index], new_array[new_index], old_index)
+ return if difference.empty?
+
+ index_after_additions = index_of_match_after_additions
+ append_addititions_before_match(index_after_additions)
+
+ index_after_deletions = index_of_match_after_deletions
+ append_deletions_before_match(index_after_deletions)
+
+ match = index_after_additions || index_after_deletions
+
+ append_differences(difference) unless match
+ end
+
+ def item_difference(old_item, new_item, item_index)
+ prefix = Hashdiff.prefix_append_array_index(options[:prefix], item_index, options)
+ Hashdiff.diff(old_item, new_item, options.merge(prefix: prefix))
+ end
+
+ # look ahead in the new array to see if the current item appears later
+ # thereby having new items added
+ def index_of_match_after_additions
+ return unless expected_additions > 0
+
+ (1..expected_additions).each do |i|
+ next_difference = item_difference(
+ old_array[old_index],
+ new_array[new_index + i],
+ old_index
+ )
+
+ return new_index + i if next_difference.empty?
+ end
+
+ nil
+ end
+
+ # look ahead in the old array to see if the current item appears later
+ # thereby having items removed
+ def index_of_match_after_deletions
+ return unless expected_additions < 0
+
+ (1..(expected_additions.abs)).each do |i|
+ next_difference = item_difference(
+ old_array[old_index + i],
+ new_array[new_index],
+ old_index
+ )
+
+ return old_index + i if next_difference.empty?
+ end
+
+ nil
+ end
+
+ def append_addititions_before_match(match_index)
+ return unless match_index
+
+ (new_index...match_index).each { |i| append_addition(new_array[i], i) }
+ self.expected_additions = expected_additions - (match_index - new_index)
+ self.new_index = match_index
+ end
+
+ def append_deletions_before_match(match_index)
+ return unless match_index
+
+ (old_index...match_index).each { |i| append_deletion(old_array[i], i) }
+ self.expected_additions = expected_additions + (match_index - new_index)
+ self.old_index = match_index
+ end
+
+ def append_addition(item, index)
+ key = Hashdiff.prefix_append_array_index(options[:prefix], index, options)
+ additions << ['+', key, item]
+ end
+
+ def append_deletion(item, index)
+ key = Hashdiff.prefix_append_array_index(options[:prefix], index, options)
+ deletions << ['-', key, item]
+ end
+
+ def append_differences(difference)
+ differences.concat(difference)
+ end
+
+ def changes
+ # this algorithm only allows there to be additions or deletions
+ # deletions are reverse so they don't change the index of earlier items
+ differences + additions + deletions.reverse
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/patch.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/patch.rb
new file mode 100644
index 000000000..31541f36e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/patch.rb
@@ -0,0 +1,88 @@
+# frozen_string_literal: true
+
+#
+# This module provides methods to diff two hash, patch and unpatch hash
+#
+module Hashdiff
+ # Apply patch to object
+ #
+ # @param [Hash, Array] obj the object to be patched, can be an Array or a Hash
+ # @param [Array] changes e.g. [[ '+', 'a.b', '45' ], [ '-', 'a.c', '5' ], [ '~', 'a.x', '45', '63']]
+ # @param [Hash] options supports following keys:
+ # * :delimiter (String) ['.'] delimiter string for representing nested keys in changes array
+ #
+ # @return the object after patch
+ #
+ # @since 0.0.1
+ def self.patch!(obj, changes, options = {})
+ delimiter = options[:delimiter] || '.'
+
+ changes.each do |change|
+ parts = change[1]
+ parts = decode_property_path(parts, delimiter) unless parts.is_a?(Array)
+
+ last_part = parts.last
+
+ parent_node = node(obj, parts[0, parts.size - 1])
+
+ if change[0] == '+'
+ if parent_node.is_a?(Array)
+ parent_node.insert(last_part, change[2])
+ else
+ parent_node[last_part] = change[2]
+ end
+ elsif change[0] == '-'
+ if parent_node.is_a?(Array)
+ parent_node.delete_at(last_part)
+ else
+ parent_node.delete(last_part)
+ end
+ elsif change[0] == '~'
+ parent_node[last_part] = change[3]
+ end
+ end
+
+ obj
+ end
+
+ # Unpatch an object
+ #
+ # @param [Hash, Array] obj the object to be unpatched, can be an Array or a Hash
+ # @param [Array] changes e.g. [[ '+', 'a.b', '45' ], [ '-', 'a.c', '5' ], [ '~', 'a.x', '45', '63']]
+ # @param [Hash] options supports following keys:
+ # * :delimiter (String) ['.'] delimiter string for representing nested keys in changes array
+ #
+ # @return the object after unpatch
+ #
+ # @since 0.0.1
+ def self.unpatch!(obj, changes, options = {})
+ delimiter = options[:delimiter] || '.'
+
+ changes.reverse_each do |change|
+ parts = change[1]
+ parts = decode_property_path(parts, delimiter) unless parts.is_a?(Array)
+
+ last_part = parts.last
+
+ parent_node = node(obj, parts[0, parts.size - 1])
+
+ if change[0] == '+'
+ if parent_node.is_a?(Array)
+ parent_node.delete_at(last_part)
+ else
+ parent_node.delete(last_part)
+ end
+ elsif change[0] == '-'
+ if parent_node.is_a?(Array)
+ parent_node.insert(last_part, change[2])
+ else
+ parent_node[last_part] = change[2]
+ end
+ elsif change[0] == '~'
+ parent_node[last_part] = change[2]
+ end
+ end
+
+ obj
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/util.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/util.rb
new file mode 100644
index 000000000..09ed84b41
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/util.rb
@@ -0,0 +1,155 @@
+# frozen_string_literal: true
+
+module Hashdiff
+ # @private
+ #
+ # judge whether two objects are similar
+ def self.similar?(obja, objb, options = {})
+ return compare_values(obja, objb, options) if !options[:comparison] && !any_hash_or_array?(obja, objb)
+
+ count_a = count_nodes(obja)
+ count_b = count_nodes(objb)
+
+ return true if (count_a + count_b).zero?
+
+ opts = { similarity: 0.8 }.merge!(options)
+
+ diffs = count_diff diff(obja, objb, opts)
+
+ (1 - diffs / (count_a + count_b).to_f) >= opts[:similarity]
+ end
+
+ # @private
+ #
+ # count node differences
+ def self.count_diff(diffs)
+ diffs.inject(0) do |sum, item|
+ old_change_count = count_nodes(item[2])
+ new_change_count = count_nodes(item[3])
+ sum + (old_change_count + new_change_count)
+ end
+ end
+
+ # @private
+ #
+ # count total nodes for an object
+ def self.count_nodes(obj)
+ return 0 unless obj
+
+ count = 0
+ if obj.is_a?(Array)
+ obj.each { |e| count += count_nodes(e) }
+ elsif obj.is_a?(Hash)
+ obj.each_value { |v| count += count_nodes(v) }
+ else
+ return 1
+ end
+
+ count
+ end
+
+ # @private
+ #
+ # decode property path into an array
+ # @param [String] path Property-string
+ # @param [String] delimiter Property-string delimiter
+ #
+ # e.g. "a.b[3].c" => ['a', 'b', 3, 'c']
+ def self.decode_property_path(path, delimiter = '.')
+ path.split(delimiter).inject([]) do |memo, part|
+ if part =~ /^(.*)\[(\d+)\]$/
+ if !Regexp.last_match(1).empty?
+ memo + [Regexp.last_match(1), Regexp.last_match(2).to_i]
+ else
+ memo + [Regexp.last_match(2).to_i]
+ end
+ else
+ memo + [part]
+ end
+ end
+ end
+
+ # @private
+ #
+ # get the node of hash by given path parts
+ def self.node(hash, parts)
+ temp = hash
+ parts.each do |part|
+ temp = temp[part]
+ end
+ temp
+ end
+
+ # @private
+ #
+ # check for equality or "closeness" within given tolerance
+ def self.compare_values(obj1, obj2, options = {})
+ if options[:numeric_tolerance].is_a?(Numeric) &&
+ obj1.is_a?(Numeric) && obj2.is_a?(Numeric)
+ return (obj1 - obj2).abs <= options[:numeric_tolerance]
+ end
+
+ if options[:strip] == true
+ obj1 = obj1.strip if obj1.respond_to?(:strip)
+ obj2 = obj2.strip if obj2.respond_to?(:strip)
+ end
+
+ if options[:case_insensitive] == true
+ obj1 = obj1.downcase if obj1.respond_to?(:downcase)
+ obj2 = obj2.downcase if obj2.respond_to?(:downcase)
+ end
+
+ obj1 == obj2
+ end
+
+ # @private
+ #
+ # check if objects are comparable
+ def self.comparable?(obj1, obj2, strict = true)
+ return true if (obj1.is_a?(Array) || obj1.is_a?(Hash)) && obj2.is_a?(obj1.class)
+ return true if (obj2.is_a?(Array) || obj2.is_a?(Hash)) && obj1.is_a?(obj2.class)
+ return true if !strict && obj1.is_a?(Numeric) && obj2.is_a?(Numeric)
+
+ obj1.is_a?(obj2.class) && obj2.is_a?(obj1.class)
+ end
+
+ # @private
+ #
+ # try custom comparison
+ def self.custom_compare(method, key, obj1, obj2)
+ return unless method
+
+ res = method.call(key, obj1, obj2)
+
+ # nil != false here
+ return [['~', key, obj1, obj2]] if res == false
+ return [] if res == true
+ end
+
+ def self.prefix_append_key(prefix, key, opts)
+ if opts[:array_path]
+ prefix + [key]
+ else
+ prefix.empty? ? key.to_s : "#{prefix}#{opts[:delimiter]}#{key}"
+ end
+ end
+
+ def self.prefix_append_array_index(prefix, array_index, opts)
+ if opts[:array_path]
+ prefix + [array_index]
+ else
+ "#{prefix}[#{array_index}]"
+ end
+ end
+
+ class << self
+ private
+
+ # @private
+ #
+ # checks if both objects are Arrays or Hashes
+ def any_hash_or_array?(obja, objb)
+ obja.is_a?(Array) || obja.is_a?(Hash) || objb.is_a?(Array) || objb.is_a?(Hash)
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/version.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/version.rb
new file mode 100644
index 000000000..b6f28c466
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/lib/hashdiff/version.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+module Hashdiff
+ VERSION = '1.0.1'.freeze
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/best_diff_spec.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/best_diff_spec.rb
new file mode 100644
index 000000000..b8dbe6eda
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/best_diff_spec.rb
@@ -0,0 +1,75 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Hashdiff do
+ it 'is able to best diff' do
+ a = { 'x' => [{ 'a' => 1, 'c' => 3, 'e' => 5 }, { 'y' => 3 }] }
+ b = { 'x' => [{ 'a' => 1, 'b' => 2, 'e' => 5 }] }
+
+ diff = described_class.best_diff(a, b)
+ diff.should == [['-', 'x[0].c', 3], ['+', 'x[0].b', 2], ['-', 'x[1]', { 'y' => 3 }]]
+ end
+
+ it 'uses custom delimiter when provided' do
+ a = { 'x' => [{ 'a' => 1, 'c' => 3, 'e' => 5 }, { 'y' => 3 }] }
+ b = { 'x' => [{ 'a' => 1, 'b' => 2, 'e' => 5 }] }
+
+ diff = described_class.best_diff(a, b, delimiter: "\t")
+ diff.should == [['-', "x[0]\tc", 3], ['+', "x[0]\tb", 2], ['-', 'x[1]', { 'y' => 3 }]]
+ end
+
+ it 'uses custom comparison when provided' do
+ a = { 'x' => [{ 'a' => 'foo', 'c' => 'goat', 'e' => 'snake' }, { 'y' => 'baz' }] }
+ b = { 'x' => [{ 'a' => 'bar', 'b' => 'cow', 'e' => 'puppy' }] }
+
+ diff = described_class.best_diff(a, b) do |path, obj1, obj2|
+ case path
+ when /^x\[.\]\..$/
+ obj1.length == obj2.length if obj1 && obj2
+ end
+ end
+
+ diff.should == [['-', 'x[0].c', 'goat'], ['+', 'x[0].b', 'cow'], ['-', 'x[1]', { 'y' => 'baz' }]]
+ end
+
+ it 'is able to best diff array in hash' do
+ a = { 'menu' => {
+ 'id' => 'file',
+ 'value' => 'File',
+ 'popup' => {
+ 'menuitem' => [
+ { 'value' => 'New', 'onclick' => 'CreateNewDoc()' },
+ { 'value' => 'Close', 'onclick' => 'CloseDoc()' }
+ ]
+ }
+ } }
+
+ b = { 'menu' => {
+ 'id' => 'file 2',
+ 'value' => 'File',
+ 'popup' => {
+ 'menuitem' => [
+ { 'value' => 'New1', 'onclick' => 'CreateNewDoc()' },
+ { 'value' => 'Open', 'onclick' => 'OpenDoc()' },
+ { 'value' => 'Close', 'onclick' => 'CloseDoc()' }
+ ]
+ }
+ } }
+
+ diff = described_class.best_diff(a, b)
+ diff.should == [
+ ['~', 'menu.id', 'file', 'file 2'],
+ ['~', 'menu.popup.menuitem[0].value', 'New', 'New1'],
+ ['+', 'menu.popup.menuitem[1]', { 'value' => 'Open', 'onclick' => 'OpenDoc()' }]
+ ]
+ end
+
+ it 'is able to have an array_path specified' do
+ a = { 'x' => [{ 'a' => 1, 'c' => 3, 'e' => 5 }, { 'y' => 3 }] }
+ b = { 'x' => [{ 'a' => 1, 'b' => 2, 'e' => 5 }] }
+
+ diff = described_class.best_diff(a, b, array_path: true)
+ diff.should == [['-', ['x', 0, 'c'], 3], ['+', ['x', 0, 'b'], 2], ['-', ['x', 1], { 'y' => 3 }]]
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/diff_array_spec.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/diff_array_spec.rb
new file mode 100644
index 000000000..556132594
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/diff_array_spec.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Hashdiff do
+ it 'is able to diff two equal array' do
+ a = [1, 2, 3]
+ b = [1, 2, 3]
+
+ diff = described_class.diff_array_lcs(a, b)
+ diff.should == []
+ end
+
+ it 'is able to diff two arrays with one element in common' do
+ a = [1, 2, 3]
+ b = [1, 8, 7]
+
+ diff = described_class.diff_array_lcs(a, b)
+ diff.should == [['-', 2, 3], ['-', 1, 2], ['+', 1, 8], ['+', 2, 7]]
+ end
+
+ it 'is able to diff two arrays with nothing in common' do
+ a = [1, 2]
+ b = []
+
+ diff = described_class.diff_array_lcs(a, b)
+ diff.should == [['-', 1, 2], ['-', 0, 1]]
+ end
+
+ it 'is able to diff an empty array with an non-empty array' do
+ a = []
+ b = [1, 2]
+
+ diff = described_class.diff_array_lcs(a, b)
+ diff.should == [['+', 0, 1], ['+', 1, 2]]
+ end
+
+ it 'is able to diff two arrays with two elements in common' do
+ a = [1, 3, 5, 7]
+ b = [2, 3, 7, 5]
+
+ diff = described_class.diff_array_lcs(a, b)
+ diff.should == [['-', 0, 1], ['+', 0, 2], ['+', 2, 7], ['-', 4, 7]]
+ end
+
+ it 'is able to test two arrays with two common elements in different order' do
+ a = [1, 3, 4, 7]
+ b = [2, 3, 7, 5]
+
+ diff = described_class.diff_array_lcs(a, b)
+ diff.should == [['-', 0, 1], ['+', 0, 2], ['-', 2, 4], ['+', 3, 5]]
+ end
+
+ it 'is able to diff two arrays with similar elements' do
+ a = [{ 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 }, 3]
+ b = [1, { 'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5 }]
+ diff = described_class.diff_array_lcs(a, b)
+ diff.should == [['+', 0, 1], ['-', 2, 3]]
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/diff_spec.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/diff_spec.rb
new file mode 100644
index 000000000..c9dfd962d
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/diff_spec.rb
@@ -0,0 +1,360 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Hashdiff do
+ it 'is able to diff two empty hashes' do
+ diff = described_class.diff({}, {})
+ diff.should == []
+ end
+
+ it 'is able to diff an hash with an empty hash' do
+ a = { 'a' => 3, 'b' => 2 }
+ b = {}
+
+ diff = described_class.diff(a, b)
+ expect(diff).to eq([['-', 'a', 3], ['-', 'b', 2]])
+
+ diff = described_class.diff(b, a)
+ diff.should == [['+', 'a', 3], ['+', 'b', 2]]
+ end
+
+ it 'is able to diff two equal hashes' do
+ diff = described_class.diff({ 'a' => 2, 'b' => 2 }, 'a' => 2, 'b' => 2)
+ diff.should == []
+ end
+
+ it 'is able to diff two equal hashes with mixed key types' do
+ a = { 'a' => 1, :b => 1 }
+ diff = described_class.diff(a, a)
+ diff.should == []
+ end
+
+ it 'is able to diff if mixed key types are removed' do
+ a = { 'a' => 1, :b => 1 }
+ b = {}
+ diff = described_class.diff(a, b)
+ diff.should == [['-', 'a', 1], ['-', 'b', 1]]
+ end
+
+ it 'is able to diff if mixed key types are added' do
+ a = { 'a' => 1, :b => 1 }
+ b = {}
+ diff = described_class.diff(b, a)
+ diff.should == [['+', 'a', 1], ['+', 'b', 1]]
+ end
+
+ it 'is able to diff two hashes with equivalent numerics, when strict is false' do
+ diff = described_class.diff({ 'a' => 2.0, 'b' => 2 }, { 'a' => 2, 'b' => 2.0 }, strict: false)
+ diff.should == []
+ end
+
+ it 'ignores string vs symbol differences, when indifferent is true' do
+ diff = described_class.diff({ 'a' => 2, :b => 2 }, { :a => 2, 'b' => 2, :c => 3 }, indifferent: true)
+ diff.should == [['+', 'c', 3]]
+ end
+
+ it 'is able to diff changes in hash value' do
+ diff = described_class.diff({ 'a' => 2, 'b' => 3, 'c' => ' hello' }, 'a' => 2, 'b' => 4, 'c' => 'hello')
+ diff.should == [['~', 'b', 3, 4], ['~', 'c', ' hello', 'hello']]
+ end
+
+ it 'is able to diff changes in hash value which is array' do
+ diff = described_class.diff({ 'a' => 2, 'b' => [1, 2, 3] }, 'a' => 2, 'b' => [1, 3, 4])
+ diff.should == [['-', 'b[1]', 2], ['+', 'b[2]', 4]]
+ end
+
+ it 'is able to diff changes in hash value which is hash' do
+ diff = described_class.diff({ 'a' => { 'x' => 2, 'y' => 3, 'z' => 4 }, 'b' => { 'x' => 3, 'z' => 45 } },
+ 'a' => { 'y' => 3 }, 'b' => { 'y' => 3, 'z' => 30 })
+ diff.should == [['-', 'a.x', 2], ['-', 'a.z', 4], ['-', 'b.x', 3], ['~', 'b.z', 45, 30], ['+', 'b.y', 3]]
+ end
+
+ it 'is able to best diff similar objects in array' do
+ diff = described_class.best_diff({ 'a' => [{ 'x' => 2, 'y' => 3, 'z' => 4 }, { 'x' => 11, 'y' => 22, 'z' => 33 }], 'b' => { 'x' => 3, 'z' => 45 } },
+ 'a' => [{ 'y' => 3 }, { 'x' => 11, 'z' => 33 }], 'b' => { 'y' => 22 })
+ diff.should == [['-', 'a[0].x', 2], ['-', 'a[0].z', 4], ['-', 'a[1].y', 22], ['-', 'b.x', 3], ['-', 'b.z', 45], ['+', 'b.y', 22]]
+ end
+
+ it 'is able to diff addition of key value pair' do
+ a = { 'a' => 3, 'c' => 11, 'd' => 45, 'e' => 100, 'f' => 200 }
+ b = { 'a' => 3, 'c' => 11, 'd' => 45, 'e' => 100, 'f' => 200, 'g' => 300 }
+
+ diff = described_class.diff(a, b)
+ expect(diff).to eq([['+', 'g', 300]])
+
+ diff = described_class.diff(b, a)
+ diff.should == [['-', 'g', 300]]
+ end
+
+ it 'is able to diff value type changes' do
+ a = { 'a' => 3 }
+ b = { 'a' => { 'a1' => 1, 'a2' => 2 } }
+
+ diff = described_class.diff(a, b)
+ expect(diff).to eq([['~', 'a', 3, { 'a1' => 1, 'a2' => 2 }]])
+
+ diff = described_class.diff(b, a)
+ diff.should == [['~', 'a', { 'a1' => 1, 'a2' => 2 }, 3]]
+ end
+
+ it 'is able to diff value changes: array <=> []' do
+ a = { 'a' => 1, 'b' => [1, 2] }
+ b = { 'a' => 1, 'b' => [] }
+
+ diff = described_class.diff(a, b)
+ diff.should == [['-', 'b[1]', 2], ['-', 'b[0]', 1]]
+ end
+
+ it 'is able to diff value changes: array <=> nil' do
+ a = { 'a' => 1, 'b' => [1, 2] }
+ b = { 'a' => 1, 'b' => nil }
+
+ diff = described_class.diff(a, b)
+ diff.should == [['~', 'b', [1, 2], nil]]
+ end
+
+ it 'is able to diff value chagnes: remove array completely' do
+ a = { 'a' => 1, 'b' => [1, 2] }
+ b = { 'a' => 1 }
+
+ diff = described_class.diff(a, b)
+ diff.should == [['-', 'b', [1, 2]]]
+ end
+
+ it 'is able to diff value changes: remove whole hash' do
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1 }
+
+ diff = described_class.diff(a, b)
+ diff.should == [['-', 'b', { 'b1' => 1, 'b2' => 2 }]]
+ end
+
+ it 'is able to diff value changes: hash <=> {}' do
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1, 'b' => {} }
+
+ diff = described_class.diff(a, b)
+ diff.should == [['-', 'b.b1', 1], ['-', 'b.b2', 2]]
+ end
+
+ it 'is able to diff value changes: hash <=> nil' do
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1, 'b' => nil }
+
+ diff = described_class.diff(a, b)
+ diff.should == [['~', 'b', { 'b1' => 1, 'b2' => 2 }, nil]]
+ end
+
+ it 'is able to diff similar objects in array' do
+ a = [{ 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 }, 3]
+ b = [1, { 'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5 }]
+
+ diff = described_class.diff(a, b)
+ diff.should == [['-', '[0].d', 4], ['+', '[0]', 1], ['-', '[2]', 3]]
+ end
+
+ it 'is able to diff similar & equal objects in array' do
+ a = [{ 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 }, { 'x' => 5, 'y' => 6, 'z' => 3 }, 3]
+ b = [{ 'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5 }, 3]
+
+ diff = described_class.diff(a, b)
+ diff.should == [['-', '[0].d', 4], ['-', '[1]', { 'x' => 5, 'y' => 6, 'z' => 3 }]]
+ end
+
+ it 'uses custom delimiter when provided' do
+ a = [{ 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 }, { 'x' => 5, 'y' => 6, 'z' => 3 }, 3]
+ b = [{ 'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5 }, 3]
+
+ diff = described_class.diff(a, b, similarity: 0.8, delimiter: "\t")
+ diff.should == [['-', "[0]\td", 4], ['-', '[1]', { 'x' => 5, 'y' => 6, 'z' => 3 }]]
+ end
+
+ context 'when :numeric_tolerance requested' do
+ it 'is able to diff changes in hash value' do
+ a = { 'a' => 0.558, 'b' => 0.0, 'c' => 0.65, 'd' => 'fin' }
+ b = { 'a' => 0.557, 'b' => 'hats', 'c' => 0.67, 'd' => 'fin' }
+
+ diff = described_class.diff(a, b, numeric_tolerance: 0.01)
+ expect(diff).to eq([['~', 'b', 0.0, 'hats'], ['~', 'c', 0.65, 0.67]])
+
+ diff = described_class.diff(b, a, numeric_tolerance: 0.01)
+ diff.should == [['~', 'b', 'hats', 0.0], ['~', 'c', 0.67, 0.65]]
+ end
+
+ it 'is able to diff changes in nested values' do
+ a = { 'a' => { 'x' => 0.4, 'y' => 0.338 }, 'b' => [13, 68.03] }
+ b = { 'a' => { 'x' => 0.6, 'y' => 0.341 }, 'b' => [14, 68.025] }
+
+ diff = described_class.diff(a, b, numeric_tolerance: 0.01)
+ expect(diff).to eq([['~', 'a.x', 0.4, 0.6], ['-', 'b[0]', 13], ['+', 'b[0]', 14]])
+
+ diff = described_class.diff(b, a, numeric_tolerance: 0.01)
+ diff.should == [['~', 'a.x', 0.6, 0.4], ['-', 'b[0]', 14], ['+', 'b[0]', 13]]
+ end
+ end
+
+ context 'when :strip requested' do
+ it 'strips strings before comparing' do
+ a = { 'a' => ' foo', 'b' => 'fizz buzz' }
+ b = { 'a' => 'foo', 'b' => 'fizzbuzz' }
+ diff = described_class.diff(a, b, strip: true)
+ diff.should == [['~', 'b', 'fizz buzz', 'fizzbuzz']]
+ end
+
+ it 'strips nested strings before comparing' do
+ a = { 'a' => { 'x' => ' foo' }, 'b' => ['fizz buzz', 'nerf'] }
+ b = { 'a' => { 'x' => 'foo' }, 'b' => %w[fizzbuzz nerf] }
+ diff = described_class.diff(a, b, strip: true)
+ diff.should == [['-', 'b[0]', 'fizz buzz'], ['+', 'b[0]', 'fizzbuzz']]
+ end
+ end
+
+ context 'when :case_insensitive requested' do
+ it 'strips strings before comparing' do
+ a = { 'a' => 'Foo', 'b' => 'fizz buzz' }
+ b = { 'a' => 'foo', 'b' => 'fizzBuzz' }
+ diff = described_class.diff(a, b, case_insensitive: true)
+ diff.should == [['~', 'b', 'fizz buzz', 'fizzBuzz']]
+ end
+
+ it 'ignores case on nested strings before comparing' do
+ a = { 'a' => { 'x' => 'Foo' }, 'b' => ['fizz buzz', 'nerf'] }
+ b = { 'a' => { 'x' => 'foo' }, 'b' => %w[fizzbuzz nerf] }
+ diff = described_class.diff(a, b, case_insensitive: true)
+ diff.should == [['-', 'b[0]', 'fizz buzz'], ['+', 'b[0]', 'fizzbuzz']]
+ end
+ end
+
+ context 'when both :strip and :numeric_tolerance requested' do
+ it 'applies filters to proper object types' do
+ a = { 'a' => ' foo', 'b' => 35, 'c' => 'bar', 'd' => 'baz' }
+ b = { 'a' => 'foo', 'b' => 35.005, 'c' => 'bar', 'd' => 18.5 }
+ diff = described_class.diff(a, b, strict: false, numeric_tolerance: 0.01, strip: true)
+ diff.should == [['~', 'd', 'baz', 18.5]]
+ end
+ end
+
+ context 'when both :strip and :case_insensitive requested' do
+ it 'applies both filters to strings' do
+ a = { 'a' => ' Foo', 'b' => 'fizz buzz' }
+ b = { 'a' => 'foo', 'b' => 'fizzBuzz' }
+ diff = described_class.diff(a, b, case_insensitive: true, strip: true)
+ diff.should == [['~', 'b', 'fizz buzz', 'fizzBuzz']]
+ end
+ end
+
+ context 'with custom comparison' do
+ let(:a) { { 'a' => 'car', 'b' => 'boat', 'c' => 'plane' } }
+ let(:b) { { 'a' => 'bus', 'b' => 'truck', 'c' => ' plan' } }
+
+ it 'compares using proc specified in block' do
+ diff = described_class.diff(a, b) do |prefix, obj1, obj2|
+ case prefix
+ when /a|b|c/
+ obj1.length == obj2.length
+ end
+ end
+ diff.should == [['~', 'b', 'boat', 'truck']]
+ end
+
+ it 'yields added keys' do
+ x = { 'a' => 'car', 'b' => 'boat' }
+ y = { 'a' => 'car' }
+
+ diff = described_class.diff(x, y) do |prefix, _obj1, _obj2|
+ case prefix
+ when /b/
+ true
+ end
+ end
+ diff.should == []
+ end
+
+ it 'compares with both proc and :strip when both provided' do
+ diff = described_class.diff(a, b, strip: true) do |prefix, obj1, obj2|
+ case prefix
+ when 'a'
+ obj1.length == obj2.length
+ end
+ end
+ diff.should == [['~', 'b', 'boat', 'truck'], ['~', 'c', 'plane', ' plan']]
+ end
+
+ it 'compares nested arrays using proc specified in block' do
+ a = { a: 'car', b: %w[boat plane] }
+ b = { a: 'bus', b: ['truck', ' plan'] }
+
+ diff = described_class.diff(a, b) do |path, obj1, obj2|
+ case path
+ when 'b[*]'
+ obj1.length == obj2.length
+ end
+ end
+
+ expect(diff).to eq [['~', 'a', 'car', 'bus'], ['~', 'b[1]', 'plane', ' plan'], ['-', 'b[0]', 'boat'], ['+', 'b[0]', 'truck']]
+ end
+ end
+
+ context 'when :array_path is true' do
+ it 'returns the diff path in an array rather than a string' do
+ x = { 'a' => 'foo' }
+ y = { 'a' => 'bar' }
+ diff = described_class.diff(x, y, array_path: true)
+
+ diff.should == [['~', ['a'], 'foo', 'bar']]
+ end
+
+ it 'shows array indexes in paths' do
+ x = { 'a' => [0, 1, 2] }
+ y = { 'a' => [0, 1, 2, 3] }
+
+ diff = described_class.diff(x, y, array_path: true)
+
+ diff.should == [['+', ['a', 3], 3]]
+ end
+
+ it 'shows differences with string and symbol keys' do
+ x = { 'a' => 'foo' }
+ y = { a: 'bar' }
+
+ diff = described_class.diff(x, y, array_path: true)
+ diff.should == [['-', ['a'], 'foo'], ['+', [:a], 'bar']]
+ end
+
+ it 'supports other key types' do
+ time = Time.now
+ x = { time => 'foo' }
+ y = { 0 => 'bar' }
+
+ diff = described_class.diff(x, y, array_path: true)
+ diff.should == [['-', [time], 'foo'], ['+', [0], 'bar']]
+ end
+ end
+
+ context 'when :use_lcs is false' do
+ it 'shows items in an array as changed' do
+ x = %i[a b]
+ y = %i[c d]
+ diff = described_class.diff(x, y, use_lcs: false)
+
+ diff.should == [['~', '[0]', :a, :c], ['~', '[1]', :b, :d]]
+ end
+
+ it 'shows additions to arrays' do
+ x = { a: [0] }
+ y = { a: [0, 1] }
+ diff = described_class.diff(x, y, use_lcs: false)
+
+ diff.should == [['+', 'a[1]', 1]]
+ end
+
+ it 'shows changes to nested arrays' do
+ x = { a: [[0, 1]] }
+ y = { a: [[1, 2]] }
+ diff = described_class.diff(x, y, use_lcs: false)
+
+ diff.should == [['~', 'a[0][0]', 0, 1], ['~', 'a[0][1]', 1, 2]]
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/lcs_spec.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/lcs_spec.rb
new file mode 100644
index 000000000..d286b161a
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/lcs_spec.rb
@@ -0,0 +1,76 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Hashdiff do
+ it 'is able to find LCS between two equal array' do
+ a = [1, 2, 3]
+ b = [1, 2, 3]
+
+ lcs = described_class.lcs(a, b)
+ lcs.should == [[0, 0], [1, 1], [2, 2]]
+ end
+
+ it 'is able to find LCS between two close arrays' do
+ a = [1.05, 2, 3.25]
+ b = [1.06, 2, 3.24]
+
+ lcs = described_class.lcs(a, b, numeric_tolerance: 0.1)
+ lcs.should == [[0, 0], [1, 1], [2, 2]]
+ end
+
+ it 'strips strings when finding LCS if requested' do
+ a = %w[foo bar baz]
+ b = [' foo', 'bar', 'zab']
+
+ lcs = described_class.lcs(a, b, strip: true)
+ lcs.should == [[0, 0], [1, 1]]
+ end
+
+ it 'is able to find LCS with one common elements' do
+ a = [1, 2, 3]
+ b = [1, 8, 7]
+
+ lcs = described_class.lcs(a, b)
+ lcs.should == [[0, 0]]
+ end
+
+ it 'is able to find LCS with two common elements' do
+ a = [1, 3, 5, 7]
+ b = [2, 3, 7, 5]
+
+ lcs = described_class.lcs(a, b)
+ lcs.should == [[1, 1], [2, 3]]
+ end
+
+ it 'is able to find LCS with two close elements' do
+ a = [1, 3.05, 5, 7]
+ b = [2, 3.06, 7, 5]
+
+ lcs = described_class.lcs(a, b, numeric_tolerance: 0.1)
+ lcs.should == [[1, 1], [2, 3]]
+ end
+
+ it 'is able to find LCS with two common elements in different ordering' do
+ a = [1, 3, 4, 7]
+ b = [2, 3, 7, 5]
+
+ lcs = described_class.lcs(a, b)
+ lcs.should == [[1, 1], [3, 2]]
+ end
+
+ it 'is able to find LCS with a similarity value' do
+ a = [
+ { 'value' => 'New', 'onclick' => 'CreateNewDoc()' },
+ { 'value' => 'Close', 'onclick' => 'CloseDoc()' }
+ ]
+ b = [
+ { 'value' => 'New1', 'onclick' => 'CreateNewDoc()' },
+ { 'value' => 'Open', 'onclick' => 'OpenDoc()' },
+ { 'value' => 'Close', 'onclick' => 'CloseDoc()' }
+ ]
+
+ lcs = described_class.lcs(a, b, similarity: 0.5)
+ lcs.should == [[0, 0], [1, 2]]
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/linear_compare_array_spec.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/linear_compare_array_spec.rb
new file mode 100644
index 000000000..b9490ad4b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/linear_compare_array_spec.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Hashdiff::LinearCompareArray do
+ it 'finds no differences between two empty arrays' do
+ difference = described_class.call([], [])
+ difference.should == []
+ end
+
+ it 'finds added items when the old array is empty' do
+ difference = described_class.call([], %i[a b])
+ difference.should == [['+', '[0]', :a], ['+', '[1]', :b]]
+ end
+
+ it 'finds removed items when the new array is empty' do
+ difference = described_class.call(%i[a b], [])
+ difference.should == [['-', '[1]', :b], ['-', '[0]', :a]]
+ end
+
+ it 'finds no differences between identical arrays' do
+ difference = described_class.call(%i[a b], %i[a b])
+ difference.should == []
+ end
+
+ it 'finds added items in an array' do
+ difference = described_class.call(%i[a d], %i[a b c d])
+ difference.should == [['+', '[1]', :b], ['+', '[2]', :c]]
+ end
+
+ it 'finds removed items in an array' do
+ difference = described_class.call(%i[a b c d e f], %i[a d f])
+ difference.should == [['-', '[4]', :e], ['-', '[2]', :c], ['-', '[1]', :b]]
+ end
+
+ it 'shows additions and deletions as changed items' do
+ difference = described_class.call(%i[a b c], %i[c b a])
+ difference.should == [['~', '[0]', :a, :c], ['~', '[2]', :c, :a]]
+ end
+
+ it 'shows changed items in a hash' do
+ difference = described_class.call([{ a: :b }], [{ a: :c }])
+ difference.should == [['~', '[0].a', :b, :c]]
+ end
+
+ it 'shows changed items and added items' do
+ difference = described_class.call([{ a: 1, b: 2 }], [{ a: 2, b: 2 }, :item])
+ difference.should == [['~', '[0].a', 1, 2], ['+', '[1]', :item]]
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/patch_spec.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/patch_spec.rb
new file mode 100644
index 000000000..515de1d71
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/patch_spec.rb
@@ -0,0 +1,185 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Hashdiff do
+ it 'is able to patch key addition' do
+ a = { 'a' => 3, 'c' => 11, 'd' => 45, 'e' => 100, 'f' => 200 }
+ b = { 'a' => 3, 'c' => 11, 'd' => 45, 'e' => 100, 'f' => 200, 'g' => 300 }
+ diff = described_class.diff(a, b)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 3, 'c' => 11, 'd' => 45, 'e' => 100, 'f' => 200 }
+ b = { 'a' => 3, 'c' => 11, 'd' => 45, 'e' => 100, 'f' => 200, 'g' => 300 }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch value type changes' do
+ a = { 'a' => 3 }
+ b = { 'a' => { 'a1' => 1, 'a2' => 2 } }
+ diff = described_class.diff(a, b)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 3 }
+ b = { 'a' => { 'a1' => 1, 'a2' => 2 } }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch value array <=> []' do
+ a = { 'a' => 1, 'b' => [1, 2] }
+ b = { 'a' => 1, 'b' => [] }
+ diff = described_class.diff(a, b)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 1, 'b' => [1, 2] }
+ b = { 'a' => 1, 'b' => [] }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch value array <=> nil' do
+ a = { 'a' => 1, 'b' => [1, 2] }
+ b = { 'a' => 1, 'b' => nil }
+ diff = described_class.diff(a, b)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 1, 'b' => [1, 2] }
+ b = { 'a' => 1, 'b' => nil }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch array value removal' do
+ a = { 'a' => 1, 'b' => [1, 2] }
+ b = { 'a' => 1 }
+ diff = described_class.diff(a, b)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 1, 'b' => [1, 2] }
+ b = { 'a' => 1 }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch array under hash key with non-word characters' do
+ a = { 'a' => 1, 'b-b' => [1, 2] }
+ b = { 'a' => 1, 'b-b' => [2, 1] }
+ diff = described_class.diff(a, b)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 1, 'b-b' => [1, 2] }
+ b = { 'a' => 1, 'b-b' => [2, 1] }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch hash value removal' do
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1 }
+ diff = described_class.diff(a, b)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1 }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch value hash <=> {}' do
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1, 'b' => {} }
+ diff = described_class.diff(a, b)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1, 'b' => {} }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch value hash <=> nil' do
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1, 'b' => nil }
+ diff = described_class.diff(a, b)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1, 'b' => nil }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch value nil removal' do
+ a = { 'a' => 1, 'b' => nil }
+ b = { 'a' => 1 }
+ diff = described_class.diff(a, b)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 1, 'b' => nil }
+ b = { 'a' => 1 }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch similar objects between arrays' do
+ a = [{ 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 }, 3]
+ b = [1, { 'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5 }]
+
+ diff = described_class.diff(a, b)
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = [{ 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 }, 3]
+ b = [1, { 'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5 }]
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch similar & equal objects between arrays' do
+ a = [{ 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 }, { 'x' => 5, 'y' => 6, 'z' => 3 }, 1]
+ b = [1, { 'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5 }]
+
+ diff = described_class.diff(a, b)
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = [{ 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 }, { 'x' => 5, 'y' => 6, 'z' => 3 }, 1]
+ b = [1, { 'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5 }]
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to patch hash value removal with custom delimiter' do
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1, 'b' => { 'b1' => 3 } }
+ diff = described_class.diff(a, b, delimiter: "\n")
+
+ expect(described_class.patch!(a, diff, delimiter: "\n")).to eq(b)
+
+ a = { 'a' => 1, 'b' => { 'b1' => 1, 'b2' => 2 } }
+ b = { 'a' => 1, 'b' => { 'b1' => 3 } }
+ described_class.unpatch!(b, diff, delimiter: "\n").should == a
+ end
+
+ it 'is able to patch when the diff is generated with an array_path' do
+ a = { 'a' => 1, 'b' => 1 }
+ b = { 'a' => 1, 'b' => 2 }
+ diff = described_class.diff(a, b, array_path: true)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 1, 'b' => 1 }
+ b = { 'a' => 1, 'b' => 2 }
+ described_class.unpatch!(b, diff).should == a
+ end
+
+ it 'is able to use non string keys when diff is generated with an array_path' do
+ a = { 'a' => 1, :a => 2, 0 => 3 }
+ b = { 'a' => 5, :a => 6, 0 => 7 }
+ diff = described_class.diff(a, b, array_path: true)
+
+ expect(described_class.patch!(a, diff)).to eq(b)
+
+ a = { 'a' => 1, :a => 2, 0 => 3 }
+ b = { 'a' => 5, :a => 6, 0 => 7 }
+ described_class.unpatch!(b, diff).should == a
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/readme_spec.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/readme_spec.rb
new file mode 100644
index 000000000..ee9314bdf
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/readme_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'README.md' do
+ it 'has correct examples' do
+ File.read('README.md').scan(/```ruby(.*?)```/m).flatten(1).each do |block|
+ begin
+ eval block # rubocop:disable Security/Eval
+ rescue Exception => e # rubocop:disable Lint/RescueException
+ raise "README.md code block:\n#{block}\n\nhas error:\n#{e}"
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/util_spec.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/util_spec.rb
new file mode 100644
index 000000000..b9db7350a
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/hashdiff/util_spec.rb
@@ -0,0 +1,116 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Hashdiff do
+ it 'is able to decode property path' do
+ decoded = described_class.send(:decode_property_path, 'a.b[0].c.city[5]')
+ decoded.should == ['a', 'b', 0, 'c', 'city', 5]
+ end
+
+ it 'is able to decode property path with custom delimiter' do
+ decoded = described_class.send(:decode_property_path, "a\tb[0]\tc\tcity[5]", "\t")
+ decoded.should == ['a', 'b', 0, 'c', 'city', 5]
+ end
+
+ it 'is able to tell similiar hash' do
+ a = { 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 }
+ b = { 'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5 }
+ described_class.similar?(a, b).should be true
+ described_class.similar?(a, b, similarity: 1).should be false
+ end
+
+ it 'is able to tell similiar empty hash' do
+ described_class.similar?({}, {}, similarity: 1).should be true
+ end
+
+ it 'is able to tell similiar empty array' do
+ described_class.similar?([], [], similarity: 1).should be true
+ end
+
+ it 'is able to tell similiar hash with values within tolerance' do
+ a = { 'a' => 1.5, 'b' => 2.25, 'c' => 3, 'd' => 4, 'e' => 5 }
+ b = { 'a' => 1.503, 'b' => 2.22, 'c' => 3, 'e' => 5 }
+ described_class.similar?(a, b, numeric_tolerance: 0.05).should be true
+ described_class.similar?(a, b).should be false
+ end
+
+ it 'is able to tell numbers and strings' do
+ described_class.similar?(1, 2).should be false
+ described_class.similar?('a', 'b').should be false
+ described_class.similar?('a', [1, 2, 3]).should be false
+ described_class.similar?(1, 'a' => 1, 'b' => 2, 'c' => 3, 'e' => 5).should be false
+ end
+
+ it 'is able to tell true when similarity == 0.5' do
+ a = { 'value' => 'New1', 'onclick' => 'CreateNewDoc()' }
+ b = { 'value' => 'New', 'onclick' => 'CreateNewDoc()' }
+
+ described_class.similar?(a, b, similarity: 0.5).should be true
+ end
+
+ it 'is able to tell false when similarity == 0.5' do
+ a = { 'value' => 'New1', 'onclick' => 'open()' }
+ b = { 'value' => 'New', 'onclick' => 'CreateNewDoc()' }
+
+ described_class.similar?(a, b, similarity: 0.5).should be false
+ end
+
+ describe '.compare_values' do
+ it 'compares numeric values exactly when no tolerance' do
+ expect(described_class.compare_values(10.004, 10.003)).to be false
+ end
+
+ it 'allows tolerance with numeric values' do
+ expect(described_class.compare_values(10.004, 10.003, numeric_tolerance: 0.01)).to be true
+ end
+
+ it 'compares different objects without tolerance' do
+ expect(described_class.compare_values('hats', 'ninjas')).to be false
+ end
+
+ it 'compares other objects with tolerance' do
+ expect(described_class.compare_values('hats', 'ninjas', numeric_tolerance: 0.01)).to be false
+ end
+
+ it 'compares same objects without tolerance' do
+ expect(described_class.compare_values('horse', 'horse')).to be true
+ end
+
+ it 'compares strings for spaces exactly by default' do
+ expect(described_class.compare_values(' horse', 'horse')).to be false
+ end
+
+ it 'compares strings for capitalization exactly by default' do
+ expect(described_class.compare_values('horse', 'Horse')).to be false
+ end
+
+ it 'strips strings before comparing when requested' do
+ expect(described_class.compare_values(' horse', 'horse', strip: true)).to be true
+ end
+
+ it 'ignores string case when requested' do
+ expect(described_class.compare_values('horse', 'Horse', case_insensitive: true)).to be true
+ end
+ end
+
+ describe '.comparable?' do
+ it 'identifies hashes as comparable' do
+ expect(described_class.comparable?({}, {})).to be true
+ end
+
+ it 'identifies a subclass of Hash to be comparable with a Hash' do
+ other = Class.new(Hash)
+ expect(described_class.comparable?(other.new, {})).to be true
+ end
+
+ it 'identifies a Hash to be comparable with a subclass of Hash' do
+ other = Class.new(Hash)
+ expect(described_class.comparable?({}, other.new)).to be true
+ end
+
+ it 'does not identify a Numeric as comparable with a Hash' do
+ expect(described_class.comparable?(1, {})).to be false
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/spec_helper.rb b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/spec_helper.rb
new file mode 100644
index 000000000..91828cc61
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/hashdiff-1.0.1/spec/spec_helper.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
+
+require 'rubygems'
+require 'rspec'
+require 'rspec/autorun'
+
+require 'hashdiff'
+
+RSpec.configure do |config|
+ config.mock_framework = :rspec
+
+ config.include RSpec::Matchers
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/MIT-LICENSE.txt b/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/MIT-LICENSE.txt
new file mode 100644
index 000000000..a8889b2a7
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/MIT-LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (C) 2013 Michael Grosser
+
+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.
diff --git a/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/lib/parallel.rb b/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/lib/parallel.rb
new file mode 100644
index 000000000..c7f2bf683
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/lib/parallel.rb
@@ -0,0 +1,612 @@
+# frozen_string_literal: true
+require 'rbconfig'
+require 'parallel/version'
+require 'parallel/processor_count'
+
+module Parallel
+ extend ProcessorCount
+
+ Stop = Object.new.freeze
+
+ class DeadWorker < StandardError
+ end
+
+ class Break < StandardError
+ attr_reader :value
+
+ def initialize(value = nil)
+ super()
+ @value = value
+ end
+ end
+
+ class Kill < Break
+ end
+
+ class UndumpableException < StandardError
+ attr_reader :backtrace
+
+ def initialize(original)
+ super "#{original.class}: #{original.message}"
+ @backtrace = original.backtrace
+ end
+ end
+
+ class ExceptionWrapper
+ attr_reader :exception
+
+ def initialize(exception)
+ # Remove the bindings stack added by the better_errors gem,
+ # because it cannot be marshalled
+ if exception.instance_variable_defined? :@__better_errors_bindings_stack
+ exception.send :remove_instance_variable, :@__better_errors_bindings_stack
+ end
+
+ @exception =
+ begin
+ Marshal.dump(exception) && exception
+ rescue StandardError
+ UndumpableException.new(exception)
+ end
+ end
+ end
+
+ class Worker
+ attr_reader :pid, :read, :write
+ attr_accessor :thread
+
+ def initialize(read, write, pid)
+ @read = read
+ @write = write
+ @pid = pid
+ end
+
+ def stop
+ close_pipes
+ wait # if it goes zombie, rather wait here to be able to debug
+ end
+
+ # might be passed to started_processes and simultaneously closed by another thread
+ # when running in isolation mode, so we have to check if it is closed before closing
+ def close_pipes
+ read.close unless read.closed?
+ write.close unless write.closed?
+ end
+
+ def work(data)
+ begin
+ Marshal.dump(data, write)
+ rescue Errno::EPIPE
+ raise DeadWorker
+ end
+
+ result = begin
+ Marshal.load(read)
+ rescue EOFError
+ raise DeadWorker
+ end
+ raise result.exception if result.is_a?(ExceptionWrapper)
+ result
+ end
+
+ private
+
+ def wait
+ Process.wait(pid)
+ rescue Interrupt
+ # process died
+ end
+ end
+
+ class JobFactory
+ def initialize(source, mutex)
+ @lambda = (source.respond_to?(:call) && source) || queue_wrapper(source)
+ @source = source.to_a unless @lambda # turn Range and other Enumerable-s into an Array
+ @mutex = mutex
+ @index = -1
+ @stopped = false
+ end
+
+ def next
+ if producer?
+ # - index and item stay in sync
+ # - do not call lambda after it has returned Stop
+ item, index = @mutex.synchronize do
+ return if @stopped
+ item = @lambda.call
+ @stopped = (item == Stop)
+ return if @stopped
+ [item, @index += 1]
+ end
+ else
+ index = @mutex.synchronize { @index += 1 }
+ return if index >= size
+ item = @source[index]
+ end
+ [item, index]
+ end
+
+ def size
+ if producer?
+ Float::INFINITY
+ else
+ @source.size
+ end
+ end
+
+ # generate item that is sent to workers
+ # just index is faster + less likely to blow up with unserializable errors
+ def pack(item, index)
+ producer? ? [item, index] : index
+ end
+
+ # unpack item that is sent to workers
+ def unpack(data)
+ producer? ? data : [@source[data], data]
+ end
+
+ private
+
+ def producer?
+ @lambda
+ end
+
+ def queue_wrapper(array)
+ array.respond_to?(:num_waiting) && array.respond_to?(:pop) && -> { array.pop(false) }
+ end
+ end
+
+ class UserInterruptHandler
+ INTERRUPT_SIGNAL = :SIGINT
+
+ class << self
+ # kill all these pids or threads if user presses Ctrl+c
+ def kill_on_ctrl_c(pids, options)
+ @to_be_killed ||= []
+ old_interrupt = nil
+ signal = options.fetch(:interrupt_signal, INTERRUPT_SIGNAL)
+
+ if @to_be_killed.empty?
+ old_interrupt = trap_interrupt(signal) do
+ warn 'Parallel execution interrupted, exiting ...'
+ @to_be_killed.flatten.each { |pid| kill(pid) }
+ end
+ end
+
+ @to_be_killed << pids
+
+ yield
+ ensure
+ @to_be_killed.pop # do not kill pids that could be used for new processes
+ restore_interrupt(old_interrupt, signal) if @to_be_killed.empty?
+ end
+
+ def kill(thing)
+ Process.kill(:KILL, thing)
+ rescue Errno::ESRCH
+ # some linux systems already automatically killed the children at this point
+ # so we just ignore them not being there
+ end
+
+ private
+
+ def trap_interrupt(signal)
+ old = Signal.trap signal, 'IGNORE'
+
+ Signal.trap signal do
+ yield
+ if !old || old == "DEFAULT"
+ raise Interrupt
+ else
+ old.call
+ end
+ end
+
+ old
+ end
+
+ def restore_interrupt(old, signal)
+ Signal.trap signal, old
+ end
+ end
+ end
+
+ class << self
+ def in_threads(options = { count: 2 })
+ threads = []
+ count, = extract_count_from_options(options)
+
+ Thread.handle_interrupt(Exception => :never) do
+ Thread.handle_interrupt(Exception => :immediate) do
+ count.times do |i|
+ threads << Thread.new { yield(i) }
+ end
+ threads.map(&:value)
+ end
+ ensure
+ threads.each(&:kill)
+ end
+ end
+
+ def in_processes(options = {}, &block)
+ count, options = extract_count_from_options(options)
+ count ||= processor_count
+ map(0...count, options.merge(in_processes: count), &block)
+ end
+
+ def each(array, options = {}, &block)
+ map(array, options.merge(preserve_results: false), &block)
+ end
+
+ def any?(*args, &block)
+ raise "You must provide a block when calling #any?" if block.nil?
+ !each(*args) { |*a| raise Kill if block.call(*a) }
+ end
+
+ def all?(*args, &block)
+ raise "You must provide a block when calling #all?" if block.nil?
+ !!each(*args) { |*a| raise Kill unless block.call(*a) }
+ end
+
+ def each_with_index(array, options = {}, &block)
+ each(array, options.merge(with_index: true), &block)
+ end
+
+ def map(source, options = {}, &block)
+ options = options.dup
+ options[:mutex] = Mutex.new
+
+ if options[:in_processes] && options[:in_threads]
+ raise ArgumentError, "Please specify only one of `in_processes` or `in_threads`."
+ elsif RUBY_PLATFORM =~ (/java/) && !(options[:in_processes])
+ method = :in_threads
+ size = options[method] || processor_count
+ elsif options[:in_threads]
+ method = :in_threads
+ size = options[method]
+ elsif options[:in_ractors]
+ method = :in_ractors
+ size = options[method]
+ else
+ method = :in_processes
+ if Process.respond_to?(:fork)
+ size = options[method] || processor_count
+ else
+ warn "Process.fork is not supported by this Ruby"
+ size = 0
+ end
+ end
+
+ job_factory = JobFactory.new(source, options[:mutex])
+ size = [job_factory.size, size].min
+
+ options[:return_results] = (options[:preserve_results] != false || !!options[:finish])
+ add_progress_bar!(job_factory, options)
+
+ result =
+ if size == 0
+ work_direct(job_factory, options, &block)
+ elsif method == :in_threads
+ work_in_threads(job_factory, options.merge(count: size), &block)
+ elsif method == :in_ractors
+ work_in_ractors(job_factory, options.merge(count: size), &block)
+ else
+ work_in_processes(job_factory, options.merge(count: size), &block)
+ end
+
+ return result.value if result.is_a?(Break)
+ raise result if result.is_a?(Exception)
+ options[:return_results] ? result : source
+ end
+
+ def map_with_index(array, options = {}, &block)
+ map(array, options.merge(with_index: true), &block)
+ end
+
+ def flat_map(*args, &block)
+ map(*args, &block).flatten(1)
+ end
+
+ def worker_number
+ Thread.current[:parallel_worker_number]
+ end
+
+ # TODO: this does not work when doing threads in forks, so should remove and yield the number instead if needed
+ def worker_number=(worker_num)
+ Thread.current[:parallel_worker_number] = worker_num
+ end
+
+ private
+
+ def add_progress_bar!(job_factory, options)
+ if progress_options = options[:progress]
+ raise "Progressbar can only be used with array like items" if job_factory.size == Float::INFINITY
+ require 'ruby-progressbar'
+
+ if progress_options == true
+ progress_options = { title: "Progress" }
+ elsif progress_options.respond_to? :to_str
+ progress_options = { title: progress_options.to_str }
+ end
+
+ progress_options = {
+ total: job_factory.size,
+ format: '%t |%E | %B | %a'
+ }.merge(progress_options)
+
+ progress = ProgressBar.create(progress_options)
+ old_finish = options[:finish]
+ options[:finish] = lambda do |item, i, result|
+ old_finish.call(item, i, result) if old_finish
+ progress.increment
+ end
+ end
+ end
+
+ def work_direct(job_factory, options, &block)
+ self.worker_number = 0
+ results = []
+ exception = nil
+ begin
+ while set = job_factory.next
+ item, index = set
+ results << with_instrumentation(item, index, options) do
+ call_with_index(item, index, options, &block)
+ end
+ end
+ rescue StandardError
+ exception = $!
+ end
+ exception || results
+ ensure
+ self.worker_number = nil
+ end
+
+ def work_in_threads(job_factory, options, &block)
+ raise "interrupt_signal is no longer supported for threads" if options[:interrupt_signal]
+ results = []
+ results_mutex = Mutex.new # arrays are not thread-safe on jRuby
+ exception = nil
+
+ in_threads(options) do |worker_num|
+ self.worker_number = worker_num
+ # as long as there are more jobs, work on one of them
+ while !exception && set = job_factory.next
+ begin
+ item, index = set
+ result = with_instrumentation item, index, options do
+ call_with_index(item, index, options, &block)
+ end
+ results_mutex.synchronize { results[index] = result }
+ rescue StandardError
+ exception = $!
+ end
+ end
+ end
+
+ exception || results
+ end
+
+ def work_in_ractors(job_factory, options)
+ exception = nil
+ results = []
+ results_mutex = Mutex.new # arrays are not thread-safe on jRuby
+
+ callback = options[:ractor]
+ if block_given? || !callback
+ raise ArgumentError, "pass the code you want to execute as `ractor: [ClassName, :method_name]`"
+ end
+
+ # build
+ ractors = Array.new(options.fetch(:count)) do
+ Ractor.new do
+ loop do
+ got = receive
+ (klass, method_name), item, index = got
+ break if index == :break
+ begin
+ Ractor.yield [nil, klass.send(method_name, item), item, index]
+ rescue StandardError => e
+ Ractor.yield [e, nil, item, index]
+ end
+ end
+ end
+ end
+
+ # start
+ ractors.dup.each do |ractor|
+ if set = job_factory.next
+ item, index = set
+ instrument_start item, index, options
+ ractor.send [callback, item, index]
+ else
+ ractor.send([[nil, nil], nil, :break]) # stop the ractor
+ ractors.delete ractor
+ end
+ end
+
+ # replace with new items
+ while set = job_factory.next
+ item_next, index_next = set
+ done, (exception, result, item, index) = Ractor.select(*ractors)
+ if exception
+ ractors.delete done
+ break
+ end
+ instrument_finish item, index, result, options
+ results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
+
+ instrument_start item_next, index_next, options
+ done.send([callback, item_next, index_next])
+ end
+
+ # finish
+ ractors.each do |ractor|
+ (new_exception, result, item, index) = ractor.take
+ exception ||= new_exception
+ next if new_exception
+ instrument_finish item, index, result, options
+ results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
+ ractor.send([[nil, nil], nil, :break]) # stop the ractor
+ end
+
+ exception || results
+ end
+
+ def work_in_processes(job_factory, options, &blk)
+ workers = create_workers(job_factory, options, &blk)
+ results = []
+ results_mutex = Mutex.new # arrays are not thread-safe
+ exception = nil
+
+ UserInterruptHandler.kill_on_ctrl_c(workers.map(&:pid), options) do
+ in_threads(options) do |i|
+ worker = workers[i]
+ worker.thread = Thread.current
+ worked = false
+
+ begin
+ loop do
+ break if exception
+ item, index = job_factory.next
+ break unless index
+
+ if options[:isolation]
+ worker = replace_worker(job_factory, workers, i, options, blk) if worked
+ worked = true
+ worker.thread = Thread.current
+ end
+
+ begin
+ result = with_instrumentation item, index, options do
+ worker.work(job_factory.pack(item, index))
+ end
+ results_mutex.synchronize { results[index] = result } # arrays are not threads safe on jRuby
+ rescue StandardError => e
+ exception = e
+ if exception.is_a?(Kill)
+ (workers - [worker]).each do |w|
+ w.thread&.kill
+ UserInterruptHandler.kill(w.pid)
+ end
+ end
+ end
+ end
+ ensure
+ worker.stop
+ end
+ end
+ end
+
+ exception || results
+ end
+
+ def replace_worker(job_factory, workers, index, options, blk)
+ options[:mutex].synchronize do
+ # old worker is no longer used ... stop it
+ worker = workers[index]
+ worker.stop
+
+ # create a new replacement worker
+ running = workers - [worker]
+ workers[index] = worker(job_factory, options.merge(started_workers: running, worker_number: index), &blk)
+ end
+ end
+
+ def create_workers(job_factory, options, &block)
+ workers = []
+ Array.new(options[:count]).each_with_index do |_, i|
+ workers << worker(job_factory, options.merge(started_workers: workers, worker_number: i), &block)
+ end
+ workers
+ end
+
+ def worker(job_factory, options, &block)
+ child_read, parent_write = IO.pipe
+ parent_read, child_write = IO.pipe
+
+ pid = Process.fork do
+ self.worker_number = options[:worker_number]
+
+ begin
+ options.delete(:started_workers).each(&:close_pipes)
+
+ parent_write.close
+ parent_read.close
+
+ process_incoming_jobs(child_read, child_write, job_factory, options, &block)
+ ensure
+ child_read.close
+ child_write.close
+ end
+ end
+
+ child_read.close
+ child_write.close
+
+ Worker.new(parent_read, parent_write, pid)
+ end
+
+ def process_incoming_jobs(read, write, job_factory, options, &block)
+ until read.eof?
+ data = Marshal.load(read)
+ item, index = job_factory.unpack(data)
+
+ result =
+ begin
+ call_with_index(item, index, options, &block)
+ # https://github.com/rspec/rspec-support/blob/673133cdd13b17077b3d88ece8d7380821f8d7dc/lib/rspec/support.rb#L132-L140
+ rescue NoMemoryError, SignalException, Interrupt, SystemExit # rubocop:disable Lint/ShadowedException
+ raise $!
+ rescue Exception # # rubocop:disable Lint/RescueException
+ ExceptionWrapper.new($!)
+ end
+
+ begin
+ Marshal.dump(result, write)
+ rescue Errno::EPIPE
+ return # parent thread already dead
+ end
+ end
+ end
+
+ # options is either a Integer or a Hash with :count
+ def extract_count_from_options(options)
+ if options.is_a?(Hash)
+ count = options[:count]
+ else
+ count = options
+ options = {}
+ end
+ [count, options]
+ end
+
+ def call_with_index(item, index, options, &block)
+ args = [item]
+ args << index if options[:with_index]
+ results = block.call(*args)
+ if options[:return_results]
+ results
+ else
+ nil # avoid GC overhead of passing large results around
+ end
+ end
+
+ def with_instrumentation(item, index, options)
+ instrument_start(item, index, options)
+ result = yield
+ instrument_finish(item, index, result, options)
+ result unless options[:preserve_results] == false
+ end
+
+ def instrument_finish(item, index, result, options)
+ return unless on_finish = options[:finish]
+ options[:mutex].synchronize { on_finish.call(item, index, result) }
+ end
+
+ def instrument_start(item, index, options)
+ return unless on_start = options[:start]
+ options[:mutex].synchronize { on_start.call(item, index) }
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/lib/parallel/processor_count.rb b/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/lib/parallel/processor_count.rb
new file mode 100644
index 000000000..3b5ea617e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/lib/parallel/processor_count.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+module Parallel
+ # TODO: inline this method into parallel.rb and kill physical_processor_count in next major release
+ module ProcessorCount
+ # Number of processors seen by the OS, used for process scheduling
+ def processor_count
+ require 'etc'
+ @processor_count ||= Integer(ENV['PARALLEL_PROCESSOR_COUNT'] || Etc.nprocessors)
+ end
+
+ # Number of physical processor cores on the current system.
+ def physical_processor_count
+ @physical_processor_count ||= begin
+ ppc =
+ case RbConfig::CONFIG["target_os"]
+ when /darwin[12]/
+ IO.popen("/usr/sbin/sysctl -n hw.physicalcpu").read.to_i
+ when /linux/
+ cores = {} # unique physical ID / core ID combinations
+ phy = 0
+ File.read("/proc/cpuinfo").scan(/^physical id.*|^core id.*/) do |ln|
+ if ln.start_with?("physical")
+ phy = ln[/\d+/]
+ elsif ln.start_with?("core")
+ cid = "#{phy}:#{ln[/\d+/]}"
+ cores[cid] = true unless cores[cid]
+ end
+ end
+ cores.count
+ when /mswin|mingw/
+ require 'win32ole'
+ result_set = WIN32OLE.connect("winmgmts://").ExecQuery(
+ "select NumberOfCores from Win32_Processor"
+ )
+ result_set.to_enum.collect(&:NumberOfCores).reduce(:+)
+ else
+ processor_count
+ end
+ # fall back to logical count if physical info is invalid
+ ppc > 0 ? ppc : processor_count
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/lib/parallel/version.rb b/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/lib/parallel/version.rb
new file mode 100644
index 000000000..74f115470
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parallel-1.22.1/lib/parallel/version.rb
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+module Parallel
+ VERSION = Version = '1.22.1' # rubocop:disable Naming/ConstantName
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/LICENSE.txt b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/LICENSE.txt
new file mode 100644
index 000000000..971310e3d
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/LICENSE.txt
@@ -0,0 +1,25 @@
+Copyright (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.
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/bin/ruby-parse b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/bin/ruby-parse
new file mode 100755
index 000000000..e5d30f84d
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/bin/ruby-parse
@@ -0,0 +1,7 @@
+#! /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)
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/bin/ruby-rewrite b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/bin/ruby-rewrite
new file mode 100755
index 000000000..10f7d6311
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/bin/ruby-rewrite
@@ -0,0 +1,7 @@
+#! /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)
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/gauntlet_parser.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/gauntlet_parser.rb
new file mode 100644
index 000000000..864fe5b0a
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/gauntlet_parser.rb
@@ -0,0 +1,123 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser.rb
new file mode 100644
index 000000000..6aeaa7e1a
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser.rb
@@ -0,0 +1,85 @@
+# 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/method_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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/all.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/all.rb
new file mode 100644
index 000000000..87361f499
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/all.rb
@@ -0,0 +1,15 @@
+# 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'
+require 'parser/ruby30'
+require 'parser/ruby31'
+require 'parser/ruby32'
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ast/node.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ast/node.rb
new file mode 100644
index 000000000..b9cbf3da7
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ast/node.rb
@@ -0,0 +1,40 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ast/processor.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ast/processor.rb
new file mode 100644
index 000000000..13670e01c
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ast/processor.rb
@@ -0,0 +1,288 @@
+# 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_kwargs 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
+ alias on_forward_arg 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_match_pattern process_regular_node
+ alias on_match_pattern_p 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
+ alias on_find_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
+
+ def on_empty_else(node)
+ node
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/base.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/base.rb
new file mode 100644
index 000000000..b71562e78
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/base.rb
@@ -0,0 +1,291 @@
+# 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 :lexer
+ 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, or `nil` in case of a non fatal error.
+ #
+ # @param [Parser::Source::Buffer] source_buffer The source buffer to parse.
+ # @return [Parser::AST::Node, nil]
+ #
+ def parse(source_buffer)
+ @lexer.source_buffer = source_buffer
+ @source_buffer = source_buffer
+
+ do_parse || nil # Force `false` to `nil`, see https://github.com/ruby/racc/pull/136
+ 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. In case of a fatal error, a {SyntaxError}
+ # is raised, unless `recover` is true. In case of an error
+ # (non-fatal or recovered), `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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/builders/default.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/builders/default.rb
new file mode 100644
index 000000000..523b51b59
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/builders/default.rb
@@ -0,0 +1,2309 @@
+# 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
+
+ @emit_index = false
+
+ 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_arg_inside_procarg0 = false
+
+ class << self
+ ##
+ # AST compatibility attribute; arguments forwarding initially
+ # didn't have support for leading arguments
+ # (i.e. `def m(a, ...); end` was a syntax error). However, Ruby 3.0
+ # added support for any number of arguments in front of the `...`.
+ #
+ # If set to false (the default):
+ # 1. `def m(...) end` is emitted as
+ # s(:def, :m, s(:forward_args), nil)
+ # 2. `def m(a, b, ...) end` is emitted as
+ # s(:def, :m,
+ # s(:args, s(:arg, :a), s(:arg, :b), s(:forward_arg)))
+ #
+ # If set to true it uses a single format:
+ # 1. `def m(...) end` is emitted as
+ # s(:def, :m, s(:args, s(:forward_arg)))
+ # 2. `def m(a, b, ...) end` is emitted as
+ # s(:def, :m, s(:args, s(:arg, :a), s(:arg, :b), s(:forward_arg)))
+ #
+ # It does't matter that much on 2.7 (because there can't be any leading arguments),
+ # but on 3.0 it should be better enabled to use a single AST format.
+ #
+ # @return [Boolean]
+ attr_accessor :emit_forward_arg
+ end
+
+ @emit_forward_arg = false
+
+ class << self
+ ##
+ # AST compatibility attribute; Starting from Ruby 2.7 keyword arguments
+ # of method calls that are passed explicitly as a hash (i.e. with curly braces)
+ # are treated as positional arguments and Ruby 2.7 emits a warning on such method
+ # call. Ruby 3.0 given an ArgumentError.
+ #
+ # If set to false (the default) the last hash argument is emitted as `hash`:
+ #
+ # ```
+ # (send nil :foo
+ # (hash
+ # (pair
+ # (sym :bar)
+ # (int 42))))
+ # ```
+ #
+ # If set to true it is emitted as `kwargs`:
+ #
+ # ```
+ # (send nil :foo
+ # (kwargs
+ # (pair
+ # (sym :bar)
+ # (int 42))))
+ # ```
+ #
+ # Note that `kwargs` node is just a replacement for `hash` argument,
+ # so if there's are multiple arguments (or a `kwsplat`) all of them
+ # are wrapped into `kwargs` instead of `hash`:
+ #
+ # ```
+ # (send nil :foo
+ # (kwargs
+ # (pair
+ # (sym :a)
+ # (int 42))
+ # (kwsplat
+ # (send nil :b))
+ # (pair
+ # (sym :c)
+ # (int 10))))
+ # ```
+ attr_accessor :emit_kwargs
+ end
+
+ @emit_kwargs = false
+
+ class << self
+ ##
+ # AST compatibility attribute; Starting from 3.0 Ruby returns
+ # true/false from single-line pattern matching with `in` keyword.
+ #
+ # Before 3.0 there was an exception if given value doesn't match pattern.
+ #
+ # NOTE: This attribute affects only Ruby 2.7 grammar.
+ # 3.0 grammar always emits `match_pattern`/`match_pattern_p`
+ #
+ # If compatibility attribute set to false `foo in bar` is emitted as `in_match`:
+ #
+ # ```
+ # (in-match
+ # (send nil :foo)
+ # (match-var :bar))
+ # ```
+ #
+ # If set to true it's emitted as `match_pattern_p`:
+ # ```
+ # (match-pattern-p
+ # (send nil :foo)
+ # (match-var :bar))
+ # ```
+ attr_accessor :emit_match_pattern
+ end
+
+ @emit_match_pattern = false
+
+ class << self
+ ##
+ # @api private
+ def modernize
+ @emit_lambda = true
+ @emit_procarg0 = true
+ @emit_encoding = true
+ @emit_index = true
+ @emit_arg_inside_procarg0 = true
+ @emit_forward_arg = true
+ @emit_kwargs = true
+ @emit_match_pattern = 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)
+
+ case node.type
+ when :str
+ str = node.children.first
+ dedenter.dedent(str)
+ when :dstr, :xstr
+ children = node.children.map do |str_node|
+ if str_node.type == :str
+ str = str_node.children.first
+ dedenter.dedent(str)
+ next nil if str.empty?
+ else
+ dedenter.interrupt
+ end
+ str_node
+ end
+
+ node = node.updated(nil, children.compact)
+ 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 pair_label(key_t)
+ key_l = loc(key_t)
+ value_l = key_l.adjust(end_pos: -1)
+
+ label = value(key_t)
+ value =
+ if label =~ /\A[[:lower:]]/
+ n(:ident, [ label.to_sym ], Source::Map::Variable.new(value_l))
+ else
+ n(:const, [ nil, label.to_sym ], Source::Map::Constant.new(nil, value_l, value_l))
+ end
+ pair_keyword(key_t, accessible(value))
+ end
+
+ def kwsplat(dstar_t, arg)
+ n(:kwsplat, [ arg ],
+ unary_op_map(dstar_t, arg))
+ end
+
+ def associate(begin_t, pairs, end_t)
+ 0.upto(pairs.length - 1) do |i|
+ (i + 1).upto(pairs.length - 1) do |j|
+ key1, = *pairs[i]
+ key2, = *pairs[j]
+
+ do_warn = false
+
+ # keys have to be simple nodes, MRI ignores equal composite keys like
+ # `{ a(1) => 1, a(1) => 1 }`
+ case key1.type
+ when :sym, :str, :int, :float
+ if key1 == key2
+ do_warn = true
+ end
+ when :rational, :complex, :regexp
+ if @parser.version >= 31 && key1 == key2
+ do_warn = true
+ end
+ end
+
+ if do_warn
+ diagnostic :warning, :duplicate_hash_key, nil, key2.loc.expression
+ end
+ end
+ end
+
+ 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 %w[? !].any? { |c| name.to_s.end_with?(c) }
+ diagnostic :error, :invalid_id_to_get,
+ { :identifier => name.to_s }, node.loc.expression
+ end
+
+ # Numbered parameters are not declared anywhere,
+ # so they take precedence over method calls in numblock contexts
+ if @parser.version >= 27 && @parser.try_declare_numparam(node)
+ return node.updated(:lvar)
+ end
+
+ unless @parser.static_env.declared?(name)
+ return n(:send, [ nil, name ],
+ var_send_map(node))
+ end
+
+ 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
+ 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
+ if @parser.context.in_def
+ diagnostic :error, :dynamic_const, nil, node.loc.expression
+ end
+
+ node.updated(:casgn)
+
+ when :ident
+ name, = *node
+
+ var_name = node.children[0].to_s
+ name_loc = node.loc.expression
+
+ check_assignment_to_numparam(var_name, name_loc)
+ check_reserved_for_numparam(var_name, name_loc)
+
+ @parser.static_env.declare(name)
+
+ node.updated(:lvasgn)
+
+ when :match_var
+ name, = *node
+
+ var_name = node.children[0].to_s
+ name_loc = node.loc.expression
+
+ check_assignment_to_numparam(var_name, name_loc)
+ check_reserved_for_numparam(var_name, name_loc)
+
+ node
+
+ 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)
+ check_reserved_for_numparam(value(name_t), loc(name_t))
+
+ n(:def, [ value(name_t).to_sym, args, body ],
+ definition_map(def_t, nil, name_t, end_t))
+ end
+
+ def def_endless_method(def_t, name_t, args,
+ assignment_t, body)
+ check_reserved_for_numparam(value(name_t), loc(name_t))
+
+ n(:def, [ value(name_t).to_sym, args, body ],
+ endless_definition_map(def_t, nil, name_t, assignment_t, body))
+ end
+
+ def def_singleton(def_t, definee, dot_t,
+ name_t, args,
+ body, end_t)
+ validate_definee(definee)
+ check_reserved_for_numparam(value(name_t), loc(name_t))
+
+ n(:defs, [ definee, value(name_t).to_sym, args, body ],
+ definition_map(def_t, dot_t, name_t, end_t))
+ end
+
+ def def_endless_singleton(def_t, definee, dot_t,
+ name_t, args,
+ assignment_t, body)
+ validate_definee(definee)
+ check_reserved_for_numparam(value(name_t), loc(name_t))
+
+ n(:defs, [ definee, value(name_t).to_sym, args, body ],
+ endless_definition_map(def_t, dot_t, name_t, assignment_t, body))
+ 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
+ validate_no_forward_arg_after_restarg(args)
+
+ map = collection_map(begin_t, args, end_t)
+ if !self.class.emit_forward_arg && args.length == 1 && args[0].type == :forward_arg
+ n(:forward_args, [], map)
+ else
+ n(:args, args, map)
+ end
+ end
+
+ def numargs(max_numparam)
+ n(:numargs, [ max_numparam ], nil)
+ end
+
+ def forward_only_args(begin_t, dots_t, end_t)
+ if self.class.emit_forward_arg
+ arg = forward_arg(dots_t)
+ n(:args, [ arg ],
+ collection_map(begin_t, [ arg ], end_t))
+ else
+ n(:forward_args, [], collection_map(begin_t, token_map(dots_t), end_t))
+ end
+ end
+
+ def forward_arg(dots_t)
+ n(:forward_arg, [], token_map(dots_t))
+ end
+
+ def arg(name_t)
+ check_reserved_for_numparam(value(name_t), loc(name_t))
+
+ n(:arg, [ value(name_t).to_sym ],
+ variable_map(name_t))
+ end
+
+ def optarg(name_t, eql_t, value)
+ check_reserved_for_numparam(value(name_t), loc(name_t))
+
+ 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
+ check_reserved_for_numparam(value(name_t), loc(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)
+ check_reserved_for_numparam(value(name_t), loc(name_t))
+
+ n(:kwarg, [ value(name_t).to_sym ],
+ kwarg_map(name_t))
+ end
+
+ def kwoptarg(name_t, value)
+ check_reserved_for_numparam(value(name_t), loc(name_t))
+
+ n(:kwoptarg, [ value(name_t).to_sym, value ],
+ kwarg_map(name_t, value))
+ end
+
+ def kwrestarg(dstar_t, name_t=nil)
+ if name_t
+ check_reserved_for_numparam(value(name_t), loc(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)
+ check_reserved_for_numparam(value(name_t), loc(name_t))
+
+ n(:shadowarg, [ value(name_t).to_sym ],
+ variable_map(name_t))
+ end
+
+ def blockarg(amper_t, name_t)
+ if !name_t.nil?
+ check_reserved_for_numparam(value(name_t), loc(name_t))
+ end
+
+ arg_name = name_t ? value(name_t).to_sym : nil
+ n(:blockarg, [ arg_name ],
+ 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 self.class.emit_kwargs
+ rewrite_hash_args_to_kwargs(args)
+ end
+
+ 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_kwargs
+ rewrite_hash_args_to_kwargs(indexes)
+ end
+
+ 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
+
+ if %i[yield super].include?(type) && self.class.emit_kwargs
+ rewrite_hash_args_to_kwargs(args)
+ 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)
+ else_body = n(:empty_else, nil, token_map(else_t)) if else_t && !else_body
+ 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 match_pattern(lhs, match_t, rhs)
+ n(:match_pattern, [lhs, rhs],
+ binary_op_map(lhs, match_t, rhs))
+ end
+
+ def match_pattern_p(lhs, match_t, rhs)
+ n(:match_pattern_p, [lhs, rhs],
+ binary_op_map(lhs, match_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
+ name_l = loc(name_t)
+
+ check_lvar_name(name, name_l)
+ check_duplicate_pattern_variable(name, name_l)
+ @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_lvar_name(name, name_l)
+ 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)
+ else
+ # we only can get here if there is an interpolation, e.g., ``in "#{ a }":`
+ diagnostic :error, :pm_interp_in_var_name, nil, loc(begin_t).join(loc(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)
+ return n(:array_pattern, nil, collection_map(lbrack_t, [], rbrack_t)) if elements.nil?
+
+ trailing_comma = false
+
+ node_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, node_elements,
+ collection_map(lbrack_t, elements, rbrack_t))
+ end
+
+ def find_pattern(lbrack_t, elements, rbrack_t)
+ n(:find_pattern, elements,
+ collection_map(lbrack_t, elements, rbrack_t))
+ end
+
+ def match_with_trailing_comma(match, comma_t)
+ n(:match_with_trailing_comma, [ match ], expr_map(match.loc.expression.join(loc(comma_t))))
+ end
+
+ def const_pattern(const, ldelim_t, pattern, rdelim_t)
+ n(:const_pattern, [const, pattern],
+ Source::Map::Collection.new(
+ loc(ldelim_t), loc(rdelim_t),
+ const.loc.expression.join(loc(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
+ label_loc = loc(begin_t).join(loc(end_t))
+
+ # quoted label like "label": value
+ if (var_name = static_string(parts))
+ check_duplicate_pattern_key(var_name, label_loc)
+ else
+ diagnostic :error, :pm_interp_in_var_name, nil, label_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 validate_no_forward_arg_after_restarg(args)
+ restarg = nil
+ forward_arg = nil
+ args.each do |arg|
+ case arg.type
+ when :restarg then restarg = arg
+ when :forward_arg then forward_arg = arg
+ end
+ end
+
+ if !forward_arg.nil? && !restarg.nil?
+ diagnostic :error, :forward_arg_after_restarg, nil, forward_arg.loc.expression, [restarg.loc.expression]
+ end
+ end
+
+ def check_assignment_to_numparam(name, loc)
+ # MRI < 2.7 treats numbered parameters as regular variables
+ # and so it's allowed to perform assignments like `_1 = 42`.
+ return if @parser.version < 27
+
+ 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 }, loc
+ end
+ end
+
+ def check_reserved_for_numparam(name, loc)
+ # MRI < 3.0 accepts assignemnt to variables like _1
+ # if it's not a numbered parameter. MRI 3.0 and newer throws an error.
+ return if @parser.version < 30
+
+ if name =~ /\A_([1-9])\z/
+ diagnostic :error, :reserved_for_numparam, { :name => name }, loc
+ 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::MethodDefinition.new(loc(keyword_t),
+ loc(operator_t), loc(name_t),
+ loc(end_t), nil, nil)
+ end
+
+ def endless_definition_map(keyword_t, operator_t, name_t, assignment_t, body_e)
+ body_l = body_e.loc.expression
+
+ Source::Map::MethodDefinition.new(loc(keyword_t),
+ loc(operator_t), loc(name_t), nil,
+ loc(assignment_t), body_l)
+ 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
+
+ def validate_definee(definee)
+ case definee.type
+ when :int, :str, :dstr, :sym, :dsym,
+ :regexp, :array, :hash
+
+ diagnostic :error, :singleton_literal, nil, definee.loc.expression
+ false
+ else
+ true
+ end
+ end
+
+ def rewrite_hash_args_to_kwargs(args)
+ if args.any? && kwargs?(args.last)
+ # foo(..., bar: baz)
+ args[args.length - 1] = args[args.length - 1].updated(:kwargs)
+ elsif args.length > 1 && args.last.type == :block_pass && kwargs?(args[args.length - 2])
+ # foo(..., bar: baz, &blk)
+ args[args.length - 2] = args[args.length - 2].updated(:kwargs)
+ end
+ end
+
+ def kwargs?(node)
+ node.type == :hash && node.loc.begin.nil? && node.loc.end.nil?
+ end
+ end
+
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/clobbering_error.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/clobbering_error.rb
new file mode 100644
index 000000000..61240c3d1
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/clobbering_error.rb
@@ -0,0 +1,13 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/color.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/color.rb
new file mode 100644
index 000000000..d528f79b5
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/color.rb
@@ -0,0 +1,32 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/context.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/context.rb
new file mode 100644
index 000000000..ff5f24dcf
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/context.rb
@@ -0,0 +1,49 @@
+# 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)
+ # + :module - in the module body (module M; 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)
+ # + :def_open_args - in the arglist of the method definition
+ # keep in mind that it's set **only** after reducing the first argument,
+ # if you need to handle the first argument check `lex_state == expr_fname`
+ # + :block - in the block body (tap {})
+ # + :lambda - in the lambda body (-> {})
+ #
+ class Context
+ FLAGS = %i[
+ in_defined
+ in_kwarg
+ in_argdef
+ in_def
+ in_class
+ in_block
+ in_lambda
+ ]
+
+ def initialize
+ reset
+ end
+
+ def reset
+ @in_defined = false
+ @in_kwarg = false
+ @in_argdef = false
+ @in_def = false
+ @in_class = false
+ @in_block = false
+ @in_lambda = false
+ end
+
+ attr_accessor(*FLAGS)
+
+ def in_dynamic_block?
+ in_block || in_lambda
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/current.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/current.rb
new file mode 100644
index 000000000..45caf83b3
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/current.rb
@@ -0,0 +1,119 @@
+# frozen_string_literal: true
+
+module Parser
+ class << self
+ def warn_syntax_deviation(feature, version)
+ warn "warning: parser/current is loading #{feature}, which recognizes" \
+ "#{version}-compliant syntax, but you are running #{RUBY_VERSION}.\n" \
+ "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.10'
+ 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.9'
+ 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.10'
+ 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.6'
+ if RUBY_VERSION != current_version
+ warn_syntax_deviation 'parser/ruby27', current_version
+ end
+
+ require 'parser/ruby27'
+ CurrentRuby = Ruby27
+
+ when /^3\.0\./
+ current_version = '3.0.4'
+ if RUBY_VERSION != current_version
+ warn_syntax_deviation 'parser/ruby30', current_version
+ end
+
+ require 'parser/ruby30'
+ CurrentRuby = Ruby30
+
+ when /^3\.1\./
+ current_version = '3.1.2'
+ if RUBY_VERSION != current_version
+ warn_syntax_deviation 'parser/ruby31', current_version
+ end
+
+ require 'parser/ruby31'
+ CurrentRuby = Ruby31
+
+ when /^3\.2\./
+ current_version = '3.2.0-dev'
+ if RUBY_VERSION != current_version
+ warn_syntax_deviation 'parser/ruby32', current_version
+ end
+
+ require 'parser/ruby32'
+ CurrentRuby = Ruby32
+
+ else # :nocov:
+ # Keep this in sync with released Ruby.
+ warn_syntax_deviation 'parser/ruby31', '3.1.x'
+ require 'parser/ruby31'
+ CurrentRuby = Ruby31
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/current_arg_stack.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/current_arg_stack.rb
new file mode 100644
index 000000000..d0d580274
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/current_arg_stack.rb
@@ -0,0 +1,46 @@
+# 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 empty?
+ @stack.size == 0
+ end
+
+ def push(value)
+ @stack << value
+ end
+
+ def set(value)
+ @stack[@stack.length - 1] = value
+ end
+
+ def pop
+ @stack.pop
+ end
+
+ def reset
+ @stack.clear
+ end
+
+ def top
+ @stack.last
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/deprecation.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/deprecation.rb
new file mode 100644
index 000000000..0e9b6ed7b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/deprecation.rb
@@ -0,0 +1,13 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/diagnostic.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/diagnostic.rb
new file mode 100644
index 000000000..e9f1b0a94
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/diagnostic.rb
@@ -0,0 +1,163 @@
+# 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.compile(@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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/diagnostic/engine.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/diagnostic/engine.rb
new file mode 100644
index 000000000..a29f61789
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/diagnostic/engine.rb
@@ -0,0 +1,104 @@
+# 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__, source: '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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer.rb
new file mode 100644
index 000000000..e7e0d4176
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer.rb
@@ -0,0 +1,25015 @@
+# -*- 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, 120, 0, 120, 0, 92,
+ 0, 120, 0, 120, 0,
+ 45, 0, 120, 0, 120,
+ 67, 99, 45, 45, 0, 92,
+ 0, 120, 0, 102, 0,
+ 127, 0, 127, 0, 127,
+ 0, 127, 0, 45, 0, 120,
+ 0, 120, 0, 92, 0,
+ 120, 0, 120, 0, 45,
+ 0, 120, 0, 120, 67, 99,
+ 45, 45, 0, 92, 0,
+ 120, 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, 127, 0,
+ 127, 58, 58, 58, 58,
+ 46, 46, 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, 127, 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, 120,
+ 0, 120, 0, 92, 0, 120,
+ 0, 120, 0, 45, 0,
+ 120, 0, 120, 67, 99,
+ 45, 45, 0, 92, 0, 120,
+ 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, 92, 9, 92, 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, 48, 102,
+ 48, 102, 0, 0, 48,
+ 102, 48, 102, 0, 0,
+ 0, 45, 0, 92, 0, 92,
+ 0, 0, 0, 0, 0,
+ 92, 48, 102, 48, 102,
+ 0, 0, 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,
+ 48, 102, 48, 102, 0,
+ 0, 48, 102, 48, 102,
+ 0, 0, 0, 45, 0, 92,
+ 0, 92, 0, 0, 0,
+ 0, 0, 92, 48, 102,
+ 48, 102, 0, 0, 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, 46, 46, 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, 0, 127,
+ 38, 61, 0, 0, 42,
+ 61, 61, 61, 9, 92,
+ 9, 92, 9, 92, 46, 46,
+ 46, 46, 10, 10, 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, 48, 102, 48,
+ 102, 0, 0, 48, 102,
+ 48, 102, 0, 0, 0, 45,
+ 0, 92, 0, 92, 0,
+ 0, 0, 0, 0, 92,
+ 48, 102, 48, 102, 0, 0,
+ 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, 92,
+ 9, 92, 46, 46, 46, 46,
+ 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,
+ 121, 121, 93, 121, 121, 46, 121, 121,
+ 33, 1, 93, 121, 103, 128, 128, 128,
+ 128, 46, 121, 121, 93, 121, 121, 46,
+ 121, 121, 33, 1, 93, 121, 103, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 1, 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, 128, 1, 84, 84, 84, 84, 84,
+ 1, 128, 128, 66, 1, 128, 128, 1,
+ 1, 1, 1, 128, 87, 1, 46, 121,
+ 121, 93, 121, 121, 46, 121, 121, 33,
+ 1, 93, 121, 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, 84, 84, 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, 55, 55, 0, 55, 55, 0,
+ 46, 93, 93, 0, 0, 93, 55, 55,
+ 0, 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, 55, 55, 0, 55, 55,
+ 0, 46, 93, 93, 0, 0, 93, 55,
+ 55, 0, 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, 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, 128, 24, 0, 20, 1, 84,
+ 84, 84, 1, 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, 55, 55, 0, 55,
+ 55, 0, 46, 93, 93, 0, 0, 93,
+ 55, 55, 0, 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, 84,
+ 84, 1, 1, 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, 731, 853, 947, 1069, 1191, 1238, 1360,
+ 1482, 1516, 1518, 1612, 1734, 1838, 1967, 2096,
+ 2225, 2354, 2401, 2523, 2645, 2739, 2861, 2983,
+ 3030, 3152, 3274, 3308, 3310, 3404, 3526, 3630,
+ 3759, 3888, 4017, 4146, 4275, 4404, 4533, 4662,
+ 4791, 4920, 5049, 5178, 5307, 5436, 5565, 5567,
+ 5569, 5571, 5700, 5702, 5704, 5706, 5708, 5837,
+ 5966, 6095, 6224, 6353, 6482, 6611, 6740, 6869,
+ 6998, 7127, 7256, 7385, 7514, 7643, 7772, 7901,
+ 8030, 8032, 8034, 8036, 8038, 8048, 8050, 8052,
+ 8054, 8056, 8058, 8060, 8062, 8064, 8193, 8195,
+ 8324, 8409, 8411, 8496, 8498, 8500, 8502, 8504,
+ 8506, 8508, 8637, 8639, 8724, 8809, 8894, 8979,
+ 9064, 9066, 9195, 9324, 9391, 9393, 9522, 9651,
+ 9653, 9655, 9657, 9659, 9788, 9876, 9878, 9925,
+ 10047, 10169, 10263, 10385, 10507, 10554, 10676, 10798,
+ 10832, 10834, 10928, 11050, 11154, 11283, 11412, 11541,
+ 11670, 11799, 11928, 11930, 11932, 12061, 12077, 12088,
+ 12099, 12110, 12121, 12123, 12125, 12127, 12129, 12131,
+ 12133, 12135, 12264, 12266, 12351, 12436, 12521, 12606,
+ 12691, 12776, 12778, 12780, 12865, 12950, 12952, 12954,
+ 12956, 12958, 12960, 13057, 13082, 13083, 13085, 13087,
+ 13089, 13114, 13116, 13118, 13212, 13237, 13326, 13455,
+ 13466, 13595, 13717, 13718, 13719, 13728, 13737, 13738,
+ 13739, 13833, 13834, 13835, 13836, 13930, 13932, 13933,
+ 13934, 13935, 14029, 14085, 14141, 14142, 14198, 14254,
+ 14255, 14302, 14396, 14490, 14491, 14492, 14586, 14642,
+ 14698, 14699, 14746, 14748, 14842, 14919, 14975, 15031,
+ 15087, 15088, 15215, 15342, 15343, 15470, 15471, 15598,
+ 15725, 15852, 15979, 15980, 16107, 16234, 16361, 16488,
+ 16615, 16742, 16743, 16744, 16800, 16801, 16895, 16984,
+ 17113, 17124, 17253, 17375, 17376, 17377, 17386, 17395,
+ 17396, 17397, 17491, 17492, 17493, 17494, 17588, 17590,
+ 17591, 17592, 17593, 17687, 17743, 17799, 17800, 17856,
+ 17912, 17913, 17960, 18054, 18148, 18149, 18150, 18244,
+ 18300, 18356, 18357, 18404, 18406, 18500, 18577, 18633,
+ 18689, 18745, 18746, 18873, 19000, 19001, 19128, 19129,
+ 19256, 19383, 19510, 19637, 19638, 19765, 19892, 20019,
+ 20146, 20273, 20400, 20401, 20402, 20458, 20459, 20553,
+ 20578, 20606, 20700, 20728, 20765, 20854, 20983, 20994,
+ 21123, 21151, 21188, 21213, 21302, 21431, 21442, 21571,
+ 21605, 21630, 21689, 21748, 21778, 21907, 21918, 22047,
+ 22176, 22305, 22434, 22459, 22460, 22527, 22529, 22531,
+ 22660, 22789, 22800, 22802, 22804, 22806, 22808, 22810,
+ 22813, 22815, 22882, 22884, 22887, 23016, 23145, 23274,
+ 23403, 23532, 23661, 23790, 23792, 23794, 23923, 24052,
+ 24181, 24310, 24439, 24568, 24697, 24826, 24955, 25084,
+ 25213, 25342, 25471, 25600, 25729, 25858, 25987, 26116,
+ 26245, 26374, 26503, 26632, 26761, 26890, 27019, 27148,
+ 27277, 27406, 27535, 27664, 27793, 27922, 28051, 28180,
+ 28309, 28438, 28567, 28696, 28825, 28954, 29083, 29212,
+ 29341, 29470, 29599, 29728, 29857, 29986, 30115, 30244,
+ 30373, 30502, 30631, 30760, 30889, 31018, 31147, 31276,
+ 31405, 31534, 31663, 31792, 31921, 32050, 32179, 32308,
+ 32437, 32566, 32695, 32824, 32953, 33082, 33211, 33340,
+ 33469, 33598, 33727, 33856, 33985, 34114, 34243, 34372,
+ 34501, 34503, 34632, 34761, 34786, 34788, 34790, 34792,
+ 34794, 34795, 34924, 35053, 35055, 35056, 35081, 35082,
+ 35149, 35151, 35153, 35155, 35157, 35159, 35162, 35164,
+ 35231, 35233, 35236, 35365, 35367, 35369, 35371, 35499,
+ 35628, 35691, 35745, 35799, 35800, 35854, 35909, 35911,
+ 35913, 35915, 35940, 35941, 36070, 36071, 36188, 36189,
+ 36191, 36193, 36194, 36248, 36250, 36252, 36254, 36279,
+ 36281, 36410, 36412, 36414, 36416, 36418, 36547, 36676,
+ 36805, 36806, 36935, 36937, 37062, 37087, 37089, 37091,
+ 37093, 37094, 37096, 37097, 37226, 37355, 37380, 37381,
+ 37383, 37385, 37387, 37388, 37517, 37646, 37775, 37904,
+ 38033, 38162, 38291, 38420, 38549, 38678, 38807, 38936,
+ 39065, 39194, 39323, 39452, 39581, 39710, 39715, 39716,
+ 39783, 39785, 39786, 39787, 39788, 39813, 39815, 39840,
+ 39907, 39909, 39911, 40040, 40065, 40066, 40087, 40089,
+ 40174, 40259, 40344, 40346, 40348, 40350, 40378, 40507,
+ 40636, 40638, 40639, 40706, 40709, 40710, 40711, 40712,
+ 40713, 40780, 40909, 40920, 40922, 40924, 40926, 40929,
+ 40931, 40933, 40936, 41065, 41076, 41205, 41207, 41209,
+ 41212, 41213, 41239, 41270, 41272, 41274, 41341, 41344,
+ 41468, 41469, 41598, 41727, 41849, 41850, 41851, 41860,
+ 41869, 41870, 41871, 41965, 41966, 41967, 41968, 42062,
+ 42064, 42065, 42066, 42067, 42161, 42217, 42273, 42274,
+ 42330, 42386, 42387, 42434, 42528, 42622, 42623, 42624,
+ 42718, 42774, 42830, 42831, 42878, 42880, 42974, 43051,
+ 43107, 43163, 43219, 43220, 43347, 43474, 43475, 43602,
+ 43603, 43730, 43857, 43984, 44111, 44112, 44239, 44366,
+ 44493, 44620, 44747, 44874, 45001, 45128, 45255, 45382,
+ 45509, 45636, 45763, 45890, 46017, 46144, 46271, 46398,
+ 46525, 46526, 46527, 46583, 46584, 46713, 46842, 46971,
+ 46972, 46974, 46975, 47104, 47233, 47362, 47491, 47620,
+ 47749, 47878, 48007, 48136, 48265, 48394, 48523, 48652,
+ 48781, 48910, 49039, 49168, 49297, 49426, 49555, 49684,
+ 49813, 49942, 50071, 50200, 50329, 50458, 50587, 50716,
+ 50845, 50974, 51103, 51232, 51361, 51490, 51619, 51748,
+ 51877, 52006, 52135, 52264, 52393, 52522, 52651, 52780,
+ 52909, 53038, 53167, 53296, 53425, 53554, 53683, 53812,
+ 53941, 54070, 54199, 54328, 54457, 54586, 54715, 54844,
+ 54911, 55040, 55169, 55298, 55427, 55556, 55685, 55814,
+ 55943, 56072, 56201, 56330, 56459, 56588, 56717, 56846,
+ 56975, 57104, 57233, 57362, 57491, 57620, 57749, 57878,
+ 58007, 58136, 58137, 58202, 58296, 58321, 58322, 58324,
+ 58326, 58328, 58329, 58458, 58587, 58612, 58613, 58615,
+ 58617, 58619, 58620, 58749, 58878, 58880, 58881, 58906,
+ 58907, 58974, 58976, 58978, 59107, 59236, 59247, 59249,
+ 59274, 59275, 59276, 59297, 59300, 59313, 59315, 59317,
+ 59372, 59421, 59497, 59565, 59581, 59640, 59642, 59643,
+ 59649, 59650, 59651, 59719, 59787, 59855, 59923, 59934,
+ 59936, 59937, 59943, 59945, 59946, 59947, 60015, 60083,
+ 60151, 60219, 60287, 60355, 60423, 60491, 60561, 60629,
+ 60699, 60767, 60769, 60772, 60774, 60841, 60843, 60846,
+ 60975, 61104, 61105, 61234, 61363, 61492, 61621, 61750,
+ 61879, 61880, 61882, 61883, 61884, 62013, 62142, 62271,
+ 62400, 62529, 62658, 62787, 62916, 63045, 63174, 63303,
+ 63432, 63561, 63690, 63819, 63948, 64077, 64206, 64335,
+ 64464, 64593, 64722, 64851, 64980, 65109, 65238, 65367,
+ 65496, 65625, 65754, 65883, 66012, 66141, 66270, 66399,
+ 66528, 66657, 66742, 66871, 67000, 67129, 67258, 67387,
+ 67516, 67645, 67774, 67903, 68032, 68161, 68290, 68419,
+ 68548, 68677, 68806, 68935, 69064, 69193, 69322, 69451,
+ 69580, 69709, 69838, 69967, 70096, 70225, 70354, 70483,
+ 70612, 70741, 70870, 70999, 71128, 71257, 71386, 71515,
+ 71644, 71773, 71902, 72031, 72160, 72289, 72418, 72547,
+ 72676, 72805, 72934, 73063, 73192, 73321, 73450, 73579,
+ 73708, 73837, 73966, 74095, 74224, 74353, 74482, 74611,
+ 74740, 74869, 74998, 75127, 75128, 75193, 75194, 75279,
+ 75364, 75449, 75451, 75453, 75455, 75457, 75459, 75512,
+ 75514, 75607, 75709, 75801
+]
+
+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,
+ 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, 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,
+ 26, 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, 27, 27,
+ 27, 19, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 19,
+ 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,
+ 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, 29, 27, 19, 30, 30, 30, 19,
+ 30, 30, 30, 30, 30, 31, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 19, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 32, 30, 19, 30, 30,
+ 30, 19, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 19,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 32, 30, 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, 33, 20, 19, 34,
+ 34, 34, 19, 34, 34, 34, 34, 34,
+ 35, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 19, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 36, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 37, 34, 34, 34, 34, 34,
+ 34, 38, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 39, 34,
+ 19, 34, 34, 34, 19, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 19, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34,
+ 39, 34, 40, 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, 41, 19, 41, 19, 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, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 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,
+ 42, 42, 44, 42, 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, 26, 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, 45,
+ 45, 45, 19, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45,
+ 19, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 45, 45, 45, 45, 45, 45, 45, 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, 46,
+ 46, 46, 46, 46, 46, 45, 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, 49,
+ 49, 47, 49, 47, 49, 49, 47, 47,
+ 49, 49, 49, 50, 49, 49, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51,
+ 49, 49, 49, 49, 49, 49, 49, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 47, 49, 47, 47, 48, 49, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 47, 47, 47, 49, 47, 48, 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, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 47, 47, 47, 47, 47, 47, 47,
+ 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, 47, 47, 47, 47, 49, 47,
+ 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, 47, 47, 47, 47, 47, 49,
+ 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,
+ 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 47, 47, 47, 47, 47, 47,
+ 53, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 47, 47, 47, 47, 48,
+ 47, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 47, 47, 47, 47, 47,
+ 48, 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, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 47, 47, 47, 47, 47,
+ 47, 47, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 47, 47, 47, 47,
+ 48, 47, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 47, 47, 47, 47,
+ 47, 48, 54, 55, 55, 55, 54, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 54, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 56,
+ 55, 54, 57, 57, 57, 54, 57, 57,
+ 57, 57, 57, 58, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 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, 59, 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, 60, 57, 54, 57, 57, 57, 54,
+ 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 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,
+ 61, 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, 60, 57, 54, 62, 62,
+ 62, 54, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 54,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 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, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 64, 62, 54, 65, 65, 65, 54,
+ 65, 65, 65, 65, 65, 66, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 54, 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, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 67, 65, 54, 65, 65,
+ 65, 54, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 54,
+ 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, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 67, 65, 54,
+ 55, 55, 55, 54, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 54, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 68, 55, 54, 69,
+ 69, 69, 54, 69, 69, 69, 69, 69,
+ 70, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 54, 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, 71, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 72, 69, 69, 69, 69, 69,
+ 69, 73, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 74, 69,
+ 54, 69, 69, 69, 54, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 54, 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,
+ 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,
+ 74, 69, 75, 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, 76, 54, 76, 54, 54, 77,
+ 77, 77, 54, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77,
+ 54, 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, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 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,
+ 77, 77, 79, 77, 54, 57, 57, 57,
+ 54, 57, 57, 57, 57, 57, 58, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 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, 61, 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, 60, 57, 54, 80,
+ 80, 80, 54, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80,
+ 54, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81,
+ 80, 80, 80, 80, 80, 80, 80, 81,
+ 81, 81, 81, 81, 81, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 81,
+ 81, 81, 81, 81, 81, 80, 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, 84,
+ 84, 82, 84, 82, 84, 84, 82, 82,
+ 84, 84, 84, 85, 84, 84, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86,
+ 84, 84, 84, 84, 84, 84, 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, 82, 84, 82, 82, 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, 82, 82, 82, 84, 82, 83, 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, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 82, 82, 82, 82, 82, 82, 82,
+ 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, 82, 82, 82, 82, 84, 82,
+ 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, 82, 82, 82, 82, 82, 84,
+ 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,
+ 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 82, 82, 82, 82, 82, 82,
+ 88, 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, 82, 82, 82, 82, 83,
+ 82, 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, 82, 82, 82, 82, 82,
+ 83, 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, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 82, 82, 82, 82, 82,
+ 82, 82, 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, 82, 82, 82, 82,
+ 83, 82, 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, 82, 82, 82, 82,
+ 82, 83, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 91, 91, 89, 91, 89,
+ 91, 91, 89, 89, 91, 91, 91, 92,
+ 91, 91, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93, 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, 89, 91, 89,
+ 89, 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, 89, 89, 89,
+ 91, 89, 90, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 89, 89, 89,
+ 89, 89, 89, 89, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 89, 89,
+ 89, 89, 91, 89, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 89, 89,
+ 89, 89, 89, 91, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 89, 89,
+ 89, 89, 89, 89, 95, 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, 89,
+ 89, 89, 89, 90, 89, 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, 89,
+ 89, 89, 89, 89, 90, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 89,
+ 89, 89, 89, 89, 89, 89, 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,
+ 89, 89, 89, 89, 90, 89, 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,
+ 89, 89, 89, 89, 89, 90, 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, 97,
+ 97, 98, 97, 98, 97, 97, 98, 98,
+ 97, 97, 97, 99, 97, 97, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100,
+ 97, 97, 97, 97, 97, 97, 97, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 98, 97, 98, 98, 96, 97, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 98, 98, 98, 97, 98, 96, 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, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 98, 98, 98, 98, 98, 98, 98,
+ 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, 98, 98, 98, 98, 97, 98,
+ 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, 98, 98, 98, 98, 98, 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,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 98, 98, 98, 98, 98, 98,
+ 102, 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, 98, 98, 98, 98, 101,
+ 98, 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, 98, 98, 98, 98, 98,
+ 101, 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, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 103, 98, 98, 98, 98, 98,
+ 98, 98, 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, 98, 98, 98, 98,
+ 103, 98, 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, 98, 98, 98, 98,
+ 98, 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, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 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, 104, 104, 104,
+ 104, 105, 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, 104, 104, 104,
+ 104, 104, 105, 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, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 107, 107, 107,
+ 107, 107, 107, 107, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 107, 107,
+ 107, 107, 107, 107, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 107, 107,
+ 107, 107, 107, 106, 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, 110, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 111, 108,
+ 108, 108, 108, 110, 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, 108,
+ 108, 108, 108, 109, 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, 108,
+ 108, 108, 108, 108, 109, 111, 108, 108,
+ 112, 113, 108, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 116, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 117, 114, 114,
+ 114, 114, 116, 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, 114, 114,
+ 114, 114, 115, 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, 114, 114,
+ 114, 114, 114, 115, 117, 114, 119, 118,
+ 120, 118, 121, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 123, 118, 123,
+ 123, 123, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 123, 118, 118, 118,
+ 118, 124, 125, 118, 126, 118, 127, 128,
+ 129, 130, 131, 124, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 132, 118,
+ 133, 129, 134, 135, 118, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 136,
+ 137, 129, 138, 122, 118, 122, 122, 122,
+ 122, 122, 122, 122, 122, 139, 122, 122,
+ 122, 122, 122, 122, 122, 122, 140, 122,
+ 122, 141, 122, 142, 122, 122, 122, 143,
+ 144, 118, 138, 118, 122, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 145, 118,
+ 145, 145, 145, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 145, 118, 118,
+ 118, 118, 146, 147, 118, 148, 118, 149,
+ 150, 151, 152, 153, 146, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 154,
+ 118, 155, 151, 156, 157, 118, 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,
+ 158, 159, 151, 120, 115, 118, 115, 115,
+ 115, 115, 115, 115, 115, 115, 160, 115,
+ 115, 115, 115, 115, 115, 115, 115, 161,
+ 115, 115, 162, 115, 163, 115, 115, 115,
+ 164, 165, 118, 120, 118, 115, 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, 116,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 117, 118, 118, 118, 118, 116, 118, 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, 118, 118, 118, 118, 115, 118, 115,
+ 115, 115, 115, 115, 166, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 118, 118, 118, 118, 118, 115, 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,
+ 116, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 117, 118, 118, 118, 118, 116, 118,
+ 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, 118, 118, 118, 118, 115, 118,
+ 115, 115, 115, 115, 167, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 118, 118, 118, 118, 118, 115,
+ 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, 116, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 117, 118, 118, 118, 118, 116,
+ 118, 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, 118, 118, 118, 118, 115,
+ 118, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 168, 115, 115, 115, 115,
+ 115, 115, 115, 118, 118, 118, 118, 118,
+ 115, 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, 116, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 117, 118, 118, 118, 118,
+ 116, 118, 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, 118, 118, 118, 118,
+ 115, 118, 115, 115, 169, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 118, 118, 118, 118,
+ 118, 115, 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, 116, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 117, 118, 118, 118,
+ 118, 116, 118, 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, 118, 118, 118,
+ 118, 115, 118, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 170,
+ 115, 115, 115, 115, 115, 118, 118, 118,
+ 118, 118, 115, 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, 116, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 117, 118, 118,
+ 118, 118, 116, 118, 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, 118, 118,
+ 118, 118, 115, 118, 115, 115, 115, 115,
+ 166, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 118, 118,
+ 118, 118, 118, 115, 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, 116, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 117, 118,
+ 118, 118, 118, 116, 118, 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, 118,
+ 118, 118, 118, 115, 118, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 171, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 118,
+ 118, 118, 118, 118, 115, 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, 116, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 117,
+ 118, 118, 118, 118, 116, 118, 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,
+ 118, 118, 118, 118, 115, 118, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 172, 115, 115, 115, 115, 115, 115,
+ 115, 173, 115, 115, 115, 115, 115, 115,
+ 118, 118, 118, 118, 118, 115, 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, 116,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 117, 118, 118, 118, 118, 116, 118, 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, 118, 118, 118, 118, 115, 118, 115,
+ 115, 115, 115, 174, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 118, 118, 118, 118, 118, 115, 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,
+ 116, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 117, 118, 118, 118, 118, 116, 118,
+ 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, 118, 118, 118, 118, 115, 118,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 175, 115, 115, 115, 115, 115,
+ 115, 115, 118, 118, 118, 118, 118, 115,
+ 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, 116, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 117, 118, 118, 118, 118, 116,
+ 118, 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, 118, 118, 118, 118, 115,
+ 118, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 166, 115, 115, 115, 115,
+ 115, 115, 115, 118, 118, 118, 118, 118,
+ 115, 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, 116, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 117, 118, 118, 118, 118,
+ 116, 118, 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, 118, 118, 118, 118,
+ 115, 118, 115, 115, 115, 115, 115, 115,
+ 115, 115, 176, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 118, 118, 118, 118,
+ 118, 115, 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, 116, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 117, 118, 118, 118,
+ 118, 116, 118, 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, 118, 118, 118,
+ 118, 115, 118, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 166, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 118, 118, 118,
+ 118, 118, 115, 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, 116, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 117, 118, 118,
+ 118, 118, 116, 118, 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, 118, 118,
+ 118, 118, 115, 118, 115, 115, 115, 115,
+ 115, 115, 115, 177, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 118, 118,
+ 118, 118, 118, 115, 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, 116, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 117, 118,
+ 118, 118, 118, 116, 118, 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, 118,
+ 118, 118, 118, 115, 118, 115, 115, 115,
+ 115, 115, 115, 115, 115, 178, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 118,
+ 118, 118, 118, 118, 115, 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, 116, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 117,
+ 118, 118, 118, 118, 116, 118, 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,
+ 118, 118, 118, 118, 115, 118, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 170, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115,
+ 118, 118, 118, 118, 118, 115, 180, 179,
+ 181, 179, 182, 179, 151, 179, 183, 179,
+ 179, 179, 179, 179, 179, 179, 184, 179,
+ 185, 179, 186, 179, 151, 179, 187, 179,
+ 151, 179, 188, 179, 182, 179, 190, 189,
+ 191, 191, 191, 191, 191, 191, 191, 191,
+ 191, 193, 191, 193, 193, 193, 191, 191,
+ 191, 191, 191, 191, 191, 191, 191, 191,
+ 191, 191, 191, 191, 191, 191, 191, 191,
+ 193, 191, 191, 191, 191, 191, 191, 191,
+ 194, 191, 191, 191, 191, 191, 191, 191,
+ 191, 191, 191, 191, 191, 191, 191, 191,
+ 191, 191, 191, 191, 191, 191, 191, 191,
+ 191, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 191, 195, 191, 191, 192,
+ 191, 192, 192, 192, 196, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 191, 191, 191, 191, 191,
+ 192, 197, 191, 191, 191, 191, 191, 191,
+ 191, 191, 191, 191, 199, 191, 199, 199,
+ 199, 191, 191, 191, 191, 191, 191, 191,
+ 191, 191, 191, 191, 191, 191, 191, 191,
+ 191, 191, 191, 199, 191, 191, 191, 191,
+ 191, 191, 191, 200, 191, 191, 191, 191,
+ 191, 191, 191, 191, 191, 191, 191, 191,
+ 191, 191, 191, 191, 191, 191, 191, 191,
+ 191, 191, 191, 191, 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, 191, 201,
+ 191, 191, 198, 191, 198, 198, 198, 202,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 191, 191,
+ 191, 191, 191, 198, 204, 203, 204, 204,
+ 204, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 204, 203, 203, 203, 203,
+ 203, 203, 203, 205, 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, 203, 206,
+ 203, 207, 203, 208, 203, 208, 208, 208,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 208, 203, 203, 203, 203, 203,
+ 203, 203, 209, 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, 203, 210, 203,
+ 211, 212, 214, 213, 215, 213, 216, 213,
+ 217, 213, 218, 213, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 220, 220,
+ 220, 220, 220, 220, 220, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 220,
+ 220, 220, 220, 220, 220, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 220,
+ 220, 220, 220, 220, 219, 221, 211, 222,
+ 223, 222, 222, 222, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 222, 211,
+ 211, 224, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 225, 225,
+ 225, 225, 225, 225, 225, 225, 225, 225,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 226, 211, 227, 228, 227, 227,
+ 227, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 227, 211, 211, 229, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 230, 230, 230, 230, 230,
+ 230, 230, 230, 230, 230, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 231,
+ 211, 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, 239, 240,
+ 239, 239, 239, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 239, 238, 238,
+ 241, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 242, 242, 242,
+ 242, 242, 242, 242, 242, 242, 242, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 243, 238, 239, 244, 239, 239, 239,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 239, 238, 238, 241, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 242, 242, 242, 242, 242, 242,
+ 242, 242, 242, 242, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 243, 238,
+ 223, 211, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 247, 247, 245, 247, 245,
+ 247, 247, 245, 245, 247, 247, 247, 248,
+ 247, 247, 249, 249, 249, 249, 249, 249,
+ 249, 249, 249, 249, 247, 247, 247, 247,
+ 247, 247, 247, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 245, 247, 245,
+ 245, 246, 247, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 245, 245, 245,
+ 247, 245, 246, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 245, 245, 245,
+ 245, 245, 245, 245, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 245, 245,
+ 245, 245, 247, 245, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 245, 245,
+ 245, 245, 245, 247, 250, 247, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 247, 245, 250,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 252, 245, 245, 245, 245,
+ 253, 245, 245, 245, 245, 245, 254, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 221, 245,
+ 245, 245, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 245, 245, 245, 245,
+ 251, 255, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 245, 245, 245, 254,
+ 245, 251, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 258, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 256, 256, 256, 256, 256, 256,
+ 256, 256, 256, 256, 257, 257, 257, 257,
+ 257, 257, 257, 256, 256, 256, 256, 256,
+ 256, 256, 256, 256, 256, 256, 256, 256,
+ 256, 256, 256, 256, 256, 256, 256, 256,
+ 256, 256, 256, 256, 256, 257, 257, 257,
+ 257, 256, 257, 256, 256, 256, 256, 256,
+ 256, 256, 256, 256, 256, 256, 256, 256,
+ 256, 256, 256, 256, 256, 256, 256, 256,
+ 256, 256, 256, 256, 256, 257, 257, 257,
+ 257, 257, 256, 260, 259, 263, 262, 258,
+ 257, 263, 264, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 252, 245, 245,
+ 245, 245, 253, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 245, 245,
+ 245, 245, 251, 255, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 251, 245, 245,
+ 245, 245, 245, 251, 266, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 263, 265, 263, 266, 267, 268,
+ 268, 268, 267, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 267, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 269, 268, 267, 270, 270,
+ 270, 267, 270, 270, 270, 270, 270, 271,
+ 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 267,
+ 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, 272, 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, 273, 270, 267,
+ 270, 270, 270, 267, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 267, 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, 274, 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, 273,
+ 270, 267, 275, 275, 275, 267, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 267, 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,
+ 276, 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, 277, 275, 267,
+ 278, 278, 278, 267, 278, 278, 278, 278,
+ 278, 279, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 267, 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, 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,
+ 278, 267, 278, 278, 278, 267, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 267, 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, 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, 278, 267, 268, 268, 268, 267,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 267, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 281, 268, 267, 282, 282, 282, 267, 282,
+ 282, 282, 282, 282, 283, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 267, 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, 284, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 285, 282,
+ 282, 282, 282, 282, 282, 286, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 287, 282, 267, 282, 282, 282,
+ 267, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 267, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 282, 282, 282, 282,
+ 282, 282, 282, 282, 287, 282, 288, 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, 289, 267,
+ 289, 267, 267, 290, 290, 290, 267, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 290, 290, 290, 267, 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, 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, 292, 290,
+ 267, 270, 270, 270, 267, 270, 270, 270,
+ 270, 270, 271, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 267, 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, 274, 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,
+ 273, 270, 267, 293, 293, 293, 267, 293,
+ 293, 293, 293, 293, 293, 293, 293, 293,
+ 293, 293, 293, 293, 293, 293, 293, 293,
+ 293, 293, 293, 293, 267, 293, 293, 293,
+ 293, 293, 293, 293, 293, 293, 293, 293,
+ 293, 293, 293, 293, 293, 293, 293, 293,
+ 293, 293, 294, 294, 294, 294, 294, 294,
+ 294, 294, 294, 294, 293, 293, 293, 293,
+ 293, 293, 293, 294, 294, 294, 294, 294,
+ 294, 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, 294, 294, 294, 294, 294,
+ 294, 293, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 296, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 297, 211, 211, 298,
+ 211, 296, 211, 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, 211, 211, 211,
+ 211, 295, 211, 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, 211, 211, 211,
+ 211, 211, 295, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 296, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 297, 245, 245,
+ 298, 245, 296, 245, 295, 295, 295, 295,
+ 295, 295, 299, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 245, 245,
+ 245, 245, 295, 245, 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, 245, 245,
+ 245, 245, 245, 295, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 296, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 297, 245,
+ 245, 298, 245, 296, 245, 295, 295, 295,
+ 295, 295, 295, 295, 295, 300, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 245,
+ 245, 245, 245, 295, 245, 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, 245,
+ 245, 245, 245, 245, 295, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 296, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 297,
+ 245, 245, 298, 245, 296, 245, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 301, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 245, 245, 245, 245, 295, 245, 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,
+ 245, 245, 245, 245, 245, 295, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 296,
+ 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 297, 245, 245, 298, 245, 296, 245, 295,
+ 295, 295, 301, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 245, 245, 245, 245, 295, 245, 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, 245, 245, 245, 245, 245, 295, 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,
+ 304, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 302, 302, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 305, 302, 302, 302, 302, 304, 302,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 302, 302, 302, 302, 303, 302,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 302, 302, 302, 302, 302, 303,
+ 305, 302, 302, 306, 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, 308, 308, 308, 308,
+ 308, 308, 308, 308, 308, 308, 307, 307,
+ 307, 307, 307, 307, 307, 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, 307,
+ 307, 307, 307, 308, 307, 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, 307,
+ 307, 307, 307, 307, 308, 310, 309, 310,
+ 309, 309, 311, 311, 311, 311, 311, 311,
+ 311, 311, 311, 311, 309, 311, 311, 311,
+ 311, 311, 311, 311, 311, 311, 311, 309,
+ 312, 312, 312, 312, 312, 312, 312, 312,
+ 312, 312, 309, 314, 314, 314, 314, 314,
+ 314, 314, 314, 314, 314, 313, 315, 315,
+ 315, 315, 315, 315, 315, 315, 315, 315,
+ 313, 317, 316, 318, 316, 319, 316, 320,
+ 316, 322, 321, 323, 321, 324, 321, 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, 325,
+ 325, 325, 325, 325, 325, 325, 325, 325,
+ 325, 307, 307, 307, 307, 307, 307, 307,
+ 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, 307, 307, 307, 307, 325, 307,
+ 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, 307, 307, 307, 307, 307, 325,
+ 326, 313, 327, 328, 327, 327, 327, 313,
+ 313, 313, 313, 313, 313, 313, 313, 313,
+ 313, 313, 313, 313, 313, 313, 313, 313,
+ 313, 327, 313, 313, 329, 313, 313, 313,
+ 313, 313, 313, 313, 313, 313, 313, 313,
+ 313, 313, 313, 313, 313, 313, 313, 313,
+ 313, 313, 313, 313, 313, 330, 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, 331, 313, 332,
+ 333, 332, 332, 332, 313, 313, 313, 313,
+ 313, 313, 313, 313, 313, 313, 313, 313,
+ 313, 313, 313, 313, 313, 313, 332, 313,
+ 313, 334, 313, 313, 313, 313, 313, 313,
+ 313, 313, 313, 313, 313, 313, 313, 313,
+ 313, 313, 313, 313, 313, 313, 313, 313,
+ 313, 313, 335, 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, 336, 313, 338, 339, 338, 338,
+ 338, 337, 337, 337, 337, 337, 337, 337,
+ 337, 337, 337, 337, 337, 337, 337, 337,
+ 337, 337, 337, 338, 337, 337, 340, 337,
+ 337, 337, 337, 337, 337, 337, 337, 337,
+ 337, 337, 337, 337, 337, 337, 337, 337,
+ 337, 337, 337, 337, 337, 337, 337, 341,
+ 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, 342,
+ 337, 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, 346, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 347, 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, 348, 343, 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,
+ 346, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 349, 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, 348, 343, 344, 350, 344, 344, 344,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 344, 343, 343, 346, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 347, 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, 348, 343,
+ 351, 313, 328, 313, 353, 354, 353, 353,
+ 353, 352, 352, 352, 352, 352, 352, 352,
+ 352, 352, 352, 352, 352, 352, 352, 352,
+ 352, 352, 352, 353, 352, 352, 355, 352,
+ 352, 356, 352, 352, 352, 352, 352, 352,
+ 352, 357, 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, 352, 358,
+ 352, 360, 354, 360, 360, 360, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359,
+ 360, 359, 359, 355, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 359, 359, 359, 359,
+ 359, 359, 359, 359, 358, 359, 363, 362,
+ 365, 364, 366, 361, 367, 361, 368, 352,
+ 370, 369, 369, 369, 370, 369, 369, 369,
+ 369, 371, 372, 371, 371, 371, 369, 369,
+ 369, 369, 369, 369, 369, 369, 369, 369,
+ 369, 369, 370, 369, 369, 369, 369, 369,
+ 371, 369, 369, 373, 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, 374, 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, 375, 369, 369, 376,
+ 369, 371, 377, 371, 371, 371, 377, 377,
+ 377, 377, 377, 377, 377, 377, 377, 377,
+ 377, 377, 377, 377, 377, 377, 377, 377,
+ 371, 377, 378, 379, 380, 381, 382, 384,
+ 383, 386, 387, 386, 386, 386, 385, 385,
+ 385, 385, 385, 385, 385, 385, 385, 385,
+ 385, 385, 385, 385, 385, 385, 385, 385,
+ 386, 385, 372, 383, 388, 383, 390, 389,
+ 389, 389, 390, 389, 389, 389, 389, 391,
+ 392, 391, 391, 391, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389,
+ 390, 389, 389, 389, 389, 389, 391, 389,
+ 389, 393, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 394, 389, 391, 395, 391, 391,
+ 391, 395, 395, 395, 395, 395, 395, 395,
+ 395, 395, 395, 395, 395, 395, 395, 395,
+ 395, 395, 395, 391, 395, 397, 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, 398, 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, 396, 396,
+ 396, 396, 396, 396, 399, 396, 400, 400,
+ 400, 400, 400, 400, 400, 400, 400, 400,
+ 400, 400, 400, 400, 400, 400, 400, 400,
+ 400, 400, 400, 400, 400, 400, 400, 400,
+ 400, 400, 400, 400, 400, 400, 400, 400,
+ 400, 400, 400, 400, 400, 400, 400, 400,
+ 400, 400, 400, 400, 400, 400, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13,
+ 400, 400, 400, 400, 400, 400, 400, 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, 400, 400, 400, 400, 13, 400, 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, 400, 400, 400, 400, 400, 13, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 400, 401, 401, 401, 401, 401, 401,
+ 401, 401, 401, 401, 401, 401, 401, 401,
+ 401, 401, 401, 401, 401, 401, 401, 401,
+ 401, 401, 401, 401, 401, 401, 401, 401,
+ 401, 401, 401, 401, 401, 401, 401, 401,
+ 401, 401, 401, 401, 401, 401, 401, 401,
+ 401, 401, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 401, 401, 401, 401,
+ 401, 401, 401, 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, 401, 401, 401,
+ 401, 17, 401, 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, 401, 401, 401,
+ 401, 401, 17, 404, 403, 403, 403, 404,
+ 403, 403, 403, 403, 403, 403, 403, 403,
+ 403, 403, 403, 403, 403, 403, 403, 403,
+ 403, 403, 403, 403, 403, 404, 403, 403,
+ 403, 403, 403, 403, 403, 403, 403, 403,
+ 403, 403, 403, 403, 403, 403, 403, 403,
+ 403, 403, 403, 405, 405, 405, 405, 405,
+ 405, 405, 405, 403, 403, 403, 403, 403,
+ 403, 403, 403, 403, 403, 403, 406, 403,
+ 403, 403, 403, 403, 403, 403, 403, 403,
+ 407, 403, 403, 403, 403, 403, 403, 403,
+ 403, 403, 403, 403, 403, 403, 403, 403,
+ 403, 403, 403, 403, 403, 403, 408, 403,
+ 403, 403, 403, 403, 403, 403, 403, 403,
+ 403, 403, 403, 403, 403, 403, 403, 403,
+ 409, 403, 403, 410, 403, 411, 412, 414,
+ 414, 414, 414, 414, 414, 414, 414, 413,
+ 415, 415, 415, 415, 415, 415, 415, 415,
+ 413, 413, 416, 416, 42, 42, 42, 416,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 416, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 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, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 417,
+ 42, 418, 419, 420, 420, 42, 42, 42,
+ 420, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 420, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 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, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 421, 42, 41, 420, 422, 423, 424, 424,
+ 27, 27, 27, 424, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 424, 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, 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, 425, 27, 426, 426, 426,
+ 426, 426, 426, 426, 426, 426, 426, 424,
+ 424, 424, 424, 424, 424, 424, 426, 426,
+ 426, 426, 426, 426, 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, 426, 426,
+ 426, 426, 426, 426, 424, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 427,
+ 427, 427, 427, 427, 427, 427, 428, 428,
+ 428, 428, 428, 428, 427, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 428, 428,
+ 428, 428, 428, 428, 427, 427, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 429,
+ 420, 420, 420, 420, 420, 420, 420, 429,
+ 429, 429, 429, 429, 429, 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, 429,
+ 429, 429, 429, 429, 429, 420, 431, 431,
+ 431, 431, 431, 431, 431, 431, 431, 431,
+ 430, 430, 430, 430, 430, 430, 430, 431,
+ 431, 431, 431, 431, 431, 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, 431,
+ 431, 431, 431, 431, 431, 430, 430, 420,
+ 20, 20, 20, 420, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 420, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 432, 20, 416, 27,
+ 27, 27, 416, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27,
+ 416, 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, 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, 29, 27, 416, 433, 433, 433,
+ 416, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 416, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 434, 433, 435, 436, 436, 433, 433, 433,
+ 436, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 436, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 437, 433, 438, 438, 438, 438, 438, 438,
+ 438, 438, 438, 438, 436, 436, 436, 436,
+ 436, 436, 436, 438, 438, 438, 438, 438,
+ 438, 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, 438, 438, 438, 438, 438,
+ 438, 436, 440, 440, 440, 440, 440, 440,
+ 440, 440, 440, 440, 439, 439, 439, 439,
+ 439, 439, 439, 440, 440, 440, 440, 440,
+ 440, 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, 440, 440, 440, 440, 440,
+ 440, 439, 439, 436, 20, 20, 20, 436,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 436, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 432, 20, 441, 436, 436, 27, 27, 27,
+ 436, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 436, 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, 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,
+ 29, 27, 443, 443, 443, 443, 443, 443,
+ 443, 443, 443, 443, 442, 442, 442, 442,
+ 442, 442, 442, 443, 443, 443, 443, 443,
+ 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, 443, 443, 443, 443, 443,
+ 443, 442, 442, 442, 442, 442, 442, 442,
+ 442, 442, 442, 442, 442, 442, 442, 442,
+ 442, 442, 442, 442, 442, 444, 442, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 442, 442, 442, 442, 442, 442, 442,
+ 445, 445, 445, 445, 445, 445, 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,
+ 445, 445, 445, 445, 445, 445, 442, 446,
+ 446, 446, 446, 446, 446, 446, 446, 446,
+ 446, 442, 442, 442, 442, 442, 442, 442,
+ 446, 446, 446, 446, 446, 446, 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,
+ 446, 446, 446, 446, 446, 446, 442, 447,
+ 447, 447, 447, 447, 447, 447, 447, 447,
+ 447, 442, 442, 442, 442, 442, 442, 442,
+ 447, 447, 447, 447, 447, 447, 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,
+ 447, 447, 447, 447, 447, 447, 442, 448,
+ 451, 450, 450, 450, 451, 450, 450, 450,
+ 450, 452, 450, 450, 450, 450, 450, 450,
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 450, 450, 451, 450, 450, 450, 450, 450,
+ 452, 450, 450, 450, 450, 450, 450, 450,
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 453, 453, 453, 453, 453, 453, 453, 453,
+ 453, 453, 450, 450, 450, 450, 450, 450,
+ 450, 453, 453, 453, 453, 453, 453, 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, 453, 453, 453, 453, 453, 453, 450,
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 450, 450, 450, 450, 450, 454, 450, 451,
+ 450, 450, 450, 451, 450, 450, 450, 450,
+ 449, 450, 450, 450, 450, 450, 450, 450,
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 450, 451, 450, 450, 450, 450, 450, 449,
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 450, 450, 450, 450, 450, 450, 450, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 450, 450, 450, 450, 450, 450, 450,
+ 455, 455, 455, 455, 455, 455, 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,
+ 455, 455, 455, 455, 455, 455, 450, 450,
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 450, 450, 450, 450, 450, 450, 450, 450,
+ 450, 450, 450, 450, 456, 450, 449, 451,
+ 455, 455, 455, 451, 455, 455, 455, 455,
+ 449, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 451, 455, 455, 455, 455, 455, 449,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 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, 449, 455, 457, 451,
+ 458, 458, 458, 451, 458, 458, 458, 458,
+ 452, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 451, 458, 458, 458, 458, 458, 452,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 453,
+ 453, 453, 453, 453, 453, 453, 453, 453,
+ 453, 458, 458, 458, 458, 458, 458, 458,
+ 453, 453, 453, 453, 453, 453, 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,
+ 453, 453, 453, 453, 453, 453, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 449, 458, 451, 458,
+ 458, 458, 451, 458, 458, 458, 458, 449,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 451, 458, 458, 458, 458, 458, 449, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 458, 458, 458, 458, 458, 458, 458, 455,
+ 455, 455, 455, 455, 455, 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, 455,
+ 455, 455, 455, 455, 455, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 451, 458, 451, 458, 458,
+ 458, 451, 458, 458, 458, 458, 459, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 451,
+ 458, 458, 458, 458, 458, 459, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 460, 460, 460,
+ 460, 460, 460, 460, 460, 460, 460, 458,
+ 458, 458, 458, 458, 458, 458, 460, 460,
+ 460, 460, 460, 460, 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, 460, 460,
+ 460, 460, 460, 460, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 461, 458, 451, 458, 458, 458,
+ 451, 458, 458, 458, 458, 459, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 451, 458,
+ 458, 458, 458, 458, 459, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 453, 453, 453, 453,
+ 453, 453, 453, 453, 453, 453, 458, 458,
+ 458, 458, 458, 458, 458, 453, 453, 453,
+ 453, 453, 453, 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, 453, 453, 453,
+ 453, 453, 453, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 461, 458, 462, 451, 458, 458, 458,
+ 451, 458, 458, 458, 458, 459, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 451, 458,
+ 458, 458, 458, 458, 459, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 463, 463, 463, 463,
+ 463, 463, 463, 463, 463, 463, 458, 458,
+ 458, 458, 458, 458, 458, 463, 463, 463,
+ 463, 463, 463, 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, 463, 463, 463,
+ 463, 463, 463, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 461, 458, 451, 458, 458, 458, 451,
+ 458, 458, 458, 458, 459, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 451, 458, 458,
+ 458, 458, 458, 459, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 464, 464, 464, 464, 464,
+ 464, 464, 464, 464, 464, 458, 458, 458,
+ 458, 458, 458, 458, 464, 464, 464, 464,
+ 464, 464, 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, 464, 464, 464, 464,
+ 464, 464, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 461, 458, 451, 458, 458, 458, 451, 458,
+ 458, 458, 458, 459, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 451, 458, 458, 458,
+ 458, 458, 459, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 465, 465, 465, 465, 465, 465,
+ 465, 465, 465, 465, 458, 458, 458, 458,
+ 458, 458, 458, 465, 465, 465, 465, 465,
+ 465, 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, 465, 465, 465, 465, 465,
+ 465, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 461,
+ 458, 451, 458, 458, 458, 451, 458, 458,
+ 458, 458, 459, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 451, 458, 458, 458, 458,
+ 458, 459, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 466, 466, 466, 466, 466, 466, 466,
+ 466, 466, 466, 458, 458, 458, 458, 458,
+ 458, 458, 466, 466, 466, 466, 466, 466,
+ 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, 466, 466, 466, 466, 466, 466,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 461, 458,
+ 451, 458, 458, 458, 451, 458, 458, 458,
+ 458, 459, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 451, 458, 458, 458, 458, 458,
+ 459, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 467, 467, 467, 467, 467, 467, 467, 467,
+ 467, 467, 458, 458, 458, 458, 458, 458,
+ 458, 467, 467, 467, 467, 467, 467, 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, 467, 467, 467, 467, 467, 467, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 461, 458, 451,
+ 458, 458, 458, 451, 458, 458, 458, 458,
+ 449, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 451, 458, 458, 458, 458, 458, 449,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 467,
+ 467, 467, 467, 467, 467, 467, 467, 467,
+ 467, 458, 458, 458, 458, 458, 458, 458,
+ 467, 467, 467, 467, 467, 467, 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,
+ 467, 467, 467, 467, 467, 467, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 458, 458, 458, 458,
+ 458, 458, 458, 458, 449, 458, 468, 469,
+ 471, 471, 471, 471, 471, 471, 471, 471,
+ 471, 471, 470, 470, 470, 470, 470, 470,
+ 470, 471, 471, 471, 471, 471, 471, 470,
+ 470, 470, 470, 470, 470, 470, 470, 470,
+ 470, 470, 470, 470, 470, 470, 470, 470,
+ 470, 470, 470, 470, 470, 470, 470, 470,
+ 470, 471, 471, 471, 471, 471, 471, 470,
+ 470, 473, 472, 472, 472, 473, 472, 472,
+ 472, 472, 472, 474, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 473, 472, 472, 472, 472,
+ 472, 472, 472, 472, 475, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 472, 472, 472,
+ 472, 472, 472, 472, 472, 476, 472, 478,
+ 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, 479, 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, 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, 480, 477,
+ 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 481, 481, 481, 481, 481, 481,
+ 481, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 481, 481, 481, 481, 48,
+ 481, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 481, 481, 481, 481, 481,
+ 48, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 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, 482, 482, 482, 482, 482, 482,
+ 482, 482, 482, 482, 482, 482, 482, 482,
+ 482, 482, 482, 482, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 482, 482,
+ 482, 482, 482, 482, 482, 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, 482,
+ 482, 482, 482, 52, 482, 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, 482,
+ 482, 482, 482, 482, 52, 485, 484, 484,
+ 484, 485, 484, 484, 484, 484, 484, 484,
+ 484, 484, 484, 484, 484, 484, 484, 484,
+ 484, 484, 484, 484, 484, 484, 484, 485,
+ 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, 486, 486, 486, 486, 484, 484, 484,
+ 484, 484, 484, 484, 484, 484, 484, 484,
+ 487, 484, 484, 484, 484, 484, 484, 484,
+ 484, 484, 488, 484, 484, 484, 484, 484,
+ 484, 484, 484, 484, 484, 484, 484, 484,
+ 484, 484, 484, 484, 484, 484, 484, 484,
+ 489, 484, 484, 484, 484, 484, 484, 484,
+ 484, 484, 484, 484, 484, 484, 484, 484,
+ 484, 484, 490, 484, 484, 491, 484, 492,
+ 493, 495, 495, 495, 495, 495, 495, 495,
+ 495, 494, 496, 496, 496, 496, 496, 496,
+ 496, 496, 494, 494, 497, 497, 77, 77,
+ 77, 497, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 497,
+ 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, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 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, 77,
+ 77, 498, 77, 499, 500, 501, 501, 77,
+ 77, 77, 501, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77,
+ 501, 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, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 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,
+ 77, 77, 502, 77, 76, 501, 503, 504,
+ 505, 505, 62, 62, 62, 505, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 505, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 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, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 506, 62, 507,
+ 507, 507, 507, 507, 507, 507, 507, 507,
+ 507, 505, 505, 505, 505, 505, 505, 505,
+ 507, 507, 507, 507, 507, 507, 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, 507, 507, 507, 507, 505, 509,
+ 509, 509, 509, 509, 509, 509, 509, 509,
+ 509, 508, 508, 508, 508, 508, 508, 508,
+ 509, 509, 509, 509, 509, 509, 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,
+ 509, 509, 509, 509, 509, 509, 508, 508,
+ 510, 510, 510, 510, 510, 510, 510, 510,
+ 510, 510, 501, 501, 501, 501, 501, 501,
+ 501, 510, 510, 510, 510, 510, 510, 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, 510, 510, 510, 510, 510, 510, 501,
+ 512, 512, 512, 512, 512, 512, 512, 512,
+ 512, 512, 511, 511, 511, 511, 511, 511,
+ 511, 512, 512, 512, 512, 512, 512, 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, 512, 512, 511,
+ 511, 501, 55, 55, 55, 501, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 501, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 513, 55,
+ 497, 62, 62, 62, 497, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 497, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 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,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 64, 62, 497, 514,
+ 514, 514, 497, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 497, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 515, 514, 516, 517, 517, 514,
+ 514, 514, 517, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 517, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 518, 514, 519, 519, 519, 519,
+ 519, 519, 519, 519, 519, 519, 517, 517,
+ 517, 517, 517, 517, 517, 519, 519, 519,
+ 519, 519, 519, 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, 519, 519, 519,
+ 519, 519, 519, 517, 521, 521, 521, 521,
+ 521, 521, 521, 521, 521, 521, 520, 520,
+ 520, 520, 520, 520, 520, 521, 521, 521,
+ 521, 521, 521, 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, 521, 521, 521,
+ 521, 521, 521, 520, 520, 517, 55, 55,
+ 55, 517, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 517,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 513, 55, 522, 517, 517, 62,
+ 62, 62, 517, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 517, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 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, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 64, 62, 524, 524, 524, 524,
+ 524, 524, 524, 524, 524, 524, 523, 523,
+ 523, 523, 523, 523, 523, 524, 524, 524,
+ 524, 524, 524, 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, 524, 524, 524,
+ 524, 524, 524, 523, 523, 523, 523, 523,
+ 523, 523, 523, 523, 523, 523, 523, 523,
+ 523, 523, 523, 523, 523, 523, 523, 525,
+ 523, 526, 526, 526, 526, 526, 526, 526,
+ 526, 526, 526, 523, 523, 523, 523, 523,
+ 523, 523, 526, 526, 526, 526, 526, 526,
+ 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, 526, 526,
+ 523, 527, 527, 527, 527, 527, 527, 527,
+ 527, 527, 527, 523, 523, 523, 523, 523,
+ 523, 523, 527, 527, 527, 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, 527, 527, 527, 527, 527, 527,
+ 523, 528, 528, 528, 528, 528, 528, 528,
+ 528, 528, 528, 523, 523, 523, 523, 523,
+ 523, 523, 528, 528, 528, 528, 528, 528,
+ 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, 528, 528, 528, 528, 528, 528,
+ 523, 529, 532, 531, 531, 531, 532, 531,
+ 531, 531, 531, 533, 531, 531, 531, 531,
+ 531, 531, 531, 531, 531, 531, 531, 531,
+ 531, 531, 531, 531, 532, 531, 531, 531,
+ 531, 531, 533, 531, 531, 531, 531, 531,
+ 531, 531, 531, 531, 531, 531, 531, 531,
+ 531, 531, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 531, 531, 531, 531,
+ 531, 531, 531, 534, 534, 534, 534, 534,
+ 534, 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, 534, 534, 534, 534, 534,
+ 534, 531, 531, 531, 531, 531, 531, 531,
+ 531, 531, 531, 531, 531, 531, 531, 531,
+ 531, 531, 531, 531, 531, 531, 531, 535,
+ 531, 532, 531, 531, 531, 532, 531, 531,
+ 531, 531, 530, 531, 531, 531, 531, 531,
+ 531, 531, 531, 531, 531, 531, 531, 531,
+ 531, 531, 531, 532, 531, 531, 531, 531,
+ 531, 530, 531, 531, 531, 531, 531, 531,
+ 531, 531, 531, 531, 531, 531, 531, 531,
+ 531, 536, 536, 536, 536, 536, 536, 536,
+ 536, 536, 536, 531, 531, 531, 531, 531,
+ 531, 531, 536, 536, 536, 536, 536, 536,
+ 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, 536, 536, 536, 536, 536, 536,
+ 531, 531, 531, 531, 531, 531, 531, 531,
+ 531, 531, 531, 531, 531, 531, 531, 531,
+ 531, 531, 531, 531, 531, 531, 537, 531,
+ 530, 532, 536, 536, 536, 532, 536, 536,
+ 536, 536, 530, 536, 536, 536, 536, 536,
+ 536, 536, 536, 536, 536, 536, 536, 536,
+ 536, 536, 536, 532, 536, 536, 536, 536,
+ 536, 530, 536, 536, 536, 536, 536, 536,
+ 536, 536, 536, 536, 536, 536, 536, 536,
+ 536, 536, 536, 536, 536, 536, 536, 536,
+ 536, 536, 536, 536, 536, 536, 536, 536,
+ 536, 536, 536, 536, 536, 536, 536, 536,
+ 536, 536, 536, 536, 536, 536, 536, 536,
+ 536, 536, 536, 536, 536, 536, 536, 536,
+ 536, 536, 536, 536, 536, 536, 536, 536,
+ 536, 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, 530, 536,
+ 538, 532, 539, 539, 539, 532, 539, 539,
+ 539, 539, 533, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 532, 539, 539, 539, 539,
+ 539, 533, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 539, 539, 539, 539, 539,
+ 539, 539, 534, 534, 534, 534, 534, 534,
+ 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, 534, 534, 534, 534, 534, 534,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 530, 539,
+ 532, 539, 539, 539, 532, 539, 539, 539,
+ 539, 530, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 532, 539, 539, 539, 539, 539,
+ 530, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 536, 536, 536, 536, 536, 536, 536, 536,
+ 536, 536, 539, 539, 539, 539, 539, 539,
+ 539, 536, 536, 536, 536, 536, 536, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 536, 536, 536, 536, 536, 536, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 532, 539, 532,
+ 539, 539, 539, 532, 539, 539, 539, 539,
+ 540, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 532, 539, 539, 539, 539, 539, 540,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 541,
+ 541, 541, 541, 541, 541, 541, 541, 541,
+ 541, 539, 539, 539, 539, 539, 539, 539,
+ 541, 541, 541, 541, 541, 541, 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,
+ 541, 541, 541, 541, 541, 541, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 542, 539, 532, 539,
+ 539, 539, 532, 539, 539, 539, 539, 540,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 532, 539, 539, 539, 539, 539, 540, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534,
+ 539, 539, 539, 539, 539, 539, 539, 534,
+ 534, 534, 534, 534, 534, 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, 534,
+ 534, 534, 534, 534, 534, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 542, 539, 543, 532, 539,
+ 539, 539, 532, 539, 539, 539, 539, 540,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 532, 539, 539, 539, 539, 539, 540, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 544, 544,
+ 544, 544, 544, 544, 544, 544, 544, 544,
+ 539, 539, 539, 539, 539, 539, 539, 544,
+ 544, 544, 544, 544, 544, 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, 544,
+ 544, 544, 544, 544, 544, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 542, 539, 532, 539, 539,
+ 539, 532, 539, 539, 539, 539, 540, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 532,
+ 539, 539, 539, 539, 539, 540, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 545, 545, 545,
+ 545, 545, 545, 545, 545, 545, 545, 539,
+ 539, 539, 539, 539, 539, 539, 545, 545,
+ 545, 545, 545, 545, 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,
+ 545, 545, 545, 545, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 542, 539, 532, 539, 539, 539,
+ 532, 539, 539, 539, 539, 540, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 532, 539,
+ 539, 539, 539, 539, 540, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 546, 546, 546, 546,
+ 546, 546, 546, 546, 546, 546, 539, 539,
+ 539, 539, 539, 539, 539, 546, 546, 546,
+ 546, 546, 546, 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, 546, 546, 546,
+ 546, 546, 546, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 542, 539, 532, 539, 539, 539, 532,
+ 539, 539, 539, 539, 540, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 532, 539, 539,
+ 539, 539, 539, 540, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 547, 547, 547, 547, 547,
+ 547, 547, 547, 547, 547, 539, 539, 539,
+ 539, 539, 539, 539, 547, 547, 547, 547,
+ 547, 547, 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, 547, 547, 547, 547,
+ 547, 547, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 542, 539, 532, 539, 539, 539, 532, 539,
+ 539, 539, 539, 540, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 532, 539, 539, 539,
+ 539, 539, 540, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 548, 548, 548, 548, 548, 548,
+ 548, 548, 548, 548, 539, 539, 539, 539,
+ 539, 539, 539, 548, 548, 548, 548, 548,
+ 548, 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, 548, 548, 548, 548, 548,
+ 548, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 542,
+ 539, 532, 539, 539, 539, 532, 539, 539,
+ 539, 539, 530, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 532, 539, 539, 539, 539,
+ 539, 530, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 548, 548, 548, 548, 548, 548, 548,
+ 548, 548, 548, 539, 539, 539, 539, 539,
+ 539, 539, 548, 548, 548, 548, 548, 548,
+ 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, 548, 548, 548, 548, 548, 548,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 530, 539,
+ 549, 550, 552, 552, 552, 552, 552, 552,
+ 552, 552, 552, 552, 551, 551, 551, 551,
+ 551, 551, 551, 552, 552, 552, 552, 552,
+ 552, 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, 552, 552, 552, 552, 552,
+ 552, 551, 551, 554, 553, 553, 553, 554,
+ 553, 553, 553, 553, 555, 556, 555, 555,
+ 555, 553, 553, 553, 553, 553, 553, 553,
+ 553, 553, 553, 553, 553, 554, 553, 553,
+ 553, 553, 553, 555, 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, 553, 553, 553, 553, 553, 553,
+ 553, 553, 553, 553, 553, 553, 553, 553,
+ 553, 553, 553, 553, 553, 553, 553, 557,
+ 553, 555, 558, 555, 555, 555, 558, 558,
+ 558, 558, 558, 558, 558, 558, 558, 558,
+ 558, 558, 558, 558, 558, 558, 558, 558,
+ 555, 558, 559, 560, 560, 560, 559, 560,
+ 560, 560, 560, 560, 560, 560, 560, 560,
+ 560, 560, 560, 560, 560, 560, 560, 560,
+ 560, 560, 560, 560, 559, 560, 562, 561,
+ 561, 561, 562, 561, 561, 561, 561, 561,
+ 563, 561, 561, 561, 561, 561, 561, 561,
+ 561, 561, 561, 561, 561, 561, 561, 561,
+ 562, 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, 561, 561, 561, 561, 561, 561, 561,
+ 561, 561, 564, 561, 565, 566, 566, 566,
+ 565, 566, 566, 566, 566, 566, 567, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 565, 566,
+ 569, 568, 568, 568, 569, 568, 568, 568,
+ 568, 568, 570, 568, 568, 568, 568, 568,
+ 568, 568, 568, 568, 568, 568, 568, 568,
+ 568, 568, 569, 568, 568, 568, 568, 568,
+ 568, 568, 568, 571, 568, 573, 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, 574, 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, 572, 572, 575, 572, 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, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83,
+ 576, 576, 576, 576, 576, 576, 576, 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, 576, 576, 576, 576, 83, 576, 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, 576, 576, 576, 576, 576, 83, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 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, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 577, 577, 577, 577,
+ 577, 577, 577, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 577, 577, 577,
+ 577, 87, 577, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 577, 577, 577,
+ 577, 577, 87, 579, 578, 578, 578, 579,
+ 578, 578, 578, 578, 578, 580, 578, 578,
+ 578, 578, 578, 578, 578, 578, 578, 578,
+ 578, 578, 578, 578, 578, 579, 578, 582,
+ 581, 581, 581, 582, 581, 581, 581, 581,
+ 583, 584, 583, 583, 583, 581, 581, 581,
+ 581, 581, 581, 581, 581, 581, 581, 581,
+ 581, 582, 581, 581, 581, 581, 581, 583,
+ 581, 581, 585, 581, 583, 586, 583, 583,
+ 583, 586, 586, 586, 586, 586, 586, 586,
+ 586, 586, 586, 586, 586, 586, 586, 586,
+ 586, 586, 586, 583, 586, 588, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 589, 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, 587, 587, 590, 587, 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, 90, 90,
+ 90, 90, 90, 90, 90, 90, 90, 90,
+ 591, 591, 591, 591, 591, 591, 591, 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, 591, 591, 591, 591, 90, 591, 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, 591, 591, 591, 591, 591, 90, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 591, 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, 90, 90, 90, 90, 90, 90,
+ 90, 90, 90, 90, 592, 592, 592, 592,
+ 592, 592, 592, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 592, 592, 592,
+ 592, 94, 592, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 592, 592, 592,
+ 592, 592, 94, 594, 593, 593, 593, 594,
+ 593, 593, 593, 593, 595, 596, 595, 595,
+ 595, 593, 593, 593, 593, 593, 593, 593,
+ 593, 593, 593, 593, 593, 594, 593, 593,
+ 593, 593, 593, 595, 593, 595, 597, 595,
+ 595, 595, 597, 597, 597, 597, 597, 597,
+ 597, 597, 597, 597, 597, 597, 597, 597,
+ 597, 597, 597, 597, 595, 597, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599,
+ 598, 598, 598, 598, 598, 598, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599,
+ 598, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 600, 600, 600, 600, 600,
+ 600, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 600, 601, 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,
+ 602, 98, 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, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 603, 603, 603, 603,
+ 603, 603, 603, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 603, 603, 603,
+ 603, 96, 603, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 603, 603, 603,
+ 603, 603, 96, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 603, 604, 604,
+ 604, 604, 604, 604, 604, 604, 604, 604,
+ 604, 604, 604, 604, 604, 604, 604, 604,
+ 604, 604, 604, 604, 604, 604, 604, 604,
+ 604, 604, 604, 604, 604, 604, 604, 604,
+ 604, 604, 604, 604, 604, 604, 604, 604,
+ 604, 604, 604, 604, 604, 604, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 604, 604, 604, 604, 604, 604, 604, 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, 604, 604, 604, 604, 101, 604, 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, 604, 604, 604, 604, 604, 101, 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, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 605, 605, 605, 605, 605, 605, 605,
+ 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, 605, 605, 605, 605, 103, 605,
+ 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, 605, 605, 605, 605, 605, 103,
+ 607, 608, 608, 608, 607, 608, 608, 608,
+ 608, 609, 610, 609, 609, 609, 608, 608,
+ 608, 608, 608, 608, 608, 608, 608, 608,
+ 608, 608, 607, 608, 608, 608, 608, 608,
+ 609, 611, 608, 612, 613, 614, 615, 608,
+ 608, 608, 616, 617, 608, 617, 608, 618,
+ 608, 608, 608, 608, 608, 608, 608, 608,
+ 608, 608, 619, 608, 620, 621, 622, 608,
+ 608, 623, 624, 623, 623, 625, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 626, 627, 608, 618, 628,
+ 618, 629, 630, 631, 632, 633, 634, 606,
+ 606, 635, 606, 606, 606, 636, 637, 638,
+ 606, 606, 639, 640, 641, 642, 606, 643,
+ 606, 644, 606, 608, 645, 608, 617, 608,
+ 606, 646, 646, 646, 646, 646, 646, 646,
+ 646, 646, 646, 646, 646, 646, 646, 646,
+ 646, 646, 646, 646, 646, 646, 646, 646,
+ 646, 646, 646, 646, 646, 646, 646, 646,
+ 646, 646, 647, 646, 646, 646, 646, 646,
+ 646, 646, 646, 646, 646, 646, 646, 646,
+ 646, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 646, 646, 646, 647, 646,
+ 647, 646, 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, 646, 646, 646, 646,
+ 606, 646, 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, 646, 646, 646, 646,
+ 646, 606, 609, 648, 609, 609, 609, 648,
+ 648, 648, 648, 648, 648, 648, 648, 648,
+ 648, 648, 648, 648, 648, 648, 648, 648,
+ 648, 609, 648, 649, 618, 650, 650, 618,
+ 650, 650, 650, 650, 650, 650, 650, 650,
+ 650, 650, 650, 650, 650, 650, 650, 650,
+ 650, 650, 650, 650, 650, 650, 650, 650,
+ 650, 650, 650, 650, 650, 650, 650, 650,
+ 650, 650, 650, 650, 650, 650, 650, 650,
+ 650, 650, 650, 650, 650, 650, 650, 650,
+ 650, 650, 650, 650, 650, 650, 650, 650,
+ 650, 650, 650, 650, 650, 618, 650, 651,
+ 652, 653, 654, 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, 105, 105, 655, 105,
+ 655, 105, 105, 655, 655, 105, 105, 105,
+ 657, 105, 105, 658, 658, 658, 658, 658,
+ 658, 658, 658, 658, 658, 105, 105, 105,
+ 105, 105, 105, 105, 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, 655, 105,
+ 655, 655, 656, 105, 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, 655, 655,
+ 655, 105, 655, 656, 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, 656, 656, 656, 656,
+ 656, 656, 656, 656, 656, 656, 659, 659,
+ 659, 659, 659, 659, 659, 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, 659,
+ 659, 659, 659, 656, 659, 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, 659,
+ 659, 659, 659, 659, 656, 658, 658, 658,
+ 658, 658, 658, 658, 658, 658, 658, 659,
+ 660, 650, 618, 650, 618, 650, 618, 650,
+ 662, 661, 618, 663, 650, 618, 650, 664,
+ 618, 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, 655, 655, 655, 655, 655,
+ 655, 655, 655, 655, 655, 655, 655, 655,
+ 618, 655, 618, 650, 618, 618, 650, 646,
+ 646, 646, 646, 646, 646, 646, 646, 646,
+ 646, 646, 646, 646, 646, 646, 646, 646,
+ 646, 646, 646, 646, 646, 646, 646, 646,
+ 646, 646, 646, 646, 646, 646, 646, 646,
+ 647, 646, 646, 646, 646, 646, 646, 646,
+ 646, 646, 646, 646, 646, 646, 646, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 646, 646, 646, 647, 646, 647, 646,
+ 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, 646, 646, 646, 646, 623, 646,
+ 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, 646, 646, 646, 646, 646, 623,
+ 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, 647, 665, 665, 665, 665, 665, 665,
+ 665, 665, 665, 665, 665, 665, 665, 665,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 665, 665, 665, 647, 665, 647,
+ 665, 623, 623, 623, 623, 666, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 665, 665, 665, 665, 623,
+ 665, 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, 665, 665, 665, 665, 665,
+ 623, 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, 647, 665, 665, 665, 665, 665,
+ 665, 665, 665, 665, 665, 665, 665, 665,
+ 665, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 665, 665, 665, 647, 665,
+ 647, 665, 623, 623, 623, 623, 623, 623,
+ 667, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 665, 665, 665, 665,
+ 623, 665, 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, 665, 665, 665, 665,
+ 665, 623, 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, 647, 665, 665, 665, 665,
+ 665, 665, 665, 665, 665, 665, 665, 665,
+ 665, 665, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 665, 665, 665, 647,
+ 665, 647, 665, 623, 623, 623, 623, 623,
+ 623, 623, 623, 668, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 665, 665, 665,
+ 665, 623, 665, 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, 665, 665, 665,
+ 665, 665, 623, 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, 647, 665, 665, 665,
+ 665, 665, 665, 665, 665, 665, 665, 665,
+ 665, 665, 665, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 665, 665, 665,
+ 647, 665, 647, 665, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 669, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 665, 665,
+ 665, 665, 623, 665, 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, 665, 665,
+ 665, 665, 665, 623, 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, 647, 665, 665,
+ 665, 665, 665, 665, 665, 665, 665, 665,
+ 665, 665, 665, 665, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 665, 665,
+ 665, 647, 665, 647, 665, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 670, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 665,
+ 665, 665, 665, 623, 665, 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, 665,
+ 665, 665, 665, 665, 623, 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, 647, 665,
+ 665, 665, 665, 665, 665, 665, 665, 665,
+ 665, 665, 665, 665, 665, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 665,
+ 665, 665, 647, 665, 647, 665, 623, 623,
+ 623, 669, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 623, 623, 623, 623, 623, 623, 623, 623,
+ 665, 665, 665, 665, 623, 665, 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,
+ 665, 665, 665, 665, 665, 623, 664, 655,
+ 610, 655, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 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, 671, 671, 671,
+ 671, 672, 671, 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, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 606, 606, 606, 606,
+ 673, 674, 606, 606, 606, 606, 606, 675,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 671, 606, 671, 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, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 676, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 671, 606, 671, 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, 671,
+ 671, 671, 671, 671, 606, 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, 647, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 647, 671, 647, 671, 606, 606,
+ 677, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 671, 606, 671, 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,
+ 671, 671, 671, 671, 671, 606, 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, 647,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 647, 671, 647, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 678, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 671, 606, 671, 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, 671, 671, 671, 671, 671, 606, 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,
+ 647, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 647, 671, 647, 671,
+ 606, 606, 606, 679, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 671, 606, 671,
+ 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, 671, 671, 671, 671, 671, 606,
+ 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, 647, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 647, 671, 647,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 680, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 671, 606,
+ 671, 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, 671, 671, 671, 671, 671,
+ 606, 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, 647, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 647, 671,
+ 647, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 681,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 671,
+ 606, 671, 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, 671, 671, 671, 671,
+ 671, 606, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 606, 606, 606, 606, 606,
+ 606, 682, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 671, 606, 671, 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, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 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, 671, 671,
+ 671, 671, 683, 671, 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, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 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, 671,
+ 671, 671, 671, 684, 671, 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, 671,
+ 671, 671, 671, 671, 606, 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, 647, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 647, 671, 647, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 685, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 671, 606, 671, 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,
+ 671, 671, 671, 671, 671, 606, 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, 647,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 647, 671, 647, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 686, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 671, 606, 671, 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, 671, 671, 671, 671, 671, 606, 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,
+ 647, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 647, 671, 647, 671,
+ 606, 606, 606, 606, 682, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 671, 606, 671,
+ 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, 671, 671, 671, 671, 671, 606,
+ 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, 647, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 647, 671, 647,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 687, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 671, 606,
+ 671, 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, 671, 671, 671, 671, 671,
+ 606, 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, 647, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 647, 671,
+ 647, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 686,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 671,
+ 606, 671, 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, 671, 671, 671, 671,
+ 671, 606, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 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, 671, 671, 671,
+ 671, 606, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 688, 606,
+ 689, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 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, 671, 671,
+ 671, 671, 606, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 690, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 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, 671,
+ 671, 671, 671, 606, 671, 691, 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, 671,
+ 671, 671, 671, 671, 606, 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, 647, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 647, 671, 647, 671, 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,
+ 671, 671, 671, 671, 606, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 684, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 671, 671, 606, 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, 647,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 647, 671, 647, 671, 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, 671, 671, 671, 671, 606, 671, 606,
+ 606, 606, 684, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 671, 671, 606, 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,
+ 647, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 647, 671, 647, 671,
+ 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, 671, 671, 671, 671, 606, 671,
+ 606, 606, 606, 606, 692, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 693, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 671, 671, 606,
+ 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, 647, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 647, 671, 647,
+ 671, 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, 671, 671, 671, 671, 606,
+ 671, 606, 606, 606, 606, 606, 606, 694,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 671, 671,
+ 606, 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, 647, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 647, 671,
+ 647, 671, 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, 671, 671, 671, 671,
+ 606, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 695, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 671,
+ 671, 606, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 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, 671, 671, 671,
+ 671, 606, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 684, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 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, 671, 671,
+ 671, 671, 606, 671, 606, 606, 606, 606,
+ 696, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 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, 671,
+ 671, 671, 671, 606, 671, 697, 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, 671,
+ 671, 671, 671, 671, 606, 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, 647, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 647, 671, 647, 671, 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,
+ 671, 671, 671, 671, 606, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 684, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 671, 671, 606, 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, 647,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 647, 671, 647, 671, 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, 671, 671, 671, 671, 606, 671, 698,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 699, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 671, 671, 606, 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,
+ 647, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 647, 671, 647, 671,
+ 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, 671, 671, 671, 671, 606, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 700, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 671, 671, 606,
+ 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, 647, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 647, 671, 647,
+ 671, 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, 671, 671, 671, 671, 606,
+ 671, 606, 606, 606, 606, 684, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 671, 671,
+ 606, 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, 647, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 647, 671,
+ 647, 671, 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, 671, 671, 671, 671,
+ 606, 671, 701, 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, 671, 671, 671, 671,
+ 671, 606, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 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, 671, 671, 671,
+ 671, 606, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 691, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 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, 671, 671,
+ 671, 671, 606, 671, 606, 606, 606, 606,
+ 702, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 684, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 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, 671,
+ 671, 671, 671, 606, 671, 606, 606, 606,
+ 606, 606, 703, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 671, 671, 606, 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, 647, 704,
+ 704, 704, 704, 704, 704, 704, 704, 704,
+ 704, 704, 704, 704, 704, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 704,
+ 704, 704, 647, 704, 647, 704, 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,
+ 704, 704, 704, 704, 606, 704, 606, 606,
+ 606, 606, 606, 606, 606, 606, 705, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 704, 704, 704, 704, 704, 606, 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, 647,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 647, 671, 647, 671, 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, 671, 671, 671, 671, 606, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 706, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 671, 671, 606, 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,
+ 647, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 647, 671, 647, 671,
+ 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, 671, 671, 671, 671, 606, 671,
+ 606, 606, 606, 606, 707, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 671, 671, 606,
+ 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, 647, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 647, 671, 647,
+ 671, 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, 671, 671, 671, 671, 606,
+ 671, 606, 606, 606, 708, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 671, 671,
+ 606, 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, 647, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 647, 671,
+ 709, 671, 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, 671, 671, 671, 671,
+ 606, 671, 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, 671, 671, 671, 671,
+ 671, 606, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 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, 671, 671, 671,
+ 671, 606, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 710, 606,
+ 711, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 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, 671, 671,
+ 671, 671, 606, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 712, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 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, 671,
+ 671, 671, 671, 606, 671, 606, 606, 606,
+ 606, 684, 606, 606, 606, 713, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 671, 671, 606, 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, 647, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 647, 671, 647, 671, 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,
+ 671, 671, 671, 671, 606, 671, 606, 606,
+ 606, 606, 606, 684, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 671, 671, 606, 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, 647,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 647, 671, 647, 671, 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, 671, 671, 671, 671, 606, 671, 606,
+ 606, 606, 684, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 714, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 671, 671, 606, 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,
+ 647, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 647, 671, 647, 671,
+ 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, 671, 671, 671, 671, 606, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 715, 606, 606, 606,
+ 606, 606, 671, 671, 671, 671, 671, 606,
+ 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, 647, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 647, 671, 647,
+ 671, 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, 671, 671, 671, 671, 606,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 700, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 671, 671,
+ 606, 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, 647, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 647, 671,
+ 647, 671, 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, 671, 671, 671, 671,
+ 606, 671, 716, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 638, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 671,
+ 671, 606, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 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, 671, 671, 671,
+ 671, 606, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 698, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 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, 671, 671,
+ 671, 671, 606, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 684, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 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, 671,
+ 671, 671, 671, 606, 671, 606, 606, 606,
+ 606, 606, 684, 606, 606, 606, 606, 606,
+ 606, 606, 684, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 671, 671, 606, 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, 647, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 647, 671, 647, 671, 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,
+ 671, 671, 671, 671, 606, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 717, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 671, 671, 606, 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, 647,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 647, 671, 647, 671, 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, 671, 671, 671, 671, 606, 671, 606,
+ 606, 606, 718, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 671, 671, 606, 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,
+ 647, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 647, 671, 647, 671,
+ 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, 671, 671, 671, 671, 606, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 719, 606, 606, 606,
+ 606, 606, 671, 671, 671, 671, 671, 606,
+ 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, 647, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 647, 671, 647,
+ 671, 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, 671, 671, 671, 671, 606,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 700, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 671, 671,
+ 606, 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, 647, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 647, 671,
+ 647, 671, 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, 671, 671, 671, 671,
+ 606, 671, 606, 606, 606, 606, 720, 606,
+ 606, 606, 721, 606, 606, 606, 606, 606,
+ 722, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 671,
+ 671, 606, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 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, 671, 671, 671,
+ 671, 606, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 722, 606, 606, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 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, 671, 671,
+ 671, 671, 606, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 684,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 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, 671,
+ 671, 671, 671, 606, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 684, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 671, 671, 606, 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, 647, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 647, 671, 647, 671, 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,
+ 671, 671, 671, 671, 606, 671, 606, 606,
+ 606, 606, 723, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 671, 671, 606, 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, 647,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 647, 671, 647, 671, 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, 671, 671, 671, 671, 606, 671, 606,
+ 606, 606, 724, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 725, 726, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 671, 671, 606, 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,
+ 647, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 647, 671, 647, 671,
+ 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, 671, 671, 671, 671, 606, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 684, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 671, 671, 606,
+ 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, 647, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 647, 671, 647,
+ 671, 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, 671, 671, 671, 671, 606,
+ 671, 606, 606, 727, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 671, 671,
+ 606, 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, 647, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 647, 671,
+ 647, 671, 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, 671, 671, 671, 671,
+ 606, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 700, 606,
+ 606, 606, 606, 606, 671, 671, 671, 671,
+ 671, 606, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 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, 671, 671, 671,
+ 671, 606, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 728, 606, 606, 729,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 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, 671, 671,
+ 671, 671, 606, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 684, 606, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 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, 671,
+ 671, 671, 671, 606, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 695, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 671, 671, 606, 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, 647, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 647, 671, 647, 671, 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,
+ 671, 671, 671, 671, 606, 671, 606, 606,
+ 606, 606, 730, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 731, 606, 606, 606, 606, 606,
+ 671, 671, 671, 671, 671, 606, 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, 647,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 647, 671, 647, 671, 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, 671, 671, 671, 671, 606, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 713, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 671, 671, 606, 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,
+ 647, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 647, 671, 647, 671,
+ 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, 671, 671, 671, 671, 606, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 732,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 671, 671, 606,
+ 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, 647, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 647, 671, 647,
+ 671, 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, 671, 671, 671, 671, 606,
+ 671, 606, 606, 606, 606, 638, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 671, 671,
+ 606, 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, 647, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 647, 671,
+ 647, 671, 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, 671, 671, 671, 671,
+ 606, 671, 606, 606, 606, 606, 606, 606,
+ 606, 733, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 727, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 671,
+ 671, 606, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 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, 671, 671, 671,
+ 671, 606, 671, 606, 606, 606, 606, 695,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 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, 671, 671,
+ 671, 671, 606, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 734, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 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, 671,
+ 671, 671, 671, 606, 671, 606, 606, 606,
+ 735, 606, 606, 606, 606, 606, 606, 606,
+ 736, 606, 606, 606, 606, 606, 606, 606,
+ 737, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 671, 671, 606, 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, 647, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 647, 671, 647, 671, 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,
+ 671, 671, 671, 671, 606, 671, 606, 606,
+ 606, 606, 713, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 671, 671, 606, 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, 647,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 671, 671, 671, 647, 671, 647, 671, 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, 671, 671, 671, 671, 606, 671, 606,
+ 606, 606, 606, 701, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 671, 671, 606, 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,
+ 647, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 671, 671, 671, 647, 671, 647, 671,
+ 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, 671, 671, 671, 671, 606, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 721, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 671, 671, 606,
+ 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, 647, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 671, 671, 671, 647, 671, 647,
+ 671, 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, 671, 671, 671, 671, 606,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 738, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 671, 671,
+ 606, 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, 647, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 671, 671, 671, 647, 671,
+ 647, 671, 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, 671, 671, 671, 671,
+ 606, 671, 606, 606, 606, 606, 695, 606,
+ 606, 606, 719, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 671,
+ 671, 606, 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, 647, 671, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 671, 671, 671, 647,
+ 671, 647, 671, 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, 671, 671, 671,
+ 671, 606, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 739, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 671, 671, 606, 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, 647, 671, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 671, 671, 671,
+ 647, 671, 647, 671, 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, 671, 671,
+ 671, 671, 606, 671, 606, 606, 606, 606,
+ 740, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 671, 671, 606, 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, 647, 671, 671,
+ 671, 671, 671, 671, 671, 671, 671, 671,
+ 671, 671, 671, 671, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 671, 671,
+ 671, 647, 671, 647, 671, 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, 671,
+ 671, 671, 671, 606, 671, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 606,
+ 689, 606, 606, 606, 606, 606, 606, 606,
+ 606, 606, 606, 606, 606, 606, 606, 671,
+ 671, 671, 671, 671, 606, 618, 650, 742,
+ 743, 743, 743, 742, 743, 743, 743, 743,
+ 744, 743, 744, 744, 744, 743, 743, 743,
+ 743, 743, 743, 743, 743, 743, 743, 743,
+ 743, 742, 743, 743, 743, 743, 743, 744,
+ 743, 743, 745, 743, 743, 743, 743, 743,
+ 743, 743, 743, 743, 743, 746, 743, 743,
+ 743, 743, 743, 743, 743, 743, 743, 743,
+ 743, 743, 743, 743, 743, 743, 743, 743,
+ 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, 743, 747, 743, 743, 741, 743,
+ 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, 743, 743, 743, 743, 743, 741,
+ 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, 110, 748, 748, 748, 748, 748, 748,
+ 748, 748, 748, 748, 748, 748, 748, 748,
+ 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 111, 748, 748, 748, 748, 110,
+ 748, 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, 748, 748, 748, 748, 109,
+ 748, 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, 748, 748, 748, 748, 748,
+ 109, 744, 749, 744, 744, 744, 749, 749,
+ 749, 749, 749, 749, 749, 749, 749, 749,
+ 749, 749, 749, 749, 749, 749, 749, 749,
+ 744, 749, 750, 751, 752, 753, 754, 748,
+ 755, 748, 756, 758, 759, 759, 759, 758,
+ 759, 759, 759, 759, 760, 761, 760, 760,
+ 760, 759, 759, 759, 759, 759, 759, 759,
+ 759, 759, 759, 759, 759, 758, 759, 759,
+ 759, 759, 759, 760, 762, 759, 763, 759,
+ 764, 765, 759, 759, 759, 766, 767, 759,
+ 767, 759, 764, 759, 759, 759, 759, 759,
+ 759, 759, 759, 759, 759, 759, 759, 768,
+ 769, 770, 759, 759, 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, 773,
+ 759, 764, 757, 764, 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, 759, 774,
+ 759, 767, 759, 757, 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, 776, 775, 775,
+ 775, 775, 775, 775, 775, 775, 775, 775,
+ 775, 775, 775, 775, 757, 757, 757, 757,
+ 757, 757, 757, 757, 757, 757, 775, 775,
+ 775, 775, 775, 776, 775, 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, 775,
+ 775, 775, 775, 757, 775, 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, 775,
+ 775, 775, 775, 775, 757, 778, 777, 779,
+ 760, 780, 760, 760, 760, 780, 780, 780,
+ 780, 780, 780, 780, 780, 780, 780, 780,
+ 780, 780, 780, 780, 780, 780, 780, 760,
+ 780, 781, 764, 782, 782, 764, 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, 782, 782, 782, 782, 782, 782,
+ 782, 782, 782, 764, 782, 783, 784, 785,
+ 786, 764, 782, 764, 782, 764, 782, 764,
+ 787, 782, 764, 782, 789, 764, 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, 788, 788, 788, 788, 788, 788,
+ 788, 788, 788, 788, 788, 764, 788, 764,
+ 782, 764, 764, 782, 790, 790, 790, 790,
+ 790, 790, 790, 790, 790, 790, 790, 790,
+ 790, 790, 790, 790, 790, 790, 790, 790,
+ 790, 790, 790, 790, 790, 790, 790, 790,
+ 790, 790, 790, 790, 790, 776, 790, 790,
+ 790, 790, 790, 790, 790, 790, 790, 790,
+ 790, 790, 790, 790, 771, 771, 771, 771,
+ 771, 771, 771, 771, 771, 771, 790, 790,
+ 790, 790, 790, 776, 790, 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, 790,
+ 790, 790, 790, 771, 790, 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, 790,
+ 790, 790, 790, 790, 771, 789, 788, 761,
+ 788, 764, 782, 792, 791, 791, 791, 792,
+ 791, 791, 791, 791, 793, 794, 793, 793,
+ 793, 791, 791, 791, 791, 791, 791, 791,
+ 791, 791, 791, 791, 791, 792, 791, 791,
+ 791, 791, 791, 793, 791, 791, 795, 791,
+ 120, 796, 791, 797, 791, 798, 120, 151,
+ 799, 153, 120, 791, 791, 791, 791, 791,
+ 791, 791, 791, 791, 791, 800, 791, 801,
+ 151, 802, 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, 151, 804,
+ 151, 120, 791, 791, 791, 791, 791, 791,
+ 791, 791, 791, 791, 805, 791, 791, 791,
+ 791, 791, 791, 791, 791, 806, 791, 791,
+ 807, 791, 808, 791, 791, 791, 164, 165,
+ 791, 120, 791, 809, 809, 809, 809, 809,
+ 809, 809, 809, 809, 793, 809, 793, 793,
+ 793, 809, 809, 809, 809, 809, 809, 809,
+ 809, 809, 809, 809, 809, 809, 809, 809,
+ 809, 809, 809, 793, 809, 809, 809, 809,
+ 146, 147, 809, 148, 809, 149, 150, 151,
+ 152, 153, 146, 809, 809, 809, 809, 809,
+ 809, 809, 809, 809, 809, 154, 809, 155,
+ 151, 156, 157, 809, 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, 158, 159,
+ 151, 120, 115, 809, 115, 115, 115, 115,
+ 115, 115, 115, 115, 160, 115, 115, 115,
+ 115, 115, 115, 115, 115, 161, 115, 115,
+ 162, 115, 163, 115, 115, 115, 164, 165,
+ 809, 120, 809, 115, 810, 811, 811, 811,
+ 810, 811, 811, 811, 811, 151, 812, 151,
+ 151, 151, 811, 811, 811, 811, 811, 811,
+ 811, 811, 811, 811, 811, 811, 810, 811,
+ 811, 811, 811, 811, 151, 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, 151, 811, 151, 812, 151, 151, 151,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 151, 114, 114, 114, 114, 114,
+ 120, 114, 114, 114, 114, 114, 114, 114,
+ 151, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 151,
+ 114, 151, 812, 151, 151, 151, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 151, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 151, 114, 813,
+ 151, 812, 151, 151, 151, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 151,
+ 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 815, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 151, 814, 151, 812,
+ 151, 151, 151, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 151, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 151, 151, 114, 816, 810, 151,
+ 810, 818, 817, 820, 821, 820, 820, 820,
+ 819, 819, 819, 819, 819, 819, 819, 819,
+ 819, 819, 819, 819, 819, 819, 819, 819,
+ 819, 819, 820, 819, 822, 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, 116, 810,
+ 810, 810, 810, 810, 810, 810, 810, 810,
+ 810, 810, 810, 810, 810, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 117,
+ 810, 810, 810, 810, 116, 810, 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,
+ 810, 810, 810, 810, 115, 810, 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,
+ 810, 810, 810, 810, 810, 115, 823, 151,
+ 812, 151, 151, 151, 810, 810, 810, 810,
+ 810, 810, 810, 810, 810, 810, 810, 810,
+ 810, 810, 810, 810, 810, 810, 151, 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, 151, 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, 810, 810, 810, 810,
+ 810, 810, 120, 810, 824, 825, 826, 827,
+ 828, 829, 151, 812, 151, 151, 151, 810,
+ 810, 810, 810, 810, 810, 810, 810, 810,
+ 810, 810, 810, 810, 810, 810, 810, 810,
+ 810, 151, 810, 810, 810, 810, 810, 810,
+ 810, 810, 810, 120, 810, 810, 810, 810,
+ 810, 810, 810, 810, 810, 810, 810, 810,
+ 810, 810, 810, 810, 810, 810, 151, 810,
+ 151, 817, 120, 830, 120, 830, 831, 832,
+ 831, 831, 831, 819, 819, 819, 819, 819,
+ 819, 819, 819, 819, 819, 819, 819, 819,
+ 819, 819, 819, 819, 819, 831, 819, 833,
+ 830, 834, 834, 834, 834, 834, 834, 834,
+ 834, 834, 123, 834, 123, 123, 123, 834,
+ 834, 834, 834, 834, 834, 834, 834, 834,
+ 834, 834, 834, 834, 834, 834, 834, 834,
+ 834, 123, 834, 834, 834, 834, 124, 125,
+ 834, 126, 834, 127, 128, 129, 130, 131,
+ 124, 834, 834, 834, 834, 834, 834, 834,
+ 834, 834, 834, 132, 834, 133, 129, 134,
+ 135, 834, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 136, 137, 129, 138,
+ 122, 834, 122, 122, 122, 122, 122, 122,
+ 122, 122, 139, 122, 122, 122, 122, 122,
+ 122, 122, 122, 140, 122, 122, 141, 122,
+ 142, 122, 122, 122, 143, 144, 834, 138,
+ 834, 122, 151, 830, 835, 830, 836, 830,
+ 837, 830, 838, 190, 190, 190, 838, 190,
+ 190, 190, 190, 839, 190, 839, 839, 839,
+ 190, 190, 190, 190, 190, 190, 190, 190,
+ 190, 190, 190, 190, 838, 190, 190, 190,
+ 190, 190, 839, 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, 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, 190, 840, 190,
+ 190, 192, 190, 192, 192, 192, 196, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 190, 190, 190,
+ 190, 190, 192, 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, 841, 189, 189, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189,
+ 189, 189, 189, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 190, 189, 189,
+ 189, 189, 841, 189, 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, 189, 189,
+ 189, 189, 192, 189, 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, 189, 189,
+ 189, 189, 189, 192, 842, 842, 842, 842,
+ 842, 842, 842, 842, 842, 193, 842, 193,
+ 193, 193, 842, 842, 842, 842, 842, 842,
+ 842, 842, 842, 842, 842, 842, 842, 842,
+ 842, 842, 842, 842, 193, 842, 842, 842,
+ 842, 842, 842, 842, 194, 842, 842, 842,
+ 842, 842, 842, 842, 842, 842, 842, 842,
+ 842, 842, 842, 842, 842, 842, 842, 842,
+ 842, 842, 842, 842, 842, 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, 842,
+ 195, 842, 842, 192, 842, 192, 192, 192,
+ 196, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 842,
+ 842, 842, 842, 842, 192, 843, 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, 841,
+ 842, 842, 842, 842, 842, 842, 842, 842,
+ 842, 842, 842, 842, 842, 842, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 190, 842, 842, 842, 842, 841, 842, 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, 842, 842, 842, 842, 192, 842, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 844, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 842, 842, 842, 842, 842, 192, 197,
+ 842, 846, 845, 845, 845, 846, 845, 845,
+ 845, 845, 847, 845, 847, 847, 847, 845,
+ 845, 845, 845, 845, 845, 845, 845, 845,
+ 845, 845, 845, 846, 845, 845, 845, 845,
+ 845, 847, 845, 845, 848, 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, 849, 845, 845,
+ 845, 845, 845, 845, 845, 850, 845, 845,
+ 845, 845, 845, 845, 845, 845, 845, 845,
+ 845, 845, 845, 845, 845, 845, 845, 845,
+ 845, 845, 845, 845, 851, 845, 847, 852,
+ 847, 847, 847, 852, 852, 852, 852, 852,
+ 852, 852, 852, 852, 852, 852, 852, 852,
+ 852, 852, 852, 852, 852, 847, 852, 853,
+ 854, 855, 856, 858, 857, 859, 860, 857,
+ 861, 863, 864, 864, 864, 863, 864, 864,
+ 864, 864, 865, 866, 865, 865, 865, 864,
+ 864, 864, 864, 864, 864, 864, 864, 864,
+ 864, 864, 864, 863, 864, 864, 864, 864,
+ 864, 865, 864, 864, 867, 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, 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, 864, 868, 864, 864,
+ 862, 864, 862, 862, 862, 862, 862, 862,
+ 862, 862, 869, 862, 862, 862, 862, 862,
+ 862, 862, 862, 870, 862, 862, 871, 862,
+ 872, 862, 862, 862, 864, 864, 864, 864,
+ 864, 862, 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, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 873, 873, 873, 873,
+ 873, 873, 873, 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, 873, 873, 873,
+ 873, 862, 873, 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, 873, 873, 873,
+ 873, 873, 862, 865, 874, 865, 865, 865,
+ 874, 874, 874, 874, 874, 874, 874, 874,
+ 874, 874, 874, 874, 874, 874, 874, 874,
+ 874, 874, 865, 874, 875, 876, 877, 878,
+ 879, 881, 880, 882, 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, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 883, 883,
+ 883, 883, 883, 883, 883, 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, 883,
+ 883, 883, 883, 862, 883, 862, 862, 862,
+ 862, 862, 884, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 883,
+ 883, 883, 883, 883, 862, 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, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 883,
+ 883, 883, 883, 883, 883, 883, 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,
+ 883, 883, 883, 883, 862, 883, 862, 862,
+ 862, 862, 885, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 883, 883, 883, 883, 883, 862, 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, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 883, 883, 883, 883, 883, 883, 883, 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, 883, 883, 883, 883, 862, 883, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 886, 862, 862, 862, 862, 862, 862,
+ 862, 883, 883, 883, 883, 883, 862, 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, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 883, 883, 883, 883, 883, 883, 883,
+ 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, 883, 883, 883, 883, 862, 883,
+ 862, 862, 887, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 883, 883, 883, 883, 883, 862,
+ 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,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 883, 883, 883, 883, 883, 883,
+ 883, 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, 883, 883, 883, 883, 862,
+ 883, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 888, 862, 862,
+ 862, 862, 862, 883, 883, 883, 883, 883,
+ 862, 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, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 883, 883, 883, 883, 883,
+ 883, 883, 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, 883, 883, 883, 883,
+ 862, 883, 862, 862, 862, 862, 884, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 883, 883, 883, 883,
+ 883, 862, 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, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 883, 883, 883, 883,
+ 883, 883, 883, 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, 883, 883, 883,
+ 883, 862, 883, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 889, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 883, 883, 883,
+ 883, 883, 862, 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, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 883, 883, 883,
+ 883, 883, 883, 883, 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, 883, 883,
+ 883, 883, 862, 883, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 890,
+ 862, 862, 862, 862, 862, 862, 862, 891,
+ 862, 862, 862, 862, 862, 862, 883, 883,
+ 883, 883, 883, 862, 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, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 883, 883,
+ 883, 883, 883, 883, 883, 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, 883,
+ 883, 883, 883, 862, 883, 862, 862, 862,
+ 862, 892, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 883,
+ 883, 883, 883, 883, 862, 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, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 883,
+ 883, 883, 883, 883, 883, 883, 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,
+ 883, 883, 883, 883, 862, 883, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 893, 862, 862, 862, 862, 862, 862, 862,
+ 883, 883, 883, 883, 883, 862, 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, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 883, 883, 883, 883, 883, 883, 883, 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, 883, 883, 883, 883, 862, 883, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 884, 862, 862, 862, 862, 862, 862,
+ 862, 883, 883, 883, 883, 883, 862, 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, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 883, 883, 883, 883, 883, 883, 883,
+ 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, 883, 883, 883, 883, 862, 883,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 894, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 883, 883, 883, 883, 883, 862,
+ 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,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 883, 883, 883, 883, 883, 883,
+ 883, 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, 883, 883, 883, 883, 862,
+ 883, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 884, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 883, 883, 883, 883, 883,
+ 862, 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, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 883, 883, 883, 883, 883,
+ 883, 883, 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, 883, 883, 883, 883,
+ 862, 883, 862, 862, 862, 862, 862, 862,
+ 862, 895, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 883, 883, 883, 883,
+ 883, 862, 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, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 883, 883, 883, 883,
+ 883, 883, 883, 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, 883, 883, 883,
+ 883, 862, 883, 862, 862, 862, 862, 862,
+ 862, 862, 862, 896, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 883, 883, 883,
+ 883, 883, 862, 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, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 883, 883, 883,
+ 883, 883, 883, 883, 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, 883, 883,
+ 883, 883, 862, 883, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 862, 888,
+ 862, 862, 862, 862, 862, 862, 862, 862,
+ 862, 862, 862, 862, 862, 862, 883, 883,
+ 883, 883, 883, 862, 898, 221, 221, 221,
+ 898, 221, 221, 221, 221, 899, 900, 899,
+ 899, 899, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 898, 221,
+ 221, 221, 221, 221, 899, 901, 221, 902,
+ 221, 903, 904, 221, 905, 221, 906, 907,
+ 221, 908, 909, 910, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 911, 221,
+ 912, 913, 914, 915, 221, 916, 917, 916,
+ 916, 918, 916, 916, 916, 916, 916, 916,
+ 916, 916, 916, 916, 916, 916, 916, 916,
+ 916, 916, 916, 916, 916, 916, 916, 919,
+ 920, 221, 921, 922, 221, 923, 924, 925,
+ 926, 927, 928, 897, 897, 929, 897, 897,
+ 897, 930, 931, 932, 897, 897, 933, 934,
+ 935, 936, 897, 937, 897, 938, 897, 939,
+ 940, 221, 921, 221, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 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,
+ 941, 943, 941, 941, 897, 941, 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,
+ 941, 941, 941, 941, 941, 897, 945, 944,
+ 944, 946, 944, 947, 949, 950, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 951, 948, 953,
+ 952, 954, 955, 956, 899, 957, 899, 899,
+ 899, 957, 957, 957, 957, 957, 957, 957,
+ 957, 957, 957, 957, 957, 957, 957, 957,
+ 957, 957, 957, 899, 957, 959, 958, 961,
+ 962, 961, 961, 961, 960, 960, 960, 960,
+ 960, 960, 960, 960, 960, 960, 960, 960,
+ 960, 960, 960, 960, 960, 960, 961, 960,
+ 221, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 221, 963, 964, 965, 966, 967, 969,
+ 969, 969, 969, 969, 969, 969, 969, 969,
+ 969, 969, 969, 969, 969, 969, 969, 969,
+ 969, 969, 969, 969, 969, 969, 969, 969,
+ 969, 969, 969, 969, 969, 969, 969, 969,
+ 969, 969, 969, 969, 969, 969, 969, 969,
+ 969, 969, 969, 969, 969, 969, 969, 968,
+ 968, 968, 968, 968, 968, 968, 968, 968,
+ 968, 969, 969, 969, 969, 969, 969, 969,
+ 970, 970, 970, 970, 970, 970, 970, 970,
+ 970, 970, 970, 970, 970, 970, 970, 970,
+ 970, 970, 970, 970, 970, 970, 970, 970,
+ 970, 970, 969, 969, 969, 969, 969, 969,
+ 970, 970, 970, 970, 970, 970, 970, 970,
+ 970, 970, 970, 970, 970, 970, 970, 970,
+ 970, 970, 970, 970, 970, 970, 970, 970,
+ 970, 970, 969, 969, 969, 969, 969, 968,
+ 972, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 221,
+ 971, 973, 975, 974, 974, 974, 974, 974,
+ 974, 974, 974, 974, 974, 974, 974, 974,
+ 974, 974, 974, 974, 974, 221, 974, 221,
+ 211, 222, 223, 222, 222, 222, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 222, 971, 971, 224, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 225, 971, 971, 971, 221, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 226, 971, 239, 240,
+ 239, 239, 239, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 239, 238, 238,
+ 241, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 242, 242, 242,
+ 242, 242, 242, 242, 242, 242, 242, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 243, 238, 222, 223, 222, 222, 222,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 222, 971, 971, 224, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 225, 225, 225, 225, 225, 225,
+ 225, 225, 225, 225, 971, 971, 971, 221,
+ 221, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 226, 971,
+ 977, 963, 979, 978, 981, 980, 963, 982,
+ 982, 982, 963, 982, 982, 982, 982, 982,
+ 982, 982, 982, 982, 982, 982, 982, 982,
+ 982, 982, 982, 982, 982, 982, 982, 982,
+ 963, 982, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 984, 985, 963, 986, 247,
+ 987, 985, 963, 963, 988, 989, 963, 989,
+ 963, 247, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 990, 963, 991, 992,
+ 993, 963, 994, 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, 995, 963, 963,
+ 247, 983, 247, 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, 963, 996, 963,
+ 997, 963, 983, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 999, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 983, 983, 983, 983, 983,
+ 983, 983, 983, 983, 983, 998, 998, 998,
+ 1000, 998, 999, 998, 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, 998, 998,
+ 998, 998, 983, 998, 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, 998, 998,
+ 998, 998, 998, 983, 1002, 1001, 1003, 1005,
+ 1006, 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, 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, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1007, 1004, 1009, 1010, 1008, 1011, 1012, 1013,
+ 1014, 247, 998, 998, 1015, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 247, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 998, 998, 998, 998,
+ 998, 998, 998, 998, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 998, 998,
+ 998, 998, 998, 998, 998, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 998,
+ 998, 998, 998, 246, 998, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 998,
+ 998, 998, 998, 998, 246, 249, 249, 249,
+ 249, 249, 249, 249, 249, 249, 249, 998,
+ 1016, 998, 247, 998, 247, 998, 247, 1017,
+ 998, 247, 998, 247, 998, 247, 247, 998,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+ 1020, 1020, 1018, 1018, 1018, 1018, 1018, 1018,
+ 1021, 1019, 1019, 1019, 1019, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1018, 1018, 1018, 1018, 1019,
+ 1018, 1019, 1019, 1019, 1019, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1018, 1018, 1018, 1018, 1018,
+ 1019, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
+ 1023, 1023, 1023, 1022, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1026, 1026, 1026, 1026,
+ 1026, 1026, 1026, 1026, 1026, 1026, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1025, 1025, 1025,
+ 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
+ 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
+ 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1024,
+ 1024, 1024, 1024, 1025, 1024, 1025, 1025, 1025,
+ 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
+ 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
+ 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1024,
+ 1024, 1024, 1024, 1024, 1025, 1016, 998, 1015,
+ 998, 1027, 1028, 963, 1029, 262, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 263, 252, 264,
+ 253, 253, 253, 253, 253, 253, 253, 253,
+ 253, 253, 253, 253, 253, 253, 253, 253,
+ 253, 253, 253, 253, 253, 253, 253, 253,
+ 253, 253, 253, 253, 263, 253, 263, 266,
+ 221, 963, 921, 221, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 221, 963, 221, 972, 963,
+ 1033, 1032, 1032, 1032, 1033, 1032, 1032, 1032,
+ 1032, 1034, 1035, 1034, 1034, 1034, 1032, 1032,
+ 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032,
+ 1032, 1032, 1033, 1032, 1032, 1032, 1032, 1032,
+ 1034, 1032, 1032, 1032, 1032, 1032, 1032, 1032,
+ 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032,
+ 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032,
+ 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032,
+ 1032, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
+ 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
+ 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
+ 1036, 1036, 1036, 1032, 1037, 1032, 1032, 1036,
+ 1032, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
+ 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
+ 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
+ 1036, 1036, 1036, 1032, 1038, 1038, 1038, 1038,
+ 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+ 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+ 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+ 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+ 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+ 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+ 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+ 1038, 1038, 1038, 1038, 1038, 1038, 1039, 1039,
+ 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
+ 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
+ 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
+ 1038, 1038, 1038, 1038, 1039, 1038, 1039, 1039,
+ 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
+ 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
+ 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
+ 1038, 1038, 1038, 1038, 1038, 1039, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1041, 1041,
+ 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041,
+ 1040, 1040, 1040, 1040, 1040, 1040, 1040, 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, 1040, 1040, 1040, 1040, 1041, 1040, 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, 1040, 1040, 1040, 1040, 1040, 1041, 1044,
+ 1043, 1043, 1043, 1044, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1044, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1045,
+ 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1046, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1047, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1048, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1049, 1043, 1043, 1050,
+ 1043, 1051, 1052, 1054, 1054, 1054, 1054, 1054,
+ 1054, 1054, 1054, 1053, 1055, 1055, 1055, 1055,
+ 1055, 1055, 1055, 1055, 1053, 1053, 1056, 1056,
+ 290, 290, 290, 1056, 290, 290, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 1056, 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, 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, 1057, 290, 1058, 1059, 1060,
+ 1060, 290, 290, 290, 1060, 290, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 290, 1060, 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,
+ 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, 1061, 290, 289, 1060,
+ 1062, 1063, 1064, 1064, 275, 275, 275, 1064,
+ 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 275, 1064, 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, 276, 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, 1065,
+ 275, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
+ 1066, 1066, 1066, 1064, 1064, 1064, 1064, 1064,
+ 1064, 1064, 1066, 1066, 1066, 1066, 1066, 1066,
+ 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
+ 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
+ 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
+ 1064, 1064, 1066, 1066, 1066, 1066, 1066, 1066,
+ 1064, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
+ 1068, 1068, 1068, 1067, 1067, 1067, 1067, 1067,
+ 1067, 1067, 1068, 1068, 1068, 1068, 1068, 1068,
+ 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
+ 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
+ 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
+ 1067, 1067, 1068, 1068, 1068, 1068, 1068, 1068,
+ 1067, 1067, 1069, 1069, 1069, 1069, 1069, 1069,
+ 1069, 1069, 1069, 1069, 1060, 1060, 1060, 1060,
+ 1060, 1060, 1060, 1069, 1069, 1069, 1069, 1069,
+ 1069, 1060, 1060, 1060, 1060, 1060, 1060, 1060,
+ 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060,
+ 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060,
+ 1060, 1060, 1060, 1069, 1069, 1069, 1069, 1069,
+ 1069, 1060, 1071, 1071, 1071, 1071, 1071, 1071,
+ 1071, 1071, 1071, 1071, 1070, 1070, 1070, 1070,
+ 1070, 1070, 1070, 1071, 1071, 1071, 1071, 1071,
+ 1071, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
+ 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
+ 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
+ 1070, 1070, 1070, 1071, 1071, 1071, 1071, 1071,
+ 1071, 1070, 1070, 1060, 268, 268, 268, 1060,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 1060, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 1072, 268, 1056, 275, 275, 275, 1056, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 1056, 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, 276, 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, 277, 275,
+ 1056, 1073, 1073, 1073, 1056, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1056, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1074, 1073, 1075, 1076,
+ 1076, 1073, 1073, 1073, 1076, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1076, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1077, 1073, 1078, 1078,
+ 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078,
+ 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1078,
+ 1078, 1078, 1078, 1078, 1078, 1076, 1076, 1076,
+ 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
+ 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
+ 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1078,
+ 1078, 1078, 1078, 1078, 1078, 1076, 1080, 1080,
+ 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+ 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1080,
+ 1080, 1080, 1080, 1080, 1080, 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, 1080,
+ 1080, 1080, 1080, 1080, 1080, 1079, 1079, 1076,
+ 268, 268, 268, 1076, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 1076, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 1072, 268, 1081, 1076,
+ 1076, 275, 275, 275, 1076, 275, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 1076, 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, 276,
+ 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, 277, 275, 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, 1082,
+ 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082,
+ 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082,
+ 1082, 1084, 1082, 1085, 1085, 1085, 1085, 1085,
+ 1085, 1085, 1085, 1085, 1085, 1082, 1082, 1082,
+ 1082, 1082, 1082, 1082, 1085, 1085, 1085, 1085,
+ 1085, 1085, 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, 1085, 1085, 1085, 1085,
+ 1085, 1085, 1082, 1086, 1086, 1086, 1086, 1086,
+ 1086, 1086, 1086, 1086, 1086, 1082, 1082, 1082,
+ 1082, 1082, 1082, 1082, 1086, 1086, 1086, 1086,
+ 1086, 1086, 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, 1086, 1086, 1086, 1086,
+ 1086, 1086, 1082, 1087, 1087, 1087, 1087, 1087,
+ 1087, 1087, 1087, 1087, 1087, 1082, 1082, 1082,
+ 1082, 1082, 1082, 1082, 1087, 1087, 1087, 1087,
+ 1087, 1087, 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, 1087, 1087, 1087, 1087,
+ 1087, 1087, 1082, 1088, 1091, 1090, 1090, 1090,
+ 1091, 1090, 1090, 1090, 1090, 1092, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1091, 1090,
+ 1090, 1090, 1090, 1090, 1092, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1093, 1093, 1093, 1093,
+ 1093, 1093, 1093, 1093, 1093, 1093, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1093, 1093, 1093,
+ 1093, 1093, 1093, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1093, 1093, 1093,
+ 1093, 1093, 1093, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1094, 1090, 1091, 1090, 1090, 1090, 1091,
+ 1090, 1090, 1090, 1090, 1089, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1091, 1090, 1090,
+ 1090, 1090, 1090, 1089, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1096, 1090, 1089, 1091, 1095, 1095, 1095, 1091,
+ 1095, 1095, 1095, 1095, 1089, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1091, 1095, 1095,
+ 1095, 1095, 1095, 1089, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1089, 1095, 1097, 1091, 1098, 1098, 1098, 1091,
+ 1098, 1098, 1098, 1098, 1092, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1091, 1098, 1098,
+ 1098, 1098, 1098, 1092, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1099, 1099, 1099, 1099, 1099,
+ 1099, 1099, 1099, 1099, 1099, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1099, 1099, 1099, 1099,
+ 1099, 1099, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1099, 1099, 1099, 1099,
+ 1099, 1099, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1089, 1098, 1091, 1098, 1098, 1098, 1091, 1098,
+ 1098, 1098, 1098, 1089, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1091, 1098, 1098, 1098,
+ 1098, 1098, 1089, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1095, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1095, 1095, 1095, 1095, 1095,
+ 1095, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1091,
+ 1098, 1091, 1098, 1098, 1098, 1091, 1098, 1098,
+ 1098, 1098, 1100, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1091, 1098, 1098, 1098, 1098,
+ 1098, 1100, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1101, 1101, 1101, 1101, 1101, 1101, 1101,
+ 1101, 1101, 1101, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1101, 1101, 1101, 1101, 1101, 1101,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1101, 1101, 1101, 1101, 1101, 1101,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1102, 1098,
+ 1091, 1098, 1098, 1098, 1091, 1098, 1098, 1098,
+ 1098, 1100, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1091, 1098, 1098, 1098, 1098, 1098,
+ 1100, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+ 1099, 1099, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1099, 1099, 1099, 1099, 1099, 1099, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1099, 1099, 1099, 1099, 1099, 1099, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1102, 1098, 1103,
+ 1091, 1098, 1098, 1098, 1091, 1098, 1098, 1098,
+ 1098, 1100, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1091, 1098, 1098, 1098, 1098, 1098,
+ 1100, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
+ 1104, 1104, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1104, 1104, 1104, 1104, 1104, 1104, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1104, 1104, 1104, 1104, 1104, 1104, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1102, 1098, 1091,
+ 1098, 1098, 1098, 1091, 1098, 1098, 1098, 1098,
+ 1100, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1091, 1098, 1098, 1098, 1098, 1098, 1100,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1105,
+ 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
+ 1105, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1105, 1105, 1105, 1105, 1105, 1105, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1105, 1105, 1105, 1105, 1105, 1105, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1102, 1098, 1091, 1098,
+ 1098, 1098, 1091, 1098, 1098, 1098, 1098, 1100,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1091, 1098, 1098, 1098, 1098, 1098, 1100, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1106, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1106,
+ 1106, 1106, 1106, 1106, 1106, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1102, 1098, 1091, 1098, 1098,
+ 1098, 1091, 1098, 1098, 1098, 1098, 1100, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1091,
+ 1098, 1098, 1098, 1098, 1098, 1100, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1107, 1107, 1107,
+ 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1107, 1107,
+ 1107, 1107, 1107, 1107, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1107, 1107,
+ 1107, 1107, 1107, 1107, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1102, 1098, 1091, 1098, 1098, 1098,
+ 1091, 1098, 1098, 1098, 1098, 1100, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1091, 1098,
+ 1098, 1098, 1098, 1098, 1100, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1108, 1108, 1108, 1108,
+ 1108, 1108, 1108, 1108, 1108, 1108, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1108, 1108, 1108,
+ 1108, 1108, 1108, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1108, 1108, 1108,
+ 1108, 1108, 1108, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1102, 1098, 1091, 1098, 1098, 1098, 1091,
+ 1098, 1098, 1098, 1098, 1089, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1091, 1098, 1098,
+ 1098, 1098, 1098, 1089, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1108, 1108, 1108, 1108, 1108,
+ 1108, 1108, 1108, 1108, 1108, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1108, 1108, 1108, 1108,
+ 1108, 1108, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1108, 1108, 1108, 1108,
+ 1108, 1108, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1089, 1098, 1091, 1098, 1098, 1098, 1091, 1098,
+ 1098, 1098, 1098, 1109, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1091, 1098, 1098, 1098,
+ 1098, 1098, 1109, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1110, 1110, 1110, 1110, 1110, 1110,
+ 1110, 1110, 1110, 1110, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1110, 1110, 1110, 1110, 1110,
+ 1110, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1110, 1110, 1110, 1110, 1110,
+ 1110, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1102,
+ 1098, 1091, 1098, 1098, 1098, 1091, 1098, 1098,
+ 1098, 1098, 1109, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1091, 1098, 1098, 1098, 1098,
+ 1098, 1109, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1111, 1111, 1111, 1111, 1111, 1111, 1111,
+ 1111, 1111, 1111, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1111, 1111, 1111, 1111, 1111, 1111,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1111, 1111, 1111, 1111, 1111, 1111,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1102, 1098,
+ 1091, 1098, 1098, 1098, 1091, 1098, 1098, 1098,
+ 1098, 1109, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1091, 1098, 1098, 1098, 1098, 1098,
+ 1109, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
+ 1112, 1112, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1112, 1112, 1112, 1112, 1112, 1112, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1112, 1112, 1112, 1112, 1112, 1112, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1089, 1098, 1091,
+ 1098, 1098, 1098, 1091, 1098, 1098, 1098, 1098,
+ 1109, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1091, 1098, 1098, 1098, 1098, 1098, 1109,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1089, 1098, 1091, 1098,
+ 1098, 1098, 1091, 1098, 1098, 1098, 1098, 1109,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1091, 1098, 1098, 1098, 1098, 1098, 1109, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1114, 1114,
+ 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1114,
+ 1114, 1114, 1114, 1114, 1114, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1114,
+ 1114, 1114, 1114, 1114, 1114, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1089, 1098, 1091, 1098, 1098,
+ 1098, 1091, 1098, 1098, 1098, 1098, 1109, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1091,
+ 1098, 1098, 1098, 1098, 1098, 1109, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1089, 1098, 1091, 1098, 1098, 1098,
+ 1091, 1098, 1098, 1098, 1098, 1109, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1091, 1098,
+ 1098, 1098, 1098, 1098, 1109, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1116, 1116, 1116, 1116,
+ 1116, 1116, 1116, 1116, 1116, 1116, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1116, 1116, 1116,
+ 1116, 1116, 1116, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1116, 1116, 1116,
+ 1116, 1116, 1116, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1089, 1098, 1091, 1098, 1098, 1098, 1091,
+ 1098, 1098, 1098, 1098, 1109, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1091, 1098, 1098,
+ 1098, 1098, 1098, 1109, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1108, 1108, 1108, 1108, 1108,
+ 1108, 1108, 1108, 1108, 1108, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1108, 1108, 1108, 1108,
+ 1108, 1108, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1108, 1108, 1108, 1108,
+ 1108, 1108, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1089, 1098, 1091, 1098, 1098, 1098, 1091, 1098,
+ 1098, 1098, 1098, 1109, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1091, 1098, 1098, 1098,
+ 1098, 1098, 1109, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1117, 1117, 1117, 1117, 1117, 1117,
+ 1117, 1117, 1117, 1117, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1117, 1117, 1117, 1117, 1117,
+ 1117, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1117, 1117, 1117, 1117, 1117,
+ 1117, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1102,
+ 1098, 1091, 1098, 1098, 1098, 1091, 1098, 1098,
+ 1098, 1098, 1109, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1091, 1098, 1098, 1098, 1098,
+ 1098, 1109, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
+ 1118, 1118, 1118, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1118, 1118, 1118, 1118, 1118, 1118,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1118, 1118, 1118, 1118, 1118, 1118,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1102, 1098,
+ 1091, 1098, 1098, 1098, 1091, 1098, 1098, 1098,
+ 1098, 1109, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1091, 1098, 1098, 1098, 1098, 1098,
+ 1109, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
+ 1119, 1119, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1119, 1119, 1119, 1119, 1119, 1119, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1119, 1119, 1119, 1119, 1119, 1119, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1102, 1098, 1091,
+ 1098, 1098, 1098, 1091, 1098, 1098, 1098, 1098,
+ 1109, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1091, 1098, 1098, 1098, 1098, 1098, 1109,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1102, 1098, 1091, 1098,
+ 1098, 1098, 1091, 1098, 1098, 1098, 1098, 1109,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1091, 1098, 1098, 1098, 1098, 1098, 1109, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1108, 1108,
+ 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1108,
+ 1108, 1108, 1108, 1108, 1108, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1108,
+ 1108, 1108, 1108, 1108, 1108, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
+ 1098, 1098, 1098, 1102, 1098, 1121, 1122, 1124,
+ 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124,
+ 1124, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+ 1124, 1124, 1124, 1124, 1124, 1124, 1123, 1123,
+ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+ 1124, 1124, 1124, 1124, 1124, 1124, 1123, 1123,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 296, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 297, 211, 211, 298, 211, 296,
+ 211, 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, 211, 211, 211, 211, 295,
+ 211, 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, 211, 211, 211, 211, 211,
+ 295, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 296, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 297, 963, 963, 298, 963,
+ 296, 963, 295, 295, 295, 295, 1125, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 963, 963, 963, 963,
+ 295, 963, 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, 963, 963, 963, 963,
+ 963, 295, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 296, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 297, 963, 963, 298,
+ 963, 296, 963, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295,
+ 1126, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 963, 963, 963,
+ 963, 295, 963, 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, 963, 963, 963,
+ 963, 963, 295, 1127, 1128, 963, 958, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 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, 941, 943, 941, 941, 1129, 941,
+ 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, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 897, 897, 897, 897, 1130, 1131, 897,
+ 897, 897, 897, 897, 1132, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 941, 943, 941, 941, 897,
+ 941, 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, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1133,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 941, 943, 941, 941,
+ 897, 941, 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, 941, 941, 941, 941,
+ 941, 897, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 941, 942, 942, 942,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 296, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 941, 941, 298,
+ 941, 296, 941, 897, 897, 1134, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 941, 943, 941,
+ 941, 897, 941, 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, 941, 941, 941,
+ 941, 941, 897, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 941, 942, 942,
+ 942, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 296, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 297, 941, 941,
+ 298, 941, 296, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 1135, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 941, 943,
+ 941, 941, 897, 941, 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, 941, 941,
+ 941, 941, 941, 897, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 941, 942,
+ 942, 942, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 296, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 297, 941,
+ 941, 298, 941, 296, 941, 897, 897, 897,
+ 1136, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 941,
+ 943, 941, 941, 897, 941, 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, 941,
+ 941, 941, 941, 941, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 1137, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 941, 943, 941, 941, 897, 941, 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,
+ 941, 941, 941, 941, 941, 897, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 941, 942, 942, 942, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 296,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 297, 941, 941, 298, 941, 296, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 1138, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 941, 943, 941, 941, 897, 941, 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, 941, 941, 941, 941, 941, 897, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 897, 897, 897, 897, 897, 897, 1139, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 941, 943, 941, 941, 897, 941,
+ 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, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 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, 941, 943, 941, 941, 1140,
+ 941, 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, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 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, 941, 943, 941, 941,
+ 1141, 941, 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, 941, 941, 941, 941,
+ 941, 897, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 296, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 211, 211, 298,
+ 211, 296, 211, 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, 211, 211, 211,
+ 211, 897, 211, 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, 211, 211, 211,
+ 211, 211, 897, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 941, 942, 942,
+ 942, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 296, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 297, 941, 941,
+ 298, 941, 296, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 1142, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 941, 943,
+ 941, 941, 897, 941, 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, 941, 941,
+ 941, 941, 941, 897, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 941, 942,
+ 942, 942, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 296, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 297, 941,
+ 941, 298, 941, 296, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 1143, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 941,
+ 943, 941, 941, 897, 941, 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, 941,
+ 941, 941, 941, 941, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 897, 897,
+ 897, 897, 1139, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 941, 943, 941, 941, 897, 941, 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,
+ 941, 941, 941, 941, 941, 897, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 941, 942, 942, 942, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 296,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 297, 941, 941, 298, 941, 296, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1144,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 941, 943, 941, 941, 897, 941, 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, 941, 941, 941, 941, 941, 897, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 1143, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 941, 943, 941, 941, 897, 941,
+ 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, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 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, 941, 943, 941, 941, 897,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 1145, 897, 1146, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 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, 941, 943, 941, 941,
+ 897, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 1147, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 941, 941, 941, 941,
+ 941, 897, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 941, 942, 942, 942,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 296, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 941, 941, 298,
+ 941, 296, 941, 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, 941, 943, 941,
+ 941, 897, 941, 1148, 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, 941, 941, 941,
+ 941, 941, 897, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 941, 942, 942,
+ 942, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 296, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 297, 941, 941,
+ 298, 941, 296, 941, 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, 941, 943,
+ 941, 941, 897, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 1141, 897,
+ 897, 897, 897, 897, 897, 897, 941, 941,
+ 941, 941, 941, 897, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 941, 942,
+ 942, 942, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 296, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 297, 941,
+ 941, 298, 941, 296, 941, 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, 941,
+ 943, 941, 941, 897, 941, 897, 897, 897,
+ 1141, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 941,
+ 941, 941, 941, 941, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 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,
+ 941, 943, 941, 941, 897, 941, 897, 897,
+ 897, 897, 1149, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1150,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 941, 941, 941, 941, 941, 897, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 941, 942, 942, 942, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 296,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 297, 941, 941, 298, 941, 296, 941, 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, 941, 943, 941, 941, 897, 941, 897,
+ 897, 897, 897, 897, 897, 1151, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 941, 941, 941, 941, 941, 897, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 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, 941, 943, 941, 941, 897, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 1152, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 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, 941, 943, 941, 941, 897,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 1141, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 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, 941, 943, 941, 941,
+ 897, 941, 897, 897, 897, 897, 1153, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 941, 941, 941, 941,
+ 941, 897, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 941, 942, 942, 942,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 296, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 941, 941, 298,
+ 941, 296, 941, 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, 941, 943, 941,
+ 941, 897, 941, 1154, 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, 941, 941, 941,
+ 941, 941, 897, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 941, 942, 942,
+ 942, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 296, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 297, 941, 941,
+ 298, 941, 296, 941, 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, 941, 943,
+ 941, 941, 897, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 1141, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 941, 941,
+ 941, 941, 941, 897, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 941, 942,
+ 942, 942, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 296, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 297, 941,
+ 941, 298, 941, 296, 941, 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, 941,
+ 943, 941, 941, 897, 941, 1155, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 1156, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 941,
+ 941, 941, 941, 941, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 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,
+ 941, 943, 941, 941, 897, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 1157, 897, 897, 897, 897, 897, 897, 897,
+ 941, 941, 941, 941, 941, 897, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 941, 942, 942, 942, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 296,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 297, 941, 941, 298, 941, 296, 941, 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, 941, 943, 941, 941, 897, 941, 897,
+ 897, 897, 897, 1141, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 941, 941, 941, 941, 941, 897, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 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, 941, 943, 941, 941, 897, 941,
+ 1158, 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, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 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, 941, 943, 941, 941, 897,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 1148, 897, 897, 897, 897,
+ 897, 897, 897, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 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, 941, 943, 941, 941,
+ 897, 941, 897, 897, 897, 897, 1159, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 1141, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 941, 941, 941, 941,
+ 941, 897, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 941, 942, 942, 942,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 296, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 941, 941, 298,
+ 941, 296, 941, 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, 941, 943, 941,
+ 941, 897, 941, 897, 897, 897, 897, 897,
+ 1141, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 941, 941, 941,
+ 941, 941, 897, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 941, 942, 942,
+ 942, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 296, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 297, 941, 941,
+ 298, 941, 296, 941, 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, 941, 943,
+ 941, 941, 897, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1160,
+ 897, 1161, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 941, 941,
+ 941, 941, 941, 897, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 941, 942,
+ 942, 942, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 296, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 297, 941,
+ 941, 298, 941, 296, 941, 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, 941,
+ 943, 941, 941, 897, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1162,
+ 897, 897, 897, 897, 897, 897, 897, 941,
+ 941, 941, 941, 941, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 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,
+ 941, 943, 941, 941, 897, 941, 897, 897,
+ 897, 897, 1141, 897, 897, 897, 1159, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 941, 941, 941, 941, 941, 897, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 941, 942, 942, 942, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 296,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 297, 941, 941, 298, 941, 296, 941, 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, 941, 943, 941, 941, 897, 941, 897,
+ 897, 897, 1141, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 1163, 897, 897, 897, 897, 897, 897,
+ 897, 941, 941, 941, 941, 941, 897, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 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, 941, 943, 941, 941, 897, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 1164, 897, 897, 897,
+ 897, 897, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 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, 941, 943, 941, 941, 897,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 1157, 897, 897, 897, 897, 897,
+ 897, 897, 897, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 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, 941, 943, 941, 941,
+ 897, 941, 1165, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 932, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 941, 941, 941, 941,
+ 941, 897, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 941, 942, 942, 942,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 296, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 941, 941, 298,
+ 941, 296, 941, 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, 941, 943, 941,
+ 941, 897, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 1155, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 941, 941, 941,
+ 941, 941, 897, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 941, 942, 942,
+ 942, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 296, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 297, 941, 941,
+ 298, 941, 296, 941, 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, 941, 943,
+ 941, 941, 897, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 1141, 897, 897,
+ 897, 897, 897, 897, 897, 897, 941, 941,
+ 941, 941, 941, 897, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 941, 942,
+ 942, 942, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 296, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 297, 941,
+ 941, 298, 941, 296, 941, 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, 941,
+ 943, 941, 941, 897, 941, 897, 897, 897,
+ 897, 897, 1166, 897, 897, 897, 897, 897,
+ 897, 897, 1141, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 941,
+ 941, 941, 941, 941, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 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,
+ 941, 943, 941, 941, 897, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 1167, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 941, 941, 941, 941, 941, 897, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 941, 942, 942, 942, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 296,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 297, 941, 941, 298, 941, 296, 941, 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, 941, 943, 941, 941, 897, 941, 897,
+ 897, 897, 1168, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 941, 941, 941, 941, 941, 897, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 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, 941, 943, 941, 941, 897, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 1169, 897, 897, 897,
+ 897, 897, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 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, 941, 943, 941, 941, 897,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 1157, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 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, 941, 943, 941, 941,
+ 897, 941, 897, 897, 897, 897, 1170, 897,
+ 897, 897, 1171, 897, 897, 897, 897, 897,
+ 1172, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 941, 941, 941, 941,
+ 941, 897, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 941, 942, 942, 942,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 296, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 941, 941, 298,
+ 941, 296, 941, 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, 941, 943, 941,
+ 941, 897, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 1172, 897, 897, 941, 941, 941,
+ 941, 941, 897, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 941, 942, 942,
+ 942, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 296, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 297, 941, 941,
+ 298, 941, 296, 941, 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, 941, 943,
+ 941, 941, 897, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1141,
+ 897, 897, 897, 897, 897, 897, 941, 941,
+ 941, 941, 941, 897, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 941, 942,
+ 942, 942, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 296, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 297, 941,
+ 941, 298, 941, 296, 941, 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, 941,
+ 943, 941, 941, 897, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 1141, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 941,
+ 941, 941, 941, 941, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 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,
+ 941, 943, 941, 941, 897, 941, 897, 897,
+ 897, 897, 1173, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 941, 941, 941, 941, 941, 897, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 941, 942, 942, 942, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 296,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 297, 941, 941, 298, 941, 296, 941, 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, 941, 943, 941, 941, 897, 941, 897,
+ 897, 897, 1174, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 1175, 1176, 897, 897, 897, 897, 897,
+ 897, 941, 941, 941, 941, 941, 897, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 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, 941, 943, 941, 941, 897, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 1141, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 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, 941, 943, 941, 941, 897,
+ 941, 897, 897, 1177, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 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, 941, 943, 941, 941,
+ 897, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 1178, 897,
+ 897, 897, 897, 897, 941, 941, 941, 941,
+ 941, 897, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 941, 942, 942, 942,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 296, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 941, 941, 298,
+ 941, 296, 941, 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, 941, 943, 941,
+ 941, 897, 941, 897, 897, 897, 897, 1179,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 941, 941, 941,
+ 941, 941, 897, 1180, 1180, 1180, 1180, 1180,
+ 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
+ 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
+ 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
+ 1180, 1180, 1180, 1180, 1182, 1180, 1180, 1180,
+ 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
+ 1180, 1180, 1180, 1181, 1181, 1181, 1181, 1181,
+ 1181, 1181, 1181, 1181, 1181, 1183, 1180, 1180,
+ 1184, 1180, 1182, 1180, 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, 1180, 1180,
+ 1180, 1180, 1181, 1180, 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, 1180, 1180,
+ 1180, 1180, 1180, 1181, 949, 1185, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 948, 948, 948,
+ 948, 948, 948, 948, 948, 951, 948, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 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, 941, 943, 941, 941, 897, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 1186, 897, 897, 1187, 897, 897, 897,
+ 897, 897, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 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, 941, 943, 941, 941, 897,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 1141, 897, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 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, 941, 943, 941, 941,
+ 897, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 1152, 897, 897, 897, 897,
+ 897, 897, 897, 897, 941, 941, 941, 941,
+ 941, 897, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 941, 942, 942, 942,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 296, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 941, 941, 298,
+ 941, 296, 941, 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, 941, 943, 941,
+ 941, 897, 941, 897, 897, 897, 897, 1188,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1189,
+ 897, 897, 897, 897, 897, 941, 941, 941,
+ 941, 941, 897, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 941, 942, 942,
+ 942, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 296, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 297, 941, 941,
+ 298, 941, 296, 941, 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, 941, 943,
+ 941, 941, 897, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1159,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 941, 941,
+ 941, 941, 941, 897, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 941, 942,
+ 942, 942, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 296, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 297, 941,
+ 941, 298, 941, 296, 941, 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, 941,
+ 943, 941, 941, 897, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 1190, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 941,
+ 941, 941, 941, 941, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 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,
+ 941, 943, 941, 941, 897, 941, 897, 897,
+ 897, 897, 932, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 941, 941, 941, 941, 941, 897, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 941, 942, 942, 942, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 296,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 297, 941, 941, 298, 941, 296, 941, 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, 941, 943, 941, 941, 897, 941, 897,
+ 897, 897, 897, 897, 897, 897, 1191, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 1192, 897, 897, 897, 897, 897, 897, 897,
+ 897, 941, 941, 941, 941, 941, 897, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 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, 941, 943, 941, 941, 897, 941,
+ 897, 897, 897, 897, 1152, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 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, 941, 943, 941, 941, 897,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 1157, 897, 897,
+ 897, 897, 897, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 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, 941, 943, 941, 941,
+ 897, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1193,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 941, 941, 941, 941,
+ 941, 897, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 941, 942, 942, 942,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 296, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 941, 941, 298,
+ 941, 296, 941, 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, 941, 943, 941,
+ 941, 897, 941, 897, 897, 897, 1194, 897,
+ 897, 897, 897, 897, 897, 897, 1195, 897,
+ 897, 897, 897, 897, 897, 897, 1196, 897,
+ 897, 897, 897, 897, 897, 941, 941, 941,
+ 941, 941, 897, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 941, 942, 942,
+ 942, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 296, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 297, 941, 941,
+ 298, 941, 296, 941, 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, 941, 943,
+ 941, 941, 897, 941, 897, 897, 897, 897,
+ 1159, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 941, 941,
+ 941, 941, 941, 897, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 941, 942,
+ 942, 942, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 296, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 297, 941,
+ 941, 298, 941, 296, 941, 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, 941,
+ 943, 941, 941, 897, 941, 897, 897, 897,
+ 897, 1197, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 941,
+ 941, 941, 941, 941, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 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,
+ 941, 943, 941, 941, 897, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 1198, 897, 897, 897, 897, 897, 897, 897,
+ 941, 941, 941, 941, 941, 897, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 941, 942, 942, 942, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 296,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 297, 941, 941, 298, 941, 296, 941, 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, 941, 943, 941, 941, 897, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 1166, 897, 897, 897, 897, 897, 897,
+ 897, 941, 941, 941, 941, 941, 897, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 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, 941, 943, 941, 941, 897, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 1199, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 941, 941, 941, 941, 941, 897,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 941, 942, 942, 942, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 296, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 297, 941, 941, 298, 941, 296,
+ 941, 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, 941, 943, 941, 941, 897,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 1166, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 941, 941, 941, 941, 941,
+ 897, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 941, 942, 942, 942, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 942, 296, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 297, 941, 941, 298, 941,
+ 296, 941, 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, 941, 943, 941, 941,
+ 897, 941, 897, 897, 897, 897, 897, 897,
+ 897, 1200, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 941, 941, 941, 941,
+ 941, 897, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 941, 942, 942, 942,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 942, 296, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 297, 941, 941, 298,
+ 941, 296, 941, 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, 941, 943, 941,
+ 941, 897, 941, 897, 897, 897, 897, 1152,
+ 897, 897, 897, 1201, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 941, 941, 941,
+ 941, 941, 897, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 941, 942, 942,
+ 942, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 942, 296, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 297, 941, 941,
+ 298, 941, 296, 941, 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, 941, 943,
+ 941, 941, 897, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1202,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 941, 941,
+ 941, 941, 941, 897, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 941, 942,
+ 942, 942, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 942, 296, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 297, 941,
+ 941, 298, 941, 296, 941, 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, 941,
+ 943, 941, 941, 897, 941, 897, 897, 897,
+ 897, 1166, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 941,
+ 941, 941, 941, 941, 897, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 941,
+ 942, 942, 942, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 942, 296, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 297,
+ 941, 941, 298, 941, 296, 941, 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,
+ 941, 943, 941, 941, 897, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 1203, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 941, 941, 941, 941, 941, 897, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 941, 942, 942, 942, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 942, 296,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 297, 941, 941, 298, 941, 296, 941, 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, 941, 943, 941, 941, 897, 941, 897,
+ 897, 897, 897, 1204, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 941, 941, 941, 941, 941, 897, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 942, 941, 942, 942, 942, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 942,
+ 296, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 297, 941, 941, 298, 941, 296, 941,
+ 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, 941, 943, 941, 941, 897, 941,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 1146, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 941, 941, 941, 941, 941, 897,
+ 1205, 221, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 963, 963, 963, 963, 963, 963, 963, 963,
+ 1206, 963, 1208, 1207, 1207, 1207, 1208, 1207,
+ 1207, 1207, 1207, 1209, 1210, 1209, 1209, 1209,
+ 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ 1207, 1207, 1207, 1207, 1208, 1207, 1207, 1207,
+ 1207, 1207, 1209, 1207, 1207, 1211, 1207, 1207,
+ 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+ 1207, 1207, 1207, 1207, 1207, 1207, 1212, 1207,
+ 1209, 1213, 1209, 1209, 1209, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1209,
+ 1213, 1214, 1215, 1216, 1217, 1218, 1220, 1219,
+ 1221, 1223, 1224, 1224, 1224, 1223, 1224, 1224,
+ 1224, 1224, 1225, 1226, 1225, 1225, 1225, 1224,
+ 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224,
+ 1224, 1224, 1224, 1223, 1224, 1224, 1224, 1224,
+ 1224, 1225, 1224, 1227, 1228, 1224, 1224, 1224,
+ 1227, 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, 1222, 1222, 1222, 1222, 1222, 1222,
+ 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222,
+ 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222,
+ 1222, 1222, 1222, 1222, 1224, 1229, 1224, 1224,
+ 1222, 1224, 1222, 1222, 1222, 1222, 1222, 1222,
+ 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222,
+ 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222,
+ 1222, 1222, 1222, 1222, 1224, 1224, 1224, 1224,
+ 1224, 1222, 1230, 1230, 1230, 1230, 1230, 1230,
+ 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230,
+ 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230,
+ 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230,
+ 1230, 1230, 1230, 304, 1230, 1230, 1230, 1230,
+ 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230,
+ 1230, 1230, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 305, 1230, 1230, 1230,
+ 1230, 304, 1230, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 1230, 1230, 1230,
+ 1230, 303, 1230, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 1230, 1230, 1230,
+ 1230, 1230, 303, 1225, 1231, 1225, 1225, 1225,
+ 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231,
+ 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231,
+ 1231, 1231, 1225, 1231, 1232, 1233, 1234, 1235,
+ 1236, 1237, 1230, 1238, 1240, 1241, 1241, 1241,
+ 1240, 1241, 1241, 1241, 1241, 1242, 1243, 1242,
+ 1242, 1242, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1240, 1241,
+ 1241, 1241, 1241, 1241, 1242, 1244, 1245, 1246,
+ 1247, 1248, 1249, 1245, 1250, 1251, 1252, 1248,
+ 1253, 1254, 1255, 1248, 1256, 1257, 1257, 1257,
+ 1257, 1257, 1257, 1257, 1257, 1257, 1258, 1259,
+ 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1265,
+ 1265, 1267, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1268,
+ 1269, 1270, 1248, 1271, 1245, 1272, 1273, 1274,
+ 1275, 1276, 1277, 1239, 1239, 1278, 1239, 1239,
+ 1239, 1279, 1280, 1281, 1239, 1239, 1282, 1283,
+ 1284, 1285, 1239, 1286, 1239, 1287, 1239, 1288,
+ 1289, 1290, 1291, 1241, 1239, 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, 1292, 313,
+ 313, 313, 313, 313, 313, 313, 313, 313,
+ 313, 313, 313, 313, 313, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 313,
+ 313, 313, 313, 313, 1292, 313, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 313, 313, 313, 313, 1239, 313, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 313, 313, 313, 313, 313, 1239, 1294, 1293,
+ 1295, 1242, 1296, 1242, 1242, 1242, 1296, 1296,
+ 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296,
+ 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296,
+ 1242, 1296, 1297, 1299, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1299, 1298, 1300, 1301,
+ 1302, 1303, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1304, 1304, 308, 308, 1304, 308, 1304,
+ 308, 308, 1304, 1304, 308, 308, 308, 1305,
+ 308, 308, 1306, 1306, 1306, 1306, 1306, 1306,
+ 1306, 1306, 1306, 1306, 308, 308, 308, 308,
+ 308, 308, 308, 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, 1304, 308, 1304,
+ 1304, 325, 308, 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, 1304, 1304, 1304,
+ 308, 1304, 325, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 325, 325, 325, 325, 325,
+ 325, 325, 325, 325, 325, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 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, 1307, 1307,
+ 1307, 1307, 325, 1307, 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, 1307, 1307,
+ 1307, 1307, 1307, 325, 1306, 1306, 1306, 1306,
+ 1306, 1306, 1306, 1306, 1306, 1306, 1307, 1308,
+ 313, 1248, 1309, 1309, 1309, 1309, 1309, 1309,
+ 1309, 1310, 1309, 1309, 1309, 1309, 1309, 1309,
+ 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
+ 1308, 1309, 1311, 1312, 1248, 1313, 1313, 1313,
+ 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313,
+ 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1308,
+ 1313, 1308, 1314, 1309, 1316, 1315, 312, 312,
+ 312, 312, 312, 312, 312, 312, 312, 312,
+ 1315, 1318, 1317, 1319, 1317, 312, 312, 312,
+ 312, 312, 312, 312, 312, 312, 312, 1320,
+ 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+ 1320, 1320, 1321, 1320, 1320, 1320, 1320, 1320,
+ 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+ 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+ 1320, 1320, 1320, 1320, 1322, 1320, 1320, 1320,
+ 1320, 1320, 1321, 1320, 311, 311, 311, 311,
+ 311, 311, 311, 311, 311, 311, 1320, 1320,
+ 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+ 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+ 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+ 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+ 1320, 1320, 1320, 310, 1320, 1324, 1323, 1325,
+ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
+ 1325, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1326, 1323, 1327, 1328, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1329, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1330,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1331, 1323,
+ 1323, 1326, 1323, 1327, 1328, 1323, 1323, 1323,
+ 1332, 1323, 1323, 1323, 1323, 1323, 1329, 1323,
+ 1323, 1333, 1323, 1323, 1323, 1323, 1323, 1330,
+ 1323, 314, 314, 314, 314, 314, 314, 314,
+ 314, 314, 314, 1334, 1334, 1334, 1334, 1334,
+ 1334, 1334, 1334, 1334, 1334, 1334, 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,
+ 1336, 1334, 1334, 1334, 1334, 1334, 1335, 1334,
+ 1334, 1334, 1337, 1334, 1334, 1334, 1334, 1334,
+ 1334, 1334, 1334, 1338, 1334, 1339, 313, 1339,
+ 313, 313, 315, 315, 315, 315, 315, 315,
+ 315, 315, 315, 315, 313, 315, 315, 315,
+ 315, 315, 315, 315, 315, 315, 315, 1340,
+ 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340,
+ 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340,
+ 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340,
+ 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340,
+ 1340, 1340, 1340, 1340, 1339, 1340, 1340, 1340,
+ 1340, 1340, 1340, 1340, 1340, 1340, 1341, 1340,
+ 1343, 1342, 1344, 1346, 1345, 1345, 1345, 1347,
+ 1345, 1348, 1349, 1325, 1325, 1325, 1325, 1325,
+ 1325, 1325, 1325, 1325, 1325, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1323, 1331, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1332, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1333, 1323, 1350,
+ 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350,
+ 1350, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1351, 1323,
+ 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1332, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 1333, 1323, 1353, 1353, 1353, 1353, 1353,
+ 1353, 1353, 1353, 1353, 1353, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1354, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1355, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1356, 1352, 1353,
+ 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353,
+ 1353, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1357, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1355, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1356, 1352, 1355, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1356, 1352, 1359, 1358,
+ 1360, 1362, 1361, 1361, 1361, 1363, 1361, 1365,
+ 1364, 1366, 1367, 1369, 1369, 1368, 1368, 1368,
+ 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
+ 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
+ 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
+ 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
+ 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
+ 1368, 1368, 1370, 1368, 1368, 1368, 1368, 1368,
+ 1368, 1368, 1368, 1368, 1371, 1368, 1368, 1368,
+ 1368, 1368, 1368, 1368, 1368, 1372, 1368, 1373,
+ 1373, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1374, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1355, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1356, 1352, 1373, 1373, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1357, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1355, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1356, 1352, 1376,
+ 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376,
+ 1376, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
+ 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
+ 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
+ 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
+ 1375, 1375, 1375, 1375, 1375, 1375, 1377, 1375,
+ 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
+ 1378, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
+ 1375, 1379, 1375, 1381, 1381, 1381, 1381, 1381,
+ 1381, 1381, 1381, 1381, 1381, 1380, 1380, 1380,
+ 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
+ 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
+ 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
+ 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
+ 1380, 1380, 1382, 1380, 1380, 1380, 1380, 1380,
+ 1380, 1380, 1380, 1380, 1383, 1380, 1380, 1380,
+ 1380, 1380, 1380, 1380, 1380, 1384, 1380, 1386,
+ 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386,
+ 1386, 1385, 1385, 1385, 1385, 1385, 1385, 1385,
+ 1386, 1386, 1386, 1386, 1386, 1386, 1385, 1385,
+ 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385,
+ 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385,
+ 1385, 1385, 1385, 1385, 1385, 1385, 1387, 1385,
+ 1386, 1386, 1386, 1386, 1386, 1386, 1385, 1385,
+ 1388, 1385, 1385, 1385, 1385, 1385, 1385, 1385,
+ 1385, 1389, 1385, 1390, 1390, 1390, 1390, 1390,
+ 1390, 1390, 1390, 1390, 1390, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1390, 1390, 1390, 1390,
+ 1390, 1390, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1391, 1352, 1390, 1390, 1390, 1390,
+ 1390, 1390, 1352, 1352, 1355, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1356, 1352, 1390,
+ 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390,
+ 1390, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1390, 1390, 1390, 1390, 1390, 1390, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1357, 1352,
+ 1390, 1390, 1390, 1390, 1390, 1390, 1352, 1352,
+ 1355, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1356, 1352, 1393, 1392, 1394, 1394, 1394,
+ 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1392,
+ 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
+ 1392, 1392, 1395, 1392, 1392, 1392, 1392, 1392,
+ 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
+ 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
+ 1392, 1392, 1392, 1392, 1396, 1392, 1392, 1392,
+ 1392, 1392, 1395, 1392, 1392, 1392, 1397, 1392,
+ 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1398,
+ 1392, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+ 1399, 1399, 1399, 1392, 1392, 1392, 1392, 1392,
+ 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
+ 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
+ 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
+ 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
+ 1400, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
+ 1392, 1392, 1397, 1392, 1392, 1392, 1392, 1392,
+ 1392, 1392, 1392, 1398, 1392, 1401, 1352, 1402,
+ 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402,
+ 1402, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1403, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1404, 1352,
+ 1352, 1352, 1352, 1352, 1403, 1352, 1352, 1352,
+ 1355, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1356, 1352, 1402, 1402, 1402, 1402, 1402,
+ 1402, 1402, 1402, 1402, 1402, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1357, 1352, 1352, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1355, 1352, 1352, 1352,
+ 1352, 1352, 1352, 1352, 1352, 1356, 1352, 1310,
+ 1317, 1248, 1405, 1309, 1299, 1309, 1406, 1407,
+ 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
+ 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
+ 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
+ 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
+ 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
+ 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
+ 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
+ 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1299,
+ 1317, 1299, 1309, 1299, 1248, 1309, 1304, 1304,
+ 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1304, 1304, 1304, 1304, 1304, 325, 325,
+ 325, 325, 325, 325, 325, 325, 325, 325,
+ 1304, 1304, 1304, 1304, 1304, 1304, 1408, 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, 1304, 1304, 1304, 1304, 325, 1304, 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, 1304, 1304, 1304, 1304, 1304, 325, 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,
+ 1292, 313, 313, 313, 313, 313, 313, 313,
+ 313, 313, 313, 313, 313, 313, 313, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1409, 313, 313, 313, 313, 1292, 313,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 313, 313, 313, 313, 1265, 313,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 313, 313, 313, 313, 313, 1265,
+ 1410, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1292, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1409, 1411, 1411, 1411, 1411,
+ 1292, 1411, 1265, 1265, 1265, 1265, 1412, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1411, 1411, 1411, 1411,
+ 1265, 1411, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1411, 1411, 1411, 1411,
+ 1411, 1265, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1292, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1409, 1411, 1411, 1411,
+ 1411, 1292, 1411, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1413, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1411, 1411, 1411,
+ 1411, 1265, 1411, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1411, 1411, 1411,
+ 1411, 1411, 1265, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1292, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1409, 1411, 1411,
+ 1411, 1411, 1292, 1411, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1414, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1411, 1411,
+ 1411, 1411, 1265, 1411, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1411, 1411,
+ 1411, 1411, 1411, 1265, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1292, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1409, 1411,
+ 1411, 1411, 1411, 1292, 1411, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1415, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1411,
+ 1411, 1411, 1411, 1265, 1411, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1411,
+ 1411, 1411, 1411, 1411, 1265, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1292, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1409,
+ 1411, 1411, 1411, 1411, 1292, 1411, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1416, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1411, 1411, 1411, 1411, 1265, 1411, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1411, 1411, 1411, 1411, 1411, 1265, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1292,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+ 1411, 1411, 1411, 1411, 1411, 1411, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1409, 1411, 1411, 1411, 1411, 1292, 1411, 1265,
+ 1265, 1265, 1415, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1411, 1411, 1411, 1411, 1265, 1411, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
+ 1265, 1411, 1411, 1411, 1411, 1411, 1265, 1417,
+ 1419, 1418, 1420, 1421, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1423, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1424, 1425, 1239, 1239, 1239, 1239,
+ 1239, 1426, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1427, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1428, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1429,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1430, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1431, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1432, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1433, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1434, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1435, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1436, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1437, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1438, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1439, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1440, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1441, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1437, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1442, 1239, 1443, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1444, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1445, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1446, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1239, 1239, 1239, 1447, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1239,
+ 1448, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1449, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1450, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1451, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1447, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1452, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1453, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1454, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1455, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1456, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1457, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1239, 1447, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1458, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1459, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1460, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+ 1461, 327, 328, 327, 327, 327, 1461, 1461,
+ 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+ 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+ 327, 1292, 1461, 329, 1461, 1461, 1461, 1461,
+ 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1461, 1461, 330, 1461, 1461, 1292,
+ 1461, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1461, 331, 1461, 1461, 1239,
+ 1461, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1461, 1461, 1461, 1461, 1461,
+ 1239, 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, 346, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 349, 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, 348, 343, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1463, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1464, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1465, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466,
+ 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466,
+ 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466,
+ 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466,
+ 1466, 1292, 1466, 1466, 1466, 1466, 1466, 1466,
+ 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1466, 1466, 1466, 1466, 1466, 1292,
+ 1466, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1466, 1466, 1466, 1466, 1239,
+ 1466, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1467, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1466, 1466, 1466, 1466, 1466,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1468,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1239, 1239, 1239, 1239, 1469,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1470,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1471, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1472, 1239, 1473, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1474, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1447, 1239, 1239, 1239,
+ 1475, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1447, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1440, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1476, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1477,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1457, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1478, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1281, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1479, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1480, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1440, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1447, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1239, 1481,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1447,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1482, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1483,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1484, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1457, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1485, 1239, 1239, 1239, 1486,
+ 1239, 1239, 1239, 1239, 1239, 1487, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1488,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1454, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1440, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1489, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1239,
+ 1490, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1491, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1492,
+ 1493, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1440, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1494, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1495, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1239, 1239, 1239, 1239, 1481, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1496, 1239, 1239, 1497, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1440, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1498, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1454, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1499, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1500, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1501, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1440, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1502, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1503, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1489, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1504, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1505, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1239, 1451, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1480, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1506, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1507, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1508, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1509, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1239, 1239, 1239, 1239, 1510, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1239, 1446,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1239, 1239, 1239, 1239, 1511,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1512, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1481,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1513, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1481, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1239, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1514,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1239,
+ 1422, 1239, 1239, 1239, 1239, 1451, 1239, 1239,
+ 1239, 1515, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1292, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1239, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1516, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1292, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1239, 1422, 1239, 1239, 1239, 1239, 1481,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1292, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1239, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1517, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1292, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1239, 1422, 1239, 1239, 1239,
+ 1239, 1518, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1292, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1422,
+ 1422, 1422, 1422, 1422, 1292, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1239, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1519, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1239, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1292,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+ 1422, 1422, 1422, 1422, 1422, 1422, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1422, 1422, 1422, 1422, 1422, 1292, 1422, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1239, 1422, 1239,
+ 1239, 1239, 1489, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+ 1239, 1422, 1422, 1422, 1422, 1422, 1239, 1520,
+ 1308, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+ 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1248,
+ 1298, 1521, 1523, 1522, 1523, 1523, 1523, 1522,
+ 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+ 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+ 1522, 1523, 1522, 1522, 1524, 1522, 1522, 1525,
+ 1522, 1522, 1522, 1522, 1522, 1522, 1522, 357,
+ 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+ 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+ 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+ 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+ 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+ 1522, 1522, 1522, 1522, 1522, 1526, 1522, 353,
+ 354, 353, 353, 353, 1527, 1527, 1527, 1527,
+ 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
+ 1527, 1527, 1527, 1527, 1527, 1527, 353, 1527,
+ 1527, 355, 1527, 1527, 356, 1527, 1527, 1527,
+ 1527, 1527, 1527, 1527, 357, 1527, 1527, 1527,
+ 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
+ 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
+ 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
+ 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
+ 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527,
+ 1527, 1527, 358, 1527, 360, 1528, 360, 360,
+ 360, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+ 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+ 1528, 1528, 1528, 360, 1528, 1528, 355, 1528,
+ 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+ 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+ 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+ 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+ 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+ 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+ 1528, 1528, 1528, 1528, 1528, 1528, 1528, 358,
+ 1528, 1530, 1529, 1532, 1531, 363, 362, 368,
+ 1527, 366, 1527, 1534, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1535, 1533,
+ 1534, 1533, 1534, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1537, 1533, 1534,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1538, 1533, 1534, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+ 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1539,
+ 1533, 1541, 1539, 0
+]
+
+class << self
+ attr_accessor :_lex_trans_targs
+ private :_lex_trans_targs, :_lex_trans_targs=
+end
+self._lex_trans_targs = [
+ 186, 2, 3, 4, 192, 6, 7, 8,
+ 9, 10, 186, 186, 195, 198, 195, 12,
+ 199, 200, 14, 195, 207, 208, 211, 212,
+ 224, 221, 213, 214, 215, 19, 216, 217,
+ 218, 226, 228, 229, 233, 234, 235, 230,
+ 25, 18, 209, 210, 27, 258, 259, 261,
+ 263, 261, 30, 264, 265, 32, 261, 272,
+ 273, 276, 277, 289, 286, 278, 279, 280,
+ 37, 281, 282, 283, 291, 293, 294, 298,
+ 299, 300, 295, 43, 36, 274, 275, 45,
+ 323, 324, 331, 333, 331, 48, 334, 335,
+ 50, 337, 340, 337, 52, 341, 342, 54,
+ 348, 347, 0, 56, 349, 350, 58, 351,
+ 352, 352, 352, 352, 465, 61, 62, 63,
+ 465, 465, 494, 65, 66, 494, 494, 498,
+ 498, 70, 65, 71, 496, 497, 499, 500,
+ 498, 494, 501, 502, 504, 67, 68, 505,
+ 506, 69, 498, 72, 73, 78, 85, 508,
+ 509, 71, 496, 497, 499, 500, 498, 494,
+ 501, 502, 504, 67, 68, 505, 506, 69,
+ 72, 73, 78, 85, 508, 509, 507, 74,
+ 75, 76, 77, 79, 80, 83, 81, 82,
+ 84, 86, 87, 494, 89, 90, 91, 93,
+ 96, 94, 95, 97, 99, 525, 525, 525,
+ 526, 101, 528, 102, 529, 103, 526, 101,
+ 528, 102, 529, 563, 104, 563, 105, 106,
+ 104, 563, 105, 563, 563, 563, 109, 110,
+ 111, 112, 574, 563, 563, 563, 115, 116,
+ 117, 563, 120, 115, 116, 117, 563, 120,
+ 118, 118, 116, 117, 584, 119, 118, 118,
+ 116, 117, 584, 119, 116, 563, 601, 563,
+ 122, 602, 608, 126, 617, 618, 131, 132,
+ 126, 127, 616, 127, 616, 563, 128, 129,
+ 130, 619, 133, 563, 633, 634, 637, 638,
+ 650, 647, 639, 640, 641, 138, 642, 643,
+ 644, 652, 654, 655, 659, 660, 661, 656,
+ 144, 137, 635, 636, 146, 697, 698, 148,
+ 565, 107, 567, 150, 151, 700, 802, 153,
+ 154, 155, 802, 810, 810, 810, 158, 832,
+ 831, 810, 834, 836, 810, 163, 164, 165,
+ 840, 810, 167, 168, 851, 820, 873, 171,
+ 172, 173, 177, 178, 171, 172, 173, 177,
+ 178, 174, 174, 172, 173, 175, 176, 174,
+ 174, 172, 173, 175, 176, 921, 172, 810,
+ 990, 179, 992, 181, 185, 993, 183, 990,
+ 180, 990, 182, 992, 182, 992, 184, 992,
+ 990, 186, 186, 187, 188, 189, 191, 193,
+ 194, 186, 186, 186, 190, 186, 190, 186,
+ 1, 186, 186, 186, 5, 195, 195, 196,
+ 195, 197, 201, 195, 195, 11, 13, 195,
+ 195, 195, 195, 202, 203, 204, 15, 21,
+ 26, 236, 28, 195, 195, 195, 205, 206,
+ 195, 16, 195, 195, 195, 17, 195, 195,
+ 195, 20, 219, 195, 220, 222, 195, 223,
+ 225, 227, 22, 195, 195, 23, 231, 195,
+ 232, 24, 195, 237, 241, 238, 239, 240,
+ 195, 195, 242, 243, 246, 248, 257, 244,
+ 245, 195, 247, 249, 251, 250, 195, 252,
+ 253, 254, 255, 256, 195, 195, 195, 260,
+ 261, 261, 261, 262, 266, 261, 29, 31,
+ 261, 261, 261, 261, 267, 268, 269, 33,
+ 39, 44, 301, 46, 261, 261, 261, 270,
+ 271, 261, 34, 261, 261, 261, 35, 261,
+ 261, 261, 38, 284, 261, 285, 287, 261,
+ 288, 290, 292, 40, 261, 261, 41, 296,
+ 261, 297, 42, 261, 302, 306, 303, 304,
+ 305, 261, 261, 307, 308, 311, 313, 322,
+ 309, 310, 261, 312, 314, 316, 315, 261,
+ 317, 318, 319, 320, 321, 261, 261, 261,
+ 325, 326, 326, 327, 326, 328, 326, 326,
+ 326, 329, 329, 329, 330, 329, 329, 329,
+ 331, 331, 331, 332, 331, 47, 49, 331,
+ 331, 331, 336, 336, 336, 337, 337, 338,
+ 337, 339, 337, 337, 51, 53, 337, 337,
+ 337, 343, 343, 344, 343, 343, 345, 346,
+ 345, 55, 57, 347, 347, 347, 353, 352,
+ 352, 354, 355, 356, 357, 359, 362, 363,
+ 364, 365, 352, 366, 367, 369, 371, 372,
+ 373, 377, 379, 380, 381, 397, 402, 409,
+ 414, 421, 428, 431, 432, 436, 430, 440,
+ 448, 452, 454, 459, 461, 464, 352, 352,
+ 352, 352, 352, 352, 358, 352, 358, 352,
+ 360, 59, 361, 352, 60, 352, 352, 368,
+ 370, 352, 374, 375, 376, 372, 378, 352,
+ 382, 383, 392, 395, 384, 385, 386, 387,
+ 388, 389, 390, 391, 353, 393, 394, 396,
+ 398, 401, 399, 400, 403, 406, 404, 405,
+ 407, 408, 410, 412, 411, 413, 415, 416,
+ 352, 417, 418, 419, 420, 352, 422, 425,
+ 423, 424, 426, 427, 429, 433, 434, 435,
+ 437, 439, 438, 441, 442, 443, 445, 444,
+ 446, 447, 449, 450, 451, 453, 455, 456,
+ 457, 458, 460, 462, 463, 466, 465, 465,
+ 467, 468, 470, 471, 465, 465, 465, 469,
+ 465, 469, 64, 472, 465, 474, 473, 473,
+ 477, 478, 479, 480, 473, 482, 483, 484,
+ 485, 487, 489, 490, 491, 492, 493, 473,
+ 475, 473, 476, 473, 473, 473, 473, 473,
+ 481, 473, 481, 486, 473, 488, 473, 494,
+ 494, 495, 510, 511, 497, 513, 514, 501,
+ 515, 516, 517, 518, 519, 521, 522, 523,
+ 524, 494, 494, 494, 494, 494, 494, 498,
+ 503, 494, 494, 494, 494, 494, 494, 494,
+ 494, 494, 512, 494, 512, 494, 494, 494,
+ 494, 520, 494, 88, 92, 98, 525, 527,
+ 530, 100, 525, 525, 526, 531, 531, 532,
+ 533, 535, 537, 538, 531, 531, 534, 531,
+ 534, 531, 536, 531, 531, 531, 540, 539,
+ 539, 541, 542, 543, 545, 547, 548, 553,
+ 560, 539, 539, 539, 539, 544, 539, 544,
+ 539, 546, 539, 539, 540, 549, 550, 551,
+ 552, 554, 555, 558, 556, 557, 559, 561,
+ 562, 564, 563, 572, 573, 575, 576, 578,
+ 579, 580, 581, 583, 585, 586, 589, 590,
+ 615, 621, 622, 623, 700, 701, 702, 703,
+ 704, 582, 706, 723, 728, 735, 740, 742,
+ 748, 751, 752, 756, 750, 760, 771, 775,
+ 778, 786, 790, 793, 794, 563, 104, 105,
+ 563, 107, 566, 563, 563, 568, 570, 571,
+ 563, 569, 563, 563, 563, 563, 563, 108,
+ 563, 563, 563, 563, 563, 577, 563, 577,
+ 563, 563, 113, 563, 114, 563, 563, 582,
+ 563, 587, 563, 588, 563, 563, 563, 591,
+ 600, 563, 121, 603, 604, 605, 563, 606,
+ 123, 609, 610, 124, 613, 614, 563, 592,
+ 594, 563, 593, 563, 563, 595, 598, 599,
+ 563, 596, 597, 563, 563, 563, 563, 563,
+ 563, 607, 563, 601, 611, 612, 563, 611,
+ 563, 601, 611, 125, 620, 563, 563, 563,
+ 624, 563, 563, 563, 625, 627, 563, 626,
+ 563, 626, 563, 628, 629, 630, 134, 140,
+ 145, 662, 147, 563, 563, 563, 631, 632,
+ 563, 135, 563, 563, 563, 136, 563, 563,
+ 563, 139, 645, 563, 646, 648, 563, 649,
+ 651, 653, 141, 563, 563, 142, 657, 563,
+ 658, 143, 563, 663, 667, 664, 665, 666,
+ 563, 563, 668, 669, 672, 683, 696, 670,
+ 671, 563, 673, 674, 675, 677, 676, 563,
+ 678, 679, 680, 681, 682, 684, 691, 685,
+ 686, 687, 688, 689, 690, 692, 693, 694,
+ 695, 563, 563, 563, 699, 149, 152, 563,
+ 705, 707, 708, 718, 721, 709, 710, 711,
+ 712, 713, 714, 715, 716, 717, 719, 720,
+ 722, 724, 727, 725, 726, 729, 732, 730,
+ 731, 733, 734, 736, 738, 737, 739, 741,
+ 743, 745, 744, 746, 747, 749, 717, 753,
+ 754, 755, 757, 759, 758, 761, 762, 763,
+ 768, 764, 765, 766, 563, 564, 565, 107,
+ 767, 570, 769, 770, 772, 773, 774, 776,
+ 777, 779, 780, 781, 784, 782, 783, 785,
+ 787, 788, 789, 791, 792, 563, 582, 795,
+ 795, 796, 797, 798, 800, 795, 795, 795,
+ 799, 795, 799, 795, 801, 795, 803, 802,
+ 802, 804, 805, 802, 806, 808, 802, 802,
+ 802, 802, 807, 802, 807, 809, 802, 811,
+ 810, 810, 814, 815, 816, 810, 817, 819,
+ 822, 823, 824, 825, 826, 810, 827, 828,
+ 833, 861, 865, 810, 866, 868, 870, 810,
+ 871, 872, 874, 878, 880, 881, 883, 884,
+ 902, 907, 914, 922, 929, 936, 941, 942,
+ 946, 940, 951, 961, 967, 970, 979, 983,
+ 987, 988, 989, 822, 812, 810, 813, 810,
+ 810, 810, 810, 810, 810, 818, 810, 818,
+ 810, 156, 821, 810, 810, 810, 810, 810,
+ 810, 810, 810, 810, 829, 810, 830, 810,
+ 810, 157, 159, 810, 160, 842, 853, 856,
+ 835, 857, 858, 843, 847, 849, 810, 835,
+ 160, 837, 839, 161, 810, 837, 810, 838,
+ 810, 810, 162, 841, 810, 810, 844, 846,
+ 810, 844, 845, 847, 849, 846, 810, 848,
+ 810, 810, 850, 852, 810, 166, 810, 810,
+ 810, 854, 846, 847, 849, 854, 855, 810,
+ 844, 846, 847, 849, 810, 844, 846, 847,
+ 849, 810, 859, 846, 847, 849, 859, 860,
+ 810, 160, 861, 835, 862, 847, 849, 863,
+ 846, 160, 863, 835, 864, 867, 869, 810,
+ 169, 170, 810, 810, 875, 876, 877, 872,
+ 879, 810, 810, 882, 810, 810, 810, 885,
+ 886, 895, 900, 887, 888, 889, 890, 891,
+ 892, 893, 894, 811, 896, 897, 898, 899,
+ 811, 901, 903, 906, 904, 905, 811, 811,
+ 908, 911, 909, 910, 912, 913, 811, 915,
+ 917, 916, 918, 919, 920, 810, 810, 923,
+ 811, 924, 810, 925, 926, 927, 928, 812,
+ 930, 933, 931, 932, 934, 935, 937, 938,
+ 939, 811, 943, 944, 945, 947, 949, 950,
+ 948, 811, 952, 953, 954, 957, 955, 956,
+ 958, 959, 960, 962, 964, 963, 965, 966,
+ 968, 969, 971, 972, 974, 977, 973, 975,
+ 976, 978, 980, 981, 982, 984, 985, 986,
+ 810, 810, 990, 991, 995, 996, 997, 990,
+ 990, 990, 994, 990, 990, 999, 998, 1000,
+ 998, 1001, 1002, 1003, 998, 998
+]
+
+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, 0, 7, 0, 0, 0, 0, 8,
+ 0, 7, 0, 8, 0, 7, 7, 0,
+ 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 10, 0, 0, 0, 0, 11, 0,
+ 7, 0, 8, 0, 0, 7, 0, 0,
+ 0, 0, 8, 0, 7, 0, 8, 0,
+ 7, 7, 0, 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, 24, 0, 0, 25, 26, 27,
+ 28, 29, 30, 30, 31, 32, 30, 33,
+ 32, 34, 32, 30, 30, 31, 30, 35,
+ 30, 30, 36, 30, 30, 30, 30, 30,
+ 30, 0, 37, 38, 0, 39, 38, 40,
+ 38, 0, 0, 37, 0, 41, 0, 0,
+ 0, 0, 0, 0, 0, 0, 28, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 42, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 43, 44, 45,
+ 46, 0, 0, 0, 46, 29, 47, 30,
+ 30, 30, 47, 48, 0, 49, 0, 29,
+ 30, 50, 30, 51, 52, 53, 0, 0,
+ 0, 0, 0, 54, 55, 56, 0, 29,
+ 0, 57, 0, 30, 58, 30, 59, 30,
+ 60, 61, 62, 61, 63, 61, 0, 64,
+ 65, 64, 66, 64, 67, 68, 0, 69,
+ 0, 0, 0, 0, 70, 70, 0, 0,
+ 71, 71, 72, 0, 29, 73, 0, 0,
+ 0, 70, 0, 74, 0, 7, 0, 8,
+ 0, 0, 7, 0, 0, 0, 0, 8,
+ 0, 7, 0, 8, 0, 7, 7, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 75, 0, 0, 0, 0, 75, 76, 0,
+ 0, 0, 77, 78, 79, 80, 0, 7,
+ 7, 81, 82, 82, 83, 0, 0, 0,
+ 0, 84, 0, 0, 0, 0, 0, 0,
+ 29, 0, 0, 0, 30, 58, 30, 30,
+ 30, 60, 61, 62, 61, 61, 61, 0,
+ 64, 65, 64, 64, 64, 85, 67, 86,
+ 87, 0, 88, 0, 89, 89, 0, 90,
+ 0, 91, 60, 92, 0, 93, 29, 94,
+ 95, 98, 99, 0, 29, 0, 7, 0,
+ 7, 100, 101, 102, 60, 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, 0, 128, 0, 0, 129, 0,
+ 7, 0, 0, 130, 131, 0, 0, 132,
+ 0, 29, 133, 0, 0, 0, 0, 0,
+ 134, 135, 0, 0, 0, 0, 0, 0,
+ 0, 136, 0, 0, 0, 0, 137, 0,
+ 0, 0, 0, 0, 138, 139, 140, 0,
+ 141, 142, 143, 7, 7, 144, 0, 0,
+ 145, 146, 147, 148, 117, 117, 117, 117,
+ 117, 117, 117, 117, 149, 150, 151, 0,
+ 0, 152, 0, 153, 154, 155, 0, 156,
+ 157, 158, 0, 0, 159, 0, 0, 160,
+ 0, 7, 0, 0, 161, 162, 0, 0,
+ 163, 0, 29, 164, 0, 0, 0, 0,
+ 0, 165, 166, 0, 0, 0, 0, 0,
+ 0, 0, 167, 0, 0, 0, 0, 168,
+ 0, 0, 0, 0, 0, 169, 170, 171,
+ 0, 172, 173, 0, 174, 0, 175, 176,
+ 177, 178, 179, 180, 0, 181, 182, 183,
+ 184, 185, 186, 7, 187, 0, 0, 188,
+ 189, 190, 191, 192, 193, 194, 195, 0,
+ 196, 7, 197, 198, 0, 0, 199, 200,
+ 201, 202, 203, 0, 204, 205, 206, 0,
+ 207, 0, 0, 208, 209, 210, 211, 212,
+ 213, 0, 29, 0, 0, 7, 7, 0,
+ 0, 0, 214, 0, 0, 0, 0, 215,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 216, 217,
+ 218, 219, 220, 221, 60, 222, 0, 223,
+ 0, 0, 0, 224, 0, 225, 226, 0,
+ 0, 227, 0, 0, 0, 228, 0, 229,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 228, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 230, 0, 0, 0, 0, 231, 0, 0,
+ 0, 0, 0, 0, 0, 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, 232, 233,
+ 0, 0, 7, 0, 234, 235, 236, 60,
+ 237, 0, 0, 29, 238, 0, 239, 240,
+ 0, 29, 0, 0, 241, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 242,
+ 0, 243, 0, 244, 245, 246, 247, 248,
+ 60, 249, 0, 0, 250, 0, 251, 252,
+ 253, 254, 29, 0, 28, 0, 0, 28,
+ 0, 0, 0, 0, 0, 0, 7, 7,
+ 7, 255, 256, 257, 258, 259, 260, 261,
+ 0, 262, 263, 264, 265, 266, 267, 268,
+ 269, 270, 60, 271, 0, 272, 273, 274,
+ 275, 276, 277, 0, 0, 0, 278, 7,
+ 7, 0, 279, 280, 281, 282, 283, 0,
+ 0, 0, 0, 0, 284, 285, 60, 286,
+ 0, 287, 29, 288, 289, 290, 291, 292,
+ 293, 0, 29, 0, 0, 0, 0, 0,
+ 0, 294, 295, 296, 297, 60, 298, 0,
+ 299, 29, 300, 301, 302, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 303, 304, 0, 8, 0, 0, 7,
+ 305, 0, 0, 305, 305, 0, 0, 7,
+ 306, 0, 306, 0, 306, 306, 306, 0,
+ 0, 306, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 0, 0, 307, 308, 308,
+ 309, 310, 0, 311, 312, 0, 75, 0,
+ 313, 0, 314, 315, 316, 317, 318, 30,
+ 319, 320, 321, 322, 323, 60, 324, 0,
+ 325, 326, 0, 327, 0, 328, 329, 305,
+ 330, 0, 331, 0, 332, 333, 334, 0,
+ 0, 335, 0, 0, 0, 0, 336, 0,
+ 0, 0, 0, 0, 0, 0, 337, 0,
+ 0, 338, 0, 339, 340, 0, 0, 0,
+ 341, 0, 0, 342, 343, 344, 345, 346,
+ 347, 0, 348, 349, 349, 0, 350, 0,
+ 351, 352, 352, 0, 0, 353, 354, 355,
+ 0, 356, 357, 358, 0, 7, 359, 360,
+ 361, 0, 362, 117, 117, 117, 117, 117,
+ 117, 117, 117, 363, 364, 365, 0, 0,
+ 366, 0, 367, 368, 369, 0, 370, 371,
+ 372, 0, 0, 373, 0, 0, 374, 0,
+ 7, 0, 0, 375, 376, 0, 0, 377,
+ 0, 29, 378, 0, 0, 0, 0, 0,
+ 379, 380, 0, 0, 0, 0, 0, 0,
+ 0, 381, 0, 0, 0, 0, 0, 382,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 383, 384, 385, 0, 0, 0, 386,
+ 29, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 75, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 387, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 388, 389, 390, 391, 392,
+ 392, 388, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 303, 303, 303,
+ 303, 303, 303, 303, 303, 393, 394, 395,
+ 396, 0, 29, 0, 0, 397, 398, 399,
+ 60, 400, 0, 401, 29, 402, 7, 403,
+ 404, 0, 29, 405, 0, 0, 406, 407,
+ 408, 409, 60, 410, 0, 29, 411, 412,
+ 413, 414, 0, 29, 0, 415, 0, 7,
+ 416, 0, 0, 0, 0, 417, 0, 0,
+ 418, 418, 0, 419, 0, 0, 0, 420,
+ 7, 421, 421, 421, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 422, 423, 424, 0, 425,
+ 426, 427, 428, 429, 430, 60, 431, 0,
+ 432, 0, 0, 433, 434, 435, 436, 437,
+ 438, 439, 440, 441, 0, 442, 0, 443,
+ 444, 0, 0, 445, 446, 447, 0, 0,
+ 448, 0, 0, 447, 449, 449, 450, 451,
+ 0, 452, 453, 0, 454, 455, 456, 0,
+ 457, 458, 0, 0, 459, 460, 447, 447,
+ 461, 0, 0, 462, 462, 0, 463, 0,
+ 464, 465, 7, 0, 466, 0, 467, 468,
+ 469, 470, 470, 471, 471, 0, 0, 472,
+ 473, 473, 474, 474, 475, 476, 476, 477,
+ 477, 478, 479, 479, 480, 480, 0, 0,
+ 481, 482, 483, 484, 485, 486, 486, 483,
+ 485, 487, 418, 488, 0, 0, 0, 489,
+ 0, 0, 490, 491, 421, 421, 421, 492,
+ 421, 493, 494, 29, 495, 496, 497, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 498, 0, 0, 0, 0,
+ 492, 0, 0, 0, 0, 0, 499, 500,
+ 0, 0, 0, 0, 0, 0, 501, 0,
+ 0, 0, 0, 0, 500, 502, 503, 0,
+ 504, 0, 505, 0, 0, 0, 0, 506,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 507, 0, 0, 0, 0, 0, 0,
+ 0, 506, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 508, 509, 510, 511, 511, 89, 511, 512,
+ 513, 514, 0, 515, 516, 0, 517, 0,
+ 518, 0, 0, 0, 519, 520
+]
+
+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, 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, 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, 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,
+ 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, 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, 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, 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, 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, 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,
+ 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, 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, 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, 48, 48, 48,
+ 48, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 83,
+ 83, 83, 83, 90, 90, 90, 90, 0,
+ 0, 0, 0, 105, 107, 109, 109, 109,
+ 109, 115, 115, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 180, 180, 180, 180, 180, 180, 180, 180,
+ 180, 180, 180, 180, 190, 192, 192, 192,
+ 204, 204, 204, 212, 214, 214, 214, 214,
+ 214, 220, 212, 212, 212, 212, 212, 212,
+ 212, 246, 246, 246, 246, 246, 246, 212,
+ 262, 212, 262, 246, 246, 212, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 212, 246, 246, 246,
+ 246, 303, 303, 303, 308, 310, 310, 310,
+ 314, 314, 317, 317, 317, 317, 322, 322,
+ 322, 308, 314, 314, 314, 314, 314, 314,
+ 314, 314, 314, 353, 360, 362, 362, 362,
+ 362, 353, 0, 378, 379, 380, 382, 384,
+ 386, 384, 384, 0, 396, 397, 401, 401,
+ 402, 403, 412, 413, 414, 414, 414, 417,
+ 417, 419, 420, 421, 421, 421, 423, 424,
+ 425, 425, 425, 428, 428, 421, 431, 431,
+ 421, 417, 417, 436, 437, 437, 437, 440,
+ 440, 437, 437, 437, 443, 443, 443, 443,
+ 449, 450, 450, 450, 450, 458, 450, 450,
+ 450, 450, 463, 450, 450, 450, 450, 450,
+ 450, 469, 470, 471, 471, 0, 478, 482,
+ 482, 483, 484, 493, 494, 495, 495, 495,
+ 498, 498, 500, 501, 502, 502, 502, 504,
+ 505, 506, 506, 506, 509, 509, 502, 512,
+ 512, 502, 498, 498, 517, 518, 518, 518,
+ 521, 521, 518, 518, 518, 524, 524, 524,
+ 524, 530, 531, 531, 531, 531, 539, 531,
+ 531, 531, 531, 544, 531, 531, 531, 531,
+ 531, 531, 550, 551, 552, 552, 0, 559,
+ 560, 0, 566, 0, 573, 577, 577, 578,
+ 0, 0, 587, 588, 592, 592, 593, 0,
+ 598, 0, 601, 0, 604, 604, 605, 606,
+ 0, 647, 649, 650, 651, 652, 654, 656,
+ 660, 660, 651, 651, 651, 651, 662, 651,
+ 651, 656, 651, 651, 647, 666, 666, 666,
+ 666, 666, 666, 656, 656, 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,
+ 705, 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,
+ 651, 0, 749, 750, 751, 753, 749, 749,
+ 757, 0, 776, 778, 780, 781, 782, 783,
+ 784, 786, 783, 783, 783, 783, 783, 789,
+ 783, 783, 791, 789, 789, 783, 0, 810,
+ 811, 115, 115, 814, 815, 115, 811, 811,
+ 818, 820, 823, 811, 824, 811, 825, 826,
+ 828, 830, 811, 818, 831, 831, 820, 831,
+ 835, 831, 831, 831, 831, 0, 190, 843,
+ 844, 843, 843, 0, 853, 854, 856, 858,
+ 860, 858, 862, 0, 874, 875, 876, 877,
+ 879, 881, 883, 884, 884, 884, 884, 884,
+ 884, 884, 884, 884, 884, 884, 884, 884,
+ 884, 884, 884, 0, 942, 945, 948, 949,
+ 953, 955, 956, 957, 958, 959, 961, 964,
+ 965, 967, 969, 972, 974, 975, 212, 972,
+ 977, 972, 964, 979, 981, 964, 964, 999,
+ 1002, 1004, 1005, 1009, 1012, 1013, 1014, 1015,
+ 999, 999, 999, 999, 999, 999, 999, 999,
+ 999, 999, 1019, 1023, 1025, 999, 999, 964,
+ 1030, 1031, 1031, 1031, 964, 964, 964, 1032,
+ 1039, 1039, 1041, 1043, 1052, 1053, 1054, 1054,
+ 1054, 1057, 1057, 1059, 1060, 1061, 1061, 1061,
+ 1063, 1064, 1065, 1065, 1065, 1068, 1068, 1061,
+ 1071, 1071, 1061, 1057, 1057, 1076, 1077, 1077,
+ 1077, 1080, 1080, 1077, 1077, 1077, 1083, 1083,
+ 1083, 1083, 1089, 1090, 1090, 1090, 1090, 1098,
+ 1090, 1090, 1090, 1090, 1104, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+ 1122, 1123, 1124, 1124, 212, 964, 964, 1128,
+ 964, 959, 942, 942, 942, 942, 942, 942,
+ 942, 942, 942, 942, 942, 212, 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, 942, 942, 942, 942, 1181, 949,
+ 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, 1206, 964, 0, 1214, 1215, 1216, 1218,
+ 1220, 1222, 0, 1231, 1232, 1233, 1234, 1236,
+ 1231, 1239, 0, 314, 1294, 1296, 1297, 1298,
+ 1299, 1301, 1303, 1305, 1308, 1308, 314, 1310,
+ 1312, 1313, 1314, 1310, 1316, 1318, 1318, 1321,
+ 1321, 1324, 1335, 314, 1341, 1343, 1345, 1346,
+ 1349, 1350, 1324, 1324, 1353, 1353, 1353, 1359,
+ 1361, 1362, 1365, 1367, 1368, 1369, 1353, 1353,
+ 1376, 1381, 1386, 1353, 1353, 1393, 1393, 1353,
+ 1353, 1318, 1310, 1310, 1318, 1310, 1310, 1305,
+ 314, 1411, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1418, 1305, 1421, 1422, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1462, 1463, 1423, 1423, 1467, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
+ 1423, 1423, 1423, 1521, 1299, 1522, 0, 1528,
+ 1529, 1530, 1532, 1528, 1528, 1528, 0, 1537,
+ 1537, 1537, 1537, 1541
+]
+
+class << self
+ attr_accessor :lex_start
+end
+self.lex_start = 186;
+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 = 195;
+class << self
+ attr_accessor :lex_en_interp_string
+end
+self.lex_en_interp_string = 261;
+class << self
+ attr_accessor :lex_en_plain_words
+end
+self.lex_en_plain_words = 326;
+class << self
+ attr_accessor :lex_en_plain_string
+end
+self.lex_en_plain_string = 329;
+class << self
+ attr_accessor :lex_en_interp_backslash_delimited
+end
+self.lex_en_interp_backslash_delimited = 331;
+class << self
+ attr_accessor :lex_en_plain_backslash_delimited
+end
+self.lex_en_plain_backslash_delimited = 336;
+class << self
+ attr_accessor :lex_en_interp_backslash_delimited_words
+end
+self.lex_en_interp_backslash_delimited_words = 337;
+class << self
+ attr_accessor :lex_en_plain_backslash_delimited_words
+end
+self.lex_en_plain_backslash_delimited_words = 343;
+class << self
+ attr_accessor :lex_en_regexp_modifiers
+end
+self.lex_en_regexp_modifiers = 345;
+class << self
+ attr_accessor :lex_en_expr_variable
+end
+self.lex_en_expr_variable = 347;
+class << self
+ attr_accessor :lex_en_expr_fname
+end
+self.lex_en_expr_fname = 352;
+class << self
+ attr_accessor :lex_en_expr_endfn
+end
+self.lex_en_expr_endfn = 465;
+class << self
+ attr_accessor :lex_en_expr_dot
+end
+self.lex_en_expr_dot = 473;
+class << self
+ attr_accessor :lex_en_expr_arg
+end
+self.lex_en_expr_arg = 494;
+class << self
+ attr_accessor :lex_en_expr_cmdarg
+end
+self.lex_en_expr_cmdarg = 525;
+class << self
+ attr_accessor :lex_en_expr_endarg
+end
+self.lex_en_expr_endarg = 531;
+class << self
+ attr_accessor :lex_en_expr_mid
+end
+self.lex_en_expr_mid = 539;
+class << self
+ attr_accessor :lex_en_expr_beg
+end
+self.lex_en_expr_beg = 563;
+class << self
+ attr_accessor :lex_en_expr_labelarg
+end
+self.lex_en_expr_labelarg = 795;
+class << self
+ attr_accessor :lex_en_expr_value
+end
+self.lex_en_expr_value = 802;
+class << self
+ attr_accessor :lex_en_expr_end
+end
+self.lex_en_expr_end = 810;
+class << self
+ attr_accessor :lex_en_leading_dot
+end
+self.lex_en_leading_dot = 990;
+class << self
+ attr_accessor :lex_en_line_comment
+end
+self.lex_en_line_comment = 998;
+class << self
+ attr_accessor :lex_en_line_begin
+end
+self.lex_en_line_begin = 186;
+
+
+# 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, :context, :command_start
+
+ attr_accessor :tokens, :comments
+
+ attr_reader :paren_nest, :cmdarg_stack, :cond_stack, :lambda_stack
+
+ 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
+
+ # 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 11327 "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 11355 "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 29 then
+# line 498 "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 822 "lib/parser/lexer.rl"
+ begin
+
+ @escape_s = p
+ @escape = nil
+ end
+ when 30 then
+# line 862 "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 60 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+ when 64 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+ when 310 then
+# line 1270 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+ when 37 then
+# line 1563 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+ when 39 then
+# line 1583 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+ when 41 then
+# line 1611 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+ when 71 then
+# line 1803 "lib/parser/lexer.rl"
+ begin
+ heredoc_e = p end
+ when 349 then
+# line 1895 "lib/parser/lexer.rl"
+ begin
+ tm = p - 1; diag_msg = :ivar_name end
+ when 352 then
+# line 1896 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2; diag_msg = :cvar_name end
+ when 360 then
+# line 1916 "lib/parser/lexer.rl"
+ begin
+ @escape = nil end
+ when 392 then
+# line 2005 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+ when 308 then
+# line 2112 "lib/parser/lexer.rl"
+ begin
+ ident_tok = tok; ident_ts = @ts; ident_te = @te; end
+ when 479 then
+# line 2298 "lib/parser/lexer.rl"
+ begin
+ @num_base = 16; @num_digits_s = p end
+ when 473 then
+# line 2299 "lib/parser/lexer.rl"
+ begin
+ @num_base = 10; @num_digits_s = p end
+ when 476 then
+# line 2300 "lib/parser/lexer.rl"
+ begin
+ @num_base = 8; @num_digits_s = p end
+ when 470 then
+# line 2301 "lib/parser/lexer.rl"
+ begin
+ @num_base = 2; @num_digits_s = p end
+ when 485 then
+# line 2302 "lib/parser/lexer.rl"
+ begin
+ @num_base = 10; @num_digits_s = @ts end
+ when 447 then
+# line 2303 "lib/parser/lexer.rl"
+ begin
+ @num_base = 8; @num_digits_s = @ts end
+ when 462 then
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+ when 455 then
+# line 2361 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+ when 452 then
+# line 2362 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+ when 89 then
+# line 2572 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+ when 7 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+ when 113 then
+# line 1103 "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 = 802;
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 5 then
+# line 1029 "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 = 347
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 109 then
+# line 954 "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 = 795;
+ 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 1045 "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 1029 "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 = 347
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 111 then
+# line 1016 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ literal.extend_space @ts, @te
+ end
+ end
+ when 112 then
+# line 871 "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 = 795;
+ 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 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 871 "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 = 795;
+ 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 145 then
+# line 1103 "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 = 802;
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 10 then
+# line 1029 "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 = 347
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 142 then
+# line 954 "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 = 795;
+ 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 147 then
+# line 1045 "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 146 then
+# line 1029 "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 = 347
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 144 then
+# line 871 "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 = 795;
+ 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 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 871 "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 = 795;
+ 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 954 "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 = 795;
+ 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 1016 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ literal.extend_space @ts, @te
+ end
+ end
+ when 176 then
+# line 871 "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 = 795;
+ 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 179 then
+# line 954 "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 = 795;
+ 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 181 then
+# line 871 "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 = 795;
+ 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 188 then
+# line 1103 "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 = 802;
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 13 then
+# line 1029 "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 = 347
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 185 then
+# line 954 "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 = 795;
+ 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 190 then
+# line 1045 "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 189 then
+# line 1029 "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 = 347
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 187 then
+# line 871 "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 = 795;
+ 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 871 "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 = 795;
+ 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 192 then
+# line 954 "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 = 795;
+ 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 1103 "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 = 802;
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 15 then
+# line 1029 "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 = 347
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 195 then
+# line 954 "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 = 795;
+ 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 201 then
+# line 1045 "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 200 then
+# line 1029 "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 = 347
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 197 then
+# line 1016 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ literal.extend_space @ts, @te
+ end
+ end
+ when 198 then
+# line 871 "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 = 795;
+ 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 871 "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 = 795;
+ 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 203 then
+# line 954 "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 = 795;
+ 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 205 then
+# line 1016 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ literal.extend_space @ts, @te
+ end
+ end
+ when 206 then
+# line 1200 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ emit(:tREGEXP_OPT, tok(@ts, @te - 1), @ts, @te - 1)
+ p = p - 1;
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 207 then
+# line 1187 "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 = 810;
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 16 then
+# line 1339 "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 208 then
+# line 1339 "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 210 then
+# line 1352 "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 209 then
+# line 1362 "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 231 then
+# line 1383 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit_table(KEYWORDS_BEGIN);
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 217 then
+# line 1391 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit(:tIDENTIFIER)
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 18 then
+# line 1395 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = @ts - 1
+ @cs = 810; begin
+ @stack[ @top] = @cs
+ @top+= 1
+ @cs = 347
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 214 then
+# line 1404 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit_table(PUNCTUATION)
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 226 then
+# line 1408 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = p - 1; p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 20 then
+# line 1414 "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 = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ end
+ when 213 then
+# line 1427 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 212 then
+# line 525 "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 230 then
+# line 1383 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit_table(KEYWORDS_BEGIN);
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 227 then
+# line 1387 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit(:tCONSTANT)
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 229 then
+# line 1391 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit(:tIDENTIFIER)
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 224 then
+# line 1395 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1
+ @cs = 810; begin
+ @stack[ @top] = @cs
+ @top+= 1
+ @cs = 347
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 220 then
+# line 1404 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit_table(PUNCTUATION)
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 225 then
+# line 1411 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 218 then
+# line 1424 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 223 then
+# line 1427 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 19 then
+# line 1404 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin emit_table(PUNCTUATION)
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 17 then
+# line 1427 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 216 then
+# line 1 "NONE"
+ begin
+ case @act
+ when 43 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS_BEGIN);
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 44 then
+ begin begin p = (( @te))-1; end
+ emit(:tCONSTANT)
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 45 then
+ begin begin p = (( @te))-1; end
+ emit(:tIDENTIFIER)
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+end
+ end
+ when 22 then
+# line 1439 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1)
+ p = p - 1; @cs = 795; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 23 then
+# line 1443 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ if @version >= 31 && @context.in_argdef
+ emit(:tBDOT3, '...'.freeze)
+ # emit(:tNL, "\n".freeze, @te - 1, @te)
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ else
+ p -= 3;
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ end
+ when 233 then
+# line 1457 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 232 then
+# line 525 "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 235 then
+# line 1454 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 234 then
+# line 1457 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 21 then
+# line 1457 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 241 then
+# line 1483 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit_table(PUNCTUATION)
+ @cs = 494; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 240 then
+# line 1489 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 239 then
+# line 525 "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 251 then
+# line 1468 "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 242 then
+# line 1472 "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 247 then
+# line 1483 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit_table(PUNCTUATION)
+ @cs = 494; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 245 then
+# line 1486 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 250 then
+# line 1489 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 274 then
+# line 1549 "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 = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 257 then
+# line 1567 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ if tok(tm, tm + 1) == '/'.freeze
+ # Ambiguous regexp literal.
+ if @version < 30
+ diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1)
+ else
+ diagnostic :warning, :ambiguous_regexp, nil, range(tm, tm + 1)
+ end
+ end
+
+ p = tm - 1
+ begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 263 then
+# line 1595 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = p - 1; p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 25 then
+# line 1603 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = @ts - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 265 then
+# line 1612 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = tm - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 40 then
+# line 1623 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 252 then
+# line 1637 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 253 then
+# line 525 "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 264 then
+# line 1558 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 260 then
+# line 1584 "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 = 563
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 262 then
+# line 1600 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 256 then
+# line 1623 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 255 then
+# line 1628 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 273 then
+# line 1637 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 26 then
+# line 1628 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ end
+ when 42 then
+# line 1637 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 24 then
+# line 1 "NONE"
+ begin
+ case @act
+ when 72 then
+ begin begin p = (( @te))-1; end
+
+ if tok(tm, tm + 1) == '/'.freeze
+ # Ambiguous regexp literal.
+ if @version < 30
+ diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1)
+ else
+ diagnostic :warning, :ambiguous_regexp, nil, range(tm, tm + 1)
+ end
+ end
+
+ p = tm - 1
+ begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+
+ end
+ when 73 then
+ begin begin p = (( @te))-1; end
+
+ diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) },
+ range(tm, @te)
+
+ p = tm - 1
+ begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+
+ end
+ when 78 then
+ begin begin p = (( @te))-1; end
+
+ p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ else
+ begin begin p = (( @te))-1; end
+end
+end
+ end
+ when 44 then
+# line 1673 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = @ts - 1
+ begin
+ @cs = 494
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 278 then
+# line 525 "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 279 then
+# line 1673 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1
+ begin
+ @cs = 494
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 45 then
+# line 1673 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin p = @ts - 1
+ begin
+ @cs = 494
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 43 then
+# line 1 "NONE"
+ begin
+ case @act
+ when 85 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 = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ when 86 then
+ begin begin p = (( @te))-1; end
+ p = @ts - 1
+ begin
+ @cs = 494
+ _goto_level = _again
+ next
+ end
+ end
+end
+ end
+ when 289 then
+# line 1709 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit_do(true)
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 282 then
+# line 1715 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 283 then
+# line 525 "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 284 then
+# line 1712 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 287 then
+# line 1715 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 293 then
+# line 1739 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 292 then
+# line 525 "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 301 then
+# line 1731 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 295 then
+# line 1733 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 299 then
+# line 1739 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 294 then
+# line 1 "NONE"
+ begin
+ case @act
+ when 93 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 94 then
+ begin begin p = (( @te))-1; end
+ p = @ts - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+end
+ end
+ when 57 then
+# line 1754 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1)
+ p = p - 1; @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 334 then
+# line 1771 "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 326 then
+# line 1778 "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 55 then
+# line 1785 "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 347 then
+# line 1860 "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 = 352
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 335 then
+# line 1868 "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 346 then
+# line 1876 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ emit(:tSYMBOL, tok(@ts + 1, @ts + 2))
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 69 then
+# line 1890 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ emit(:tSYMBOL, tok(@ts + 1), @ts)
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 357 then
+# line 1931 "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 = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 356 then
+# line 1941 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1)
+ end
+ end
+ when 336 then
+# line 2000 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit_table(PUNCTUATION_BEGIN)
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 52 then
+# line 2021 "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 = 810;
+ else
+ @cs = (arg_or_cmdarg(cmd_state));
+ end
+ else
+ emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1)
+ @cs = 795;
+ end
+
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 49 then
+# line 2114 "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 = 465;
+ else
+ @cs = 525;
+ end
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 320 then
+# line 2133 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ p = @ts - 1
+ @cs_before_block_comment = @cs
+ begin
+ @cs = 186
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 56 then
+# line 2149 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = @ts - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 304 then
+# line 525 "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 330 then
+# line 1754 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 329 then
+# line 1761 "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 325 then
+# line 1791 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1)
+ end
+ end
+ when 354 then
+# line 1851 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1)
+ end
+ end
+ when 337 then
+# line 1890 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tSYMBOL, tok(@ts + 1), @ts)
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 350 then
+# line 1898 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 355 then
+# line 1941 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1)
+ end
+ end
+ when 361 then
+# line 1947 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 327 then
+# line 2000 "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 331 then
+# line 2048 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ if @version >= 27
+ emit(:tBDOT2)
+ else
+ emit(:tDOT2)
+ end
+
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 332 then
+# line 2059 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ # Here we scan and conditionally emit "\n":
+ # + if it's there
+ # + and emitted we do nothing
+ # + and not emitted we return `p` to "\n" to process it on the next scan
+ # + if it's not there we do nothing
+ followed_by_nl = @te - 1 == @newline_s
+ nl_emitted = false
+ dots_te = followed_by_nl ? @te - 1 : @te
+
+ if @version >= 30
+ if @lambda_stack.any? && @lambda_stack.last + 1 == @paren_nest
+ # To reject `->(...)` like `->...`
+ emit(:tDOT3, '...'.freeze, @ts, dots_te)
+ else
+ emit(:tBDOT3, '...'.freeze, @ts, dots_te)
+
+ if @version >= 31 && followed_by_nl && @context.in_argdef
+ emit(:tNL, @te - 1, @te)
+ nl_emitted = true
+ end
+ end
+ elsif @version >= 27
+ emit(:tBDOT3, '...'.freeze, @ts, dots_te)
+ else
+ emit(:tDOT3, '...'.freeze, @ts, dots_te)
+ end
+
+ if followed_by_nl && !nl_emitted
+ # return "\n" to process it on the next scan
+ p = p - 1;
+ end
+
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 307 then
+# line 1324 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tIDENTIFIER)
+
+ if !@static_env.nil? && @static_env.declared?(tok)
+ @cs = 465; 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 317 then
+# line 2130 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 319 then
+# line 2133 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ p = @ts - 1
+ @cs_before_block_comment = @cs
+ begin
+ @cs = 186
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 322 then
+# line 2149 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 54 then
+# line 1791 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin
+ diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1)
+ end
+ end
+ when 73 then
+# line 1851 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin
+ diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1)
+ end
+ end
+ when 74 then
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 48 then
+# line 1324 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin
+ emit(:tIDENTIFIER)
+
+ if !@static_env.nil? && @static_env.declared?(tok)
+ @cs = 465; 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 53 then
+# line 2130 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ end
+ when 68 then
+# line 2149 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin p = @ts - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 51 then
+# line 1 "NONE"
+ begin
+ case @act
+ when 99 then
+ begin begin p = (( @te))-1; end
+
+ emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1)
+ p = p - 1; @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ when 106 then
+ begin begin p = (( @te))-1; end
+
+ diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1)
+ end
+ when 117 then
+ begin begin p = (( @te))-1; end
+
+ if @version >= 27
+ emit(:tPIPE, tok(@ts, @ts + 1), @ts, @ts + 1)
+ p = p - 1;
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ else
+ p -= 2
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 121 then
+ begin begin p = (( @te))-1; end
+ emit_table(PUNCTUATION_BEGIN)
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 122 then
+ begin begin p = (( @te))-1; end
+ emit(:kRESCUE, 'rescue'.freeze, @ts, tm)
+ p = tm - 1
+ @cs = 539; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 123 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS_BEGIN)
+ @command_start = true
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 127 then
+ begin begin p = (( @te))-1; end
+ p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ when 128 then
+ begin begin p = (( @te))-1; end
+
+ emit(:tIDENTIFIER)
+
+ if !@static_env.nil? && @static_env.declared?(tok)
+ @cs = 465; 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 132 then
+ begin begin p = (( @te))-1; end
+ p = @ts - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+end
+ end
+ when 395 then
+# line 2169 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 396 then
+# line 525 "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 397 then
+# line 2157 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 401 then
+# line 2169 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 77 then
+# line 2179 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 405 then
+# line 2184 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ begin
+ @cs = (push_literal(tok, tok, @ts))
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 404 then
+# line 2194 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 403 then
+# line 525 "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 407 then
+# line 2188 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 406 then
+# line 2194 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 76 then
+# line 2194 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin p = p - 1; begin
+ @cs = 563
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 440 then
+# line 2205 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ emit(:tLAMBDA, '->'.freeze, @ts, @ts + 2)
+
+ @lambda_stack.push @paren_nest
+ @cs = 465; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 86 then
+# line 2246 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit(:kCLASS, 'class'.freeze, @ts, @ts + 5)
+ emit(:tLSHFT, '<<'.freeze, @te - 2, @te)
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 415 then
+# line 2382 "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 79 then
+# line 2400 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = @ts - 1; begin
+ @stack[ @top] = @cs
+ @top+= 1
+ @cs = 347
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 436 then
+# line 2407 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit_table(PUNCTUATION)
+ @cs = 473; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 489 then
+# line 2431 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ emit_table(PUNCTUATION)
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 429 then
+# line 2440 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ emit_table(PUNCTUATION);
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 434 then
+# line 2475 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit(:tOP_ASGN, tok(@ts, @te - 1))
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 420 then
+# line 2479 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit(:tEH, '?'.freeze)
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 417 then
+# line 2498 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit_table(PUNCTUATION)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 419 then
+# line 2511 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit(:tSEMI, ';'.freeze)
+ @command_start = true
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 494 then
+# line 2515 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ diagnostic :error, :bare_backslash, nil, range(@ts, @ts + 1)
+ p = p - 1;
+ end
+ end
+ when 414 then
+# line 2521 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] }
+ end
+ end
+ when 413 then
+# line 525 "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 505 then
+# line 2242 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit_table(KEYWORDS)
+ @cs = 352; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 503 then
+# line 2246 "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 = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 502 then
+# line 2257 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit_table(KEYWORDS)
+ @command_start = true
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 444 then
+# line 2332 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ diagnostic :error, :no_dot_digit_literal
+ end
+ end
+ when 491 then
+# line 2392 "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 433 then
+# line 2400 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1; begin
+ @stack[ @top] = @cs
+ @top+= 1
+ @cs = 347
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 441 then
+# line 2407 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit_table(PUNCTUATION)
+ @cs = 473; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 497 then
+# line 1324 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tIDENTIFIER)
+
+ if !@static_env.nil? && @static_env.declared?(tok)
+ @cs = 465; 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 439 then
+# line 2431 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit_table(PUNCTUATION)
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 435 then
+# line 2440 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit_table(PUNCTUATION);
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 428 then
+# line 2446 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit_table(PUNCTUATION)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 442 then
+# line 2498 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit_table(PUNCTUATION)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 426 then
+# line 2505 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 432 then
+# line 2521 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] }
+ end
+ end
+ when 84 then
+# line 2305 "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 80 then
+# line 2332 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin
+ diagnostic :error, :no_dot_digit_literal
+ end
+ end
+ when 83 then
+# line 2364 "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 78 then
+# line 2521 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin
+ diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] }
+ end
+ end
+ when 81 then
+# line 1 "NONE"
+ begin
+ case @act
+ when 145 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 = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ when 146 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ @cs = 352; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 147 then
+ begin begin p = (( @te))-1; end
+ emit(:kCLASS, 'class'.freeze, @ts, @ts + 5)
+ emit(:tLSHFT, '<<'.freeze, @te - 2, @te)
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 148 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 149 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ @command_start = true
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 150 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ @cs = 539; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 151 then
+ begin begin p = (( @te))-1; end
+
+ emit_table(KEYWORDS)
+
+ if version?(18) && tok == 'not'.freeze
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ else
+ @cs = 494; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 152 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 153 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 154 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 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(:tINTEGER, tok(@ts, @te - 1).to_i, @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
+
+ 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 158 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 160 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 164 then
+ begin begin p = (( @te))-1; end
+
+ emit(:tIDENTIFIER)
+
+ if !@static_env.nil? && @static_env.declared?(tok)
+ @cs = 465; 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 165 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 = 494; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ when 167 then
+ begin begin p = (( @te))-1; end
+
+ emit_table(PUNCTUATION);
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ when 168 then
+ begin begin p = (( @te))-1; end
+ emit_table(PUNCTUATION)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+end
+ end
+ when 516 then
+# line 2562 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ emit(:tNL, nil, @newline_s, @newline_s + 1)
+ if @version < 27
+ p = p - 1; @cs = 186; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ else
+ emit(:tBDOT3)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ end
+ when 95 then
+# line 2573 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = tm - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 510 then
+# line 2576 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin emit(:tNL, nil, @newline_s, @newline_s + 1)
+ p = p - 1; @cs = 186; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 513 then
+# line 2537 "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 = 186; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ end
+ when 515 then
+# line 2551 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tNL, nil, @newline_s, @newline_s + 1)
+ if @version < 27
+ p = p - 1; @cs = 186; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ else
+ emit(:tBDOT2)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ end
+ when 514 then
+# line 2573 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = tm - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 512 then
+# line 2576 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit(:tNL, nil, @newline_s, @newline_s + 1)
+ p = p - 1; @cs = 186; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 90 then
+# line 2537 "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 = 186; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ end
+ when 87 then
+# line 2576 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin emit(:tNL, nil, @newline_s, @newline_s + 1)
+ p = p - 1; @cs = 186; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 91 then
+# line 1 "NONE"
+ begin
+ case @act
+ when 181 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 = 186; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 185 then
+ begin begin p = (( @te))-1; end
+ emit(:tNL, nil, @newline_s, @newline_s + 1)
+ p = p - 1; @cs = 186; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+end
+ end
+ when 519 then
+# line 2586 "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 518 then
+# line 2594 "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 2604 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin @eq_begin_s = @ts
+ begin
+ @cs = 998
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 2 then
+# line 2608 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = pe - 3 end
+ end
+ when 98 then
+# line 2611 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin cmd_state = true; p = p - 1; begin
+ @cs = 802
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 99 then
+# line 525 "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 2601 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 105 then
+# line 2604 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin @eq_begin_s = @ts
+ begin
+ @cs = 998
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 104 then
+# line 2611 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin cmd_state = true; p = p - 1; begin
+ @cs = 802
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 1 then
+# line 2611 "lib/parser/lexer.rl"
+ begin
+ begin p = (( @te))-1; end
+ begin cmd_state = true; p = p - 1; begin
+ @cs = 802
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 67 then
+# line 498 "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 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+ when 110 then
+# line 498 "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 954 "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 = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 333 then
+# line 498 "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 2059 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ # Here we scan and conditionally emit "\n":
+ # + if it's there
+ # + and emitted we do nothing
+ # + and not emitted we return `p` to "\n" to process it on the next scan
+ # + if it's not there we do nothing
+ followed_by_nl = @te - 1 == @newline_s
+ nl_emitted = false
+ dots_te = followed_by_nl ? @te - 1 : @te
+
+ if @version >= 30
+ if @lambda_stack.any? && @lambda_stack.last + 1 == @paren_nest
+ # To reject `->(...)` like `->...`
+ emit(:tDOT3, '...'.freeze, @ts, dots_te)
+ else
+ emit(:tBDOT3, '...'.freeze, @ts, dots_te)
+
+ if @version >= 31 && followed_by_nl && @context.in_argdef
+ emit(:tNL, @te - 1, @te)
+ nl_emitted = true
+ end
+ end
+ elsif @version >= 27
+ emit(:tBDOT3, '...'.freeze, @ts, dots_te)
+ else
+ emit(:tDOT3, '...'.freeze, @ts, dots_te)
+ end
+
+ if followed_by_nl && !nl_emitted
+ # return "\n" to process it on the next scan
+ p = p - 1;
+ end
+
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 321 then
+# line 498 "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 2133 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ p = @ts - 1
+ @cs_before_block_comment = @cs
+ begin
+ @cs = 186
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 443 then
+# line 498 "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 2487 "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 = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 520 then
+# line 498 "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 2586 "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 517 then
+# line 498 "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 2591 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ end
+ when 107 then
+# line 498 "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 2604 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin @eq_begin_s = @ts
+ begin
+ @cs = 998
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 3 then
+# line 498 "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 2608 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin p = pe - 3 end
+ end
+ when 465 then
+# line 633 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } end
+# line 2305 "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 634 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, chars)) } end
+# line 2305 "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 468 then
+# line 635 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } end
+# line 2305 "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 636 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 2); p -= 2 } end
+# line 2305 "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 464 then
+# line 637 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 2); p -= 2 } end
+# line 2305 "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 467 then
+# line 638 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 6); p -= 6 } end
+# line 2305 "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 456 then
+# line 642 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Float(chars))) } end
+# line 2364 "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 457 then
+# line 643 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars), @ts, @te - 2); p -= 2 } end
+# line 2364 "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 458 then
+# line 647 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } end
+# line 2364 "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 460 then
+# line 648 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } end
+# line 2364 "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 459 then
+# line 649 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars), @ts, @te - 6); p -= 6 } end
+# line 2364 "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 137 then
+# line 664 "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 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 168 then
+# line 664 "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 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 382 then
+# line 664 "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 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 118 then
+# line 704 "lib/parser/lexer.rl"
+ begin
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 363 then
+# line 704 "lib/parser/lexer.rl"
+ begin
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 121 then
+# line 716 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_escape
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 152 then
+# line 716 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_escape
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 716 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_escape
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 123 then
+# line 744 "lib/parser/lexer.rl"
+ begin
+ @escape = "\x7f" end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 744 "lib/parser/lexer.rl"
+ begin
+ @escape = "\x7f" end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 368 then
+# line 744 "lib/parser/lexer.rl"
+ begin
+ @escape = "\x7f" end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 120 then
+# line 752 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 752 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 752 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 140 then
+# line 756 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 171 then
+# line 756 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 385 then
+# line 756 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 139 then
+# line 760 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 170 then
+# line 760 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 384 then
+# line 760 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 134 then
+# line 766 "lib/parser/lexer.rl"
+ begin
+ @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 766 "lib/parser/lexer.rl"
+ begin
+ @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 379 then
+# line 766 "lib/parser/lexer.rl"
+ begin
+ @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 133 then
+# line 770 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 770 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 378 then
+# line 770 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 138 then
+# line 776 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 169 then
+# line 776 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 383 then
+# line 776 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 135 then
+# line 790 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 166 then
+# line 790 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 380 then
+# line 790 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 119 then
+# line 816 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :escape_eof, nil, range(p - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 816 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :escape_eof, nil, range(p - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 816 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :escape_eof, nil, range(p - 1, p)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 177 then
+# line 822 "lib/parser/lexer.rl"
+ begin
+
+ @escape_s = p
+ @escape = nil
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 182 then
+# line 822 "lib/parser/lexer.rl"
+ begin
+
+ @escape_s = p
+ @escape = nil
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 58 then
+# line 862 "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 498 "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 31 then
+# line 862 "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 1563 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+ when 33 then
+# line 862 "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 1583 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+ when 35 then
+# line 862 "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 1611 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+ when 219 then
+# line 862 "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 238 then
+# line 862 "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 1454 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 246 then
+# line 862 "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 1486 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 34 then
+# line 862 "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 1623 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 277 then
+# line 862 "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 1628 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 269 then
+# line 862 "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 1634 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 288 then
+# line 862 "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 1712 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 300 then
+# line 862 "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 1733 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 296 then
+# line 862 "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 1736 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 59 then
+# line 862 "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 1754 "lib/parser/lexer.rl"
+ begin
+ @te = p+1
+ begin
+ emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1)
+ p = p - 1; @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 50 then
+# line 862 "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 2114 "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 = 465;
+ else
+ @cs = 525;
+ end
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 318 then
+# line 862 "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 2130 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 402 then
+# line 862 "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 2157 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 398 then
+# line 862 "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 2160 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ if @context.in_kwarg
+ p = p - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+
+ else
+ begin
+ @cs = 186
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ end
+ when 411 then
+# line 862 "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 2188 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 408 then
+# line 862 "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 2191 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin begin
+ @cs = 186
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 495 then
+# line 862 "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 2505 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 427 then
+# line 862 "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 2508 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin begin
+ @cs = 990
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 101 then
+# line 862 "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 2601 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 268 then
+# line 1068 "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 1530 "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 = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 290 then
+# line 1068 "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 1696 "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 = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 393 then
+# line 1068 "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 1976 "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 508 then
+# line 1068 "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 2213 "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 = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 509 then
+# line 1077 "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 2450 "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 = 810;
+ else
+ @cs = 531;
+ end
+ else # )
+ # fnext expr_endfn; ?
+ end
+
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 61 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+ when 65 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 498 "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 222 then
+# line 1229 "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 237 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1454 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 249 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1486 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 271 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1631 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 286 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1712 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 298 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1733 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 324 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2130 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 400 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2157 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 410 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2188 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 431 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2505 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 103 then
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2601 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 243 then
+# line 1270 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 1476 "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 338 then
+# line 1270 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 1882 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm)
+ p = tm - 1
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 309 then
+# line 1270 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 2103 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 424 then
+# line 1270 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 1 "NONE"
+ begin
+ case @act
+ when 145 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 = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ when 146 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ @cs = 352; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 147 then
+ begin begin p = (( @te))-1; end
+ emit(:kCLASS, 'class'.freeze, @ts, @ts + 5)
+ emit(:tLSHFT, '<<'.freeze, @te - 2, @te)
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 148 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 149 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ @command_start = true
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 150 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ @cs = 539; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 151 then
+ begin begin p = (( @te))-1; end
+
+ emit_table(KEYWORDS)
+
+ if version?(18) && tok == 'not'.freeze
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ else
+ @cs = 494; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 152 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 153 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS)
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 154 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 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(:tINTEGER, tok(@ts, @te - 1).to_i, @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
+
+ 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 158 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 160 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 164 then
+ begin begin p = (( @te))-1; end
+
+ emit(:tIDENTIFIER)
+
+ if !@static_env.nil? && @static_env.declared?(tok)
+ @cs = 465; 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 165 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 = 494; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ when 167 then
+ begin begin p = (( @te))-1; end
+
+ emit_table(PUNCTUATION);
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ when 168 then
+ begin begin p = (( @te))-1; end
+ emit_table(PUNCTUATION)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+end
+ end
+ when 244 then
+# line 1271 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 1476 "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 339 then
+# line 1271 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 1882 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm)
+ p = tm - 1
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 311 then
+# line 1271 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 2103 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 425 then
+# line 1271 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 2414 "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 = 494; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 340 then
+# line 1276 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 1882 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm)
+ p = tm - 1
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 312 then
+# line 1276 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 2103 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 341 then
+# line 1277 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 1882 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm)
+ p = tm - 1
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 313 then
+# line 1277 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 2103 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 345 then
+# line 1278 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 1882 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm)
+ p = tm - 1
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 316 then
+# line 1278 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 2103 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 344 then
+# line 1279 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 1882 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm)
+ p = tm - 1
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 315 then
+# line 1279 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 1 "NONE"
+ begin
+ case @act
+ when 99 then
+ begin begin p = (( @te))-1; end
+
+ emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1)
+ p = p - 1; @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ when 106 then
+ begin begin p = (( @te))-1; end
+
+ diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1)
+ end
+ when 117 then
+ begin begin p = (( @te))-1; end
+
+ if @version >= 27
+ emit(:tPIPE, tok(@ts, @ts + 1), @ts, @ts + 1)
+ p = p - 1;
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ else
+ p -= 2
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+
+ end
+ end
+ when 121 then
+ begin begin p = (( @te))-1; end
+ emit_table(PUNCTUATION_BEGIN)
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 122 then
+ begin begin p = (( @te))-1; end
+ emit(:kRESCUE, 'rescue'.freeze, @ts, tm)
+ p = tm - 1
+ @cs = 539; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 123 then
+ begin begin p = (( @te))-1; end
+ emit_table(KEYWORDS_BEGIN)
+ @command_start = true
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ when 127 then
+ begin begin p = (( @te))-1; end
+ p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ when 128 then
+ begin begin p = (( @te))-1; end
+
+ emit(:tIDENTIFIER)
+
+ if !@static_env.nil? && @static_env.declared?(tok)
+ @cs = 465; 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 132 then
+ begin begin p = (( @te))-1; end
+ p = @ts - 1; begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+end
+ end
+ when 342 then
+# line 1280 "lib/parser/lexer.rl"
+ begin
+ tm = p - 3 end
+# line 1882 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm)
+ p = tm - 1
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 314 then
+# line 1280 "lib/parser/lexer.rl"
+ begin
+ tm = p - 3 end
+# line 2103 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin p = @ts - 1
+ begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 343 then
+# line 1285 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 1882 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm)
+ p = tm - 1
+ @cs = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 490 then
+# line 1290 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2 end
+# line 2396 "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 267 then
+# line 1296 "lib/parser/lexer.rl"
+ begin
+
+ @cond.push(false); @cmdarg.push(false)
+
+ @paren_nest += 1
+ end
+# line 1524 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit(:tLBRACK, '['.freeze, @te - 1, @te)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 386 then
+# line 1296 "lib/parser/lexer.rl"
+ begin
+
+ @cond.push(false); @cmdarg.push(false)
+
+ @paren_nest += 1
+ end
+# line 1990 "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 493 then
+# line 1296 "lib/parser/lexer.rl"
+ begin
+
+ @cond.push(false); @cmdarg.push(false)
+
+ @paren_nest += 1
+ end
+# line 2483 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit(:tLBRACK2, '['.freeze)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 496 then
+# line 1302 "lib/parser/lexer.rl"
+ begin
+
+ @paren_nest -= 1
+ end
+# line 2450 "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 = 810;
+ else
+ @cs = 531;
+ end
+ else # )
+ # fnext expr_endfn; ?
+ end
+
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 259 then
+# line 1309 "lib/parser/lexer.rl"
+ begin
+
+ @cond.push(false); @cmdarg.push(false)
+
+ @paren_nest += 1
+
+ if version?(18)
+ @command_start = true
+ end
+ end
+# line 1505 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ if version?(18)
+ emit(:tLPAREN2, '('.freeze, @te - 1, @te)
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ else
+ emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ end
+ when 272 then
+# line 1309 "lib/parser/lexer.rl"
+ begin
+
+ @cond.push(false); @cmdarg.push(false)
+
+ @paren_nest += 1
+
+ if version?(18)
+ @command_start = true
+ end
+ end
+# line 1518 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit(:tLPAREN2, '('.freeze)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 280 then
+# line 1309 "lib/parser/lexer.rl"
+ begin
+
+ @cond.push(false); @cmdarg.push(false)
+
+ @paren_nest += 1
+
+ if version?(18)
+ @command_start = true
+ end
+ end
+# line 1650 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin
+ emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te)
+ if version?(18)
+ @cs = 802; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ else
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ end
+ when 328 then
+# line 1309 "lib/parser/lexer.rl"
+ begin
+
+ @cond.push(false); @cmdarg.push(false)
+
+ @paren_nest += 1
+
+ if version?(18)
+ @command_start = true
+ end
+ end
+# line 1995 "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 437 then
+# line 1309 "lib/parser/lexer.rl"
+ begin
+
+ @cond.push(false); @cmdarg.push(false)
+
+ @paren_nest += 1
+
+ if version?(18)
+ @command_start = true
+ end
+ end
+# line 2446 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit_table(PUNCTUATION)
+ @cs = 563; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 438 then
+# line 1319 "lib/parser/lexer.rl"
+ begin
+
+ @paren_nest -= 1
+ end
+# line 2450 "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 = 810;
+ else
+ @cs = 531;
+ end
+ else # )
+ # fnext expr_endfn; ?
+ end
+
+ begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 72 then
+# line 1803 "lib/parser/lexer.rl"
+ begin
+ heredoc_e = p end
+# line 498 "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 353 then
+# line 1804 "lib/parser/lexer.rl"
+ begin
+ new_herebody_s = p end
+# line 1805 "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 = 563; 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 348 then
+# line 1895 "lib/parser/lexer.rl"
+ begin
+ tm = p - 1; diag_msg = :ivar_name end
+# line 1898 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 351 then
+# line 1896 "lib/parser/lexer.rl"
+ begin
+ tm = p - 2; diag_msg = :cvar_name end
+# line 1898 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 359 then
+# line 1916 "lib/parser/lexer.rl"
+ begin
+ @escape = nil end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 389 then
+# line 2005 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 2006 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin emit(:kRESCUE, 'rescue'.freeze, @ts, tm)
+ p = tm - 1
+ @cs = 539; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+ end
+ end
+ when 480 then
+# line 2298 "lib/parser/lexer.rl"
+ begin
+ @num_base = 16; @num_digits_s = p end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+ when 474 then
+# line 2299 "lib/parser/lexer.rl"
+ begin
+ @num_base = 10; @num_digits_s = p end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+ when 477 then
+# line 2300 "lib/parser/lexer.rl"
+ begin
+ @num_base = 8; @num_digits_s = p end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+ when 471 then
+# line 2301 "lib/parser/lexer.rl"
+ begin
+ @num_base = 2; @num_digits_s = p end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+ when 486 then
+# line 2302 "lib/parser/lexer.rl"
+ begin
+ @num_base = 10; @num_digits_s = @ts end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+ when 449 then
+# line 2303 "lib/parser/lexer.rl"
+ begin
+ @num_base = 8; @num_digits_s = @ts end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+ when 487 then
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+ when 8 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 498 "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 453 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2362 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+ when 228 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1383 "lib/parser/lexer.rl"
+ begin
+ @act = 43; end
+ when 215 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1387 "lib/parser/lexer.rl"
+ begin
+ @act = 44; end
+ when 211 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1391 "lib/parser/lexer.rl"
+ begin
+ @act = 45; end
+ when 27 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1567 "lib/parser/lexer.rl"
+ begin
+ @act = 72; end
+ when 261 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1584 "lib/parser/lexer.rl"
+ begin
+ @act = 73; end
+ when 28 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1623 "lib/parser/lexer.rl"
+ begin
+ @act = 78; end
+ when 254 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1628 "lib/parser/lexer.rl"
+ begin
+ @act = 79; end
+ when 281 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1660 "lib/parser/lexer.rl"
+ begin
+ @act = 85; end
+ when 46 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1673 "lib/parser/lexer.rl"
+ begin
+ @act = 86; end
+ when 302 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1727 "lib/parser/lexer.rl"
+ begin
+ @act = 93; end
+ when 291 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1731 "lib/parser/lexer.rl"
+ begin
+ @act = 94; end
+ when 70 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1851 "lib/parser/lexer.rl"
+ begin
+ @act = 106; end
+ when 394 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1959 "lib/parser/lexer.rl"
+ begin
+ @act = 117; end
+ when 305 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2000 "lib/parser/lexer.rl"
+ begin
+ @act = 121; end
+ when 388 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2006 "lib/parser/lexer.rl"
+ begin
+ @act = 122; end
+ when 387 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2012 "lib/parser/lexer.rl"
+ begin
+ @act = 123; end
+ when 75 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2103 "lib/parser/lexer.rl"
+ begin
+ @act = 127; end
+ when 303 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1324 "lib/parser/lexer.rl"
+ begin
+ @act = 128; end
+ when 306 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2149 "lib/parser/lexer.rl"
+ begin
+ @act = 132; end
+ when 504 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2213 "lib/parser/lexer.rl"
+ begin
+ @act = 145; end
+ when 499 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2242 "lib/parser/lexer.rl"
+ begin
+ @act = 146; end
+ when 507 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2252 "lib/parser/lexer.rl"
+ begin
+ @act = 148; end
+ when 500 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2257 "lib/parser/lexer.rl"
+ begin
+ @act = 149; end
+ when 501 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2262 "lib/parser/lexer.rl"
+ begin
+ @act = 150; end
+ when 506 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2266 "lib/parser/lexer.rl"
+ begin
+ @act = 151; end
+ when 498 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2277 "lib/parser/lexer.rl"
+ begin
+ @act = 152; end
+ when 492 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2291 "lib/parser/lexer.rl"
+ begin
+ @act = 153; end
+ when 418 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2305 "lib/parser/lexer.rl"
+ begin
+ @act = 154; end
+ when 451 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2349 "lib/parser/lexer.rl"
+ begin
+ @act = 157; end
+ when 82 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2364 "lib/parser/lexer.rl"
+ begin
+ @act = 158; end
+ when 421 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2392 "lib/parser/lexer.rl"
+ begin
+ @act = 160; end
+ when 412 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1324 "lib/parser/lexer.rl"
+ begin
+ @act = 164; end
+ when 423 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2414 "lib/parser/lexer.rl"
+ begin
+ @act = 165; end
+ when 416 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2440 "lib/parser/lexer.rl"
+ begin
+ @act = 167; end
+ when 422 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2446 "lib/parser/lexer.rl"
+ begin
+ @act = 168; end
+ when 88 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2537 "lib/parser/lexer.rl"
+ begin
+ @act = 181; end
+ when 511 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2576 "lib/parser/lexer.rl"
+ begin
+ @act = 185; end
+ when 183 then
+# line 498 "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 954 "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 (<= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 704 "lib/parser/lexer.rl"
+ begin
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 704 "lib/parser/lexer.rl"
+ begin
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 131 then
+# line 704 "lib/parser/lexer.rl"
+ begin
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 704 "lib/parser/lexer.rl"
+ begin
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 704 "lib/parser/lexer.rl"
+ begin
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 122 then
+# line 720 "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 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 720 "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 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 720 "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 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 130 then
+# line 720 "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 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 720 "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 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 720 "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 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 126 then
+# line 744 "lib/parser/lexer.rl"
+ begin
+ @escape = "\x7f" end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 157 then
+# line 744 "lib/parser/lexer.rl"
+ begin
+ @escape = "\x7f" end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 744 "lib/parser/lexer.rl"
+ begin
+ @escape = "\x7f" end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 129 then
+# line 745 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(p - 2, p).to_i(16)) end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 745 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(p - 2, p).to_i(16)) end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 745 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(p - 2, p).to_i(16)) end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 136 then
+# line 776 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p)
+ end
+# line 790 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 167 then
+# line 776 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p)
+ end
+# line 790 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 381 then
+# line 776 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p)
+ end
+# line 790 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 116 then
+# line 822 "lib/parser/lexer.rl"
+ begin
+
+ @escape_s = p
+ @escape = nil
+ end
+# line 816 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :escape_eof, nil, range(p - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 822 "lib/parser/lexer.rl"
+ begin
+
+ @escape_s = p
+ @escape = nil
+ end
+# line 816 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :escape_eof, nil, range(p - 1, p)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 822 "lib/parser/lexer.rl"
+ begin
+
+ @escape_s = p
+ @escape = nil
+ end
+# line 816 "lib/parser/lexer.rl"
+ begin
+
+ diagnostic :fatal, :escape_eof, nil, range(p - 1, p)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 62 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 498 "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 221 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "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 236 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1454 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 248 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1486 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 270 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1631 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; begin begin
+ @cs = 810
+ _goto_level = _again
+ next
+ end
+ end
+ end
+ when 285 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1712 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 297 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1733 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 323 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2130 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 399 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2157 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 409 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2188 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 430 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2505 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 102 then
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2601 "lib/parser/lexer.rl"
+ begin
+ @te = p
+p = p - 1; end
+ when 482 then
+# line 2302 "lib/parser/lexer.rl"
+ begin
+ @num_base = 10; @num_digits_s = @ts end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+ when 446 then
+# line 2303 "lib/parser/lexer.rl"
+ begin
+ @num_base = 8; @num_digits_s = @ts end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+ when 461 then
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+# line 2305 "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 2361 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 641 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars)) } end
+# line 2364 "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 2362 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 641 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars)) } end
+# line 2364 "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 276 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 498 "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 1628 "lib/parser/lexer.rl"
+ begin
+ @act = 79; end
+ when 36 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 862 "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 1623 "lib/parser/lexer.rl"
+ begin
+ @act = 78; end
+ when 47 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 862 "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 1673 "lib/parser/lexer.rl"
+ begin
+ @act = 86; end
+ when 94 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 862 "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 2537 "lib/parser/lexer.rl"
+ begin
+ @act = 181; end
+ when 66 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1754 "lib/parser/lexer.rl"
+ begin
+ @act = 99; end
+ when 85 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2246 "lib/parser/lexer.rl"
+ begin
+ @act = 147; end
+ when 93 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2537 "lib/parser/lexer.rl"
+ begin
+ @act = 181; end
+ when 38 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1583 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 1584 "lib/parser/lexer.rl"
+ begin
+ @act = 73; end
+ when 391 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2005 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 2103 "lib/parser/lexer.rl"
+ begin
+ @act = 127; end
+ when 390 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2005 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 1324 "lib/parser/lexer.rl"
+ begin
+ @act = 128; end
+ when 483 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2302 "lib/parser/lexer.rl"
+ begin
+ @num_base = 10; @num_digits_s = @ts end
+# line 2305 "lib/parser/lexer.rl"
+ begin
+ @act = 154; end
+ when 127 then
+# line 704 "lib/parser/lexer.rl"
+ begin
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 704 "lib/parser/lexer.rl"
+ begin
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 704 "lib/parser/lexer.rl"
+ begin
+
+ codepoint = @source_pts[p - 1]
+
+ if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U'
+ diagnostic :fatal, :invalid_escape
+ end
+
+ if (@escape = ESCAPES[codepoint]).nil?
+ @escape = encode_escape(@source_buffer.slice(p - 1))
+ end
+ end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 125 then
+# line 720 "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 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 720 "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 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 720 "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 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 132 then
+# line 738 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(p - 2, p).to_i(16)) end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 738 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(p - 2, p).to_i(16)) end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 377 then
+# line 738 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(p - 2, p).to_i(16)) end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 128 then
+# line 745 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(p - 2, p).to_i(16)) end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 745 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(p - 2, p).to_i(16)) end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 895 "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? && @version >= 31 && %w[c C m M].include?(escaped_char)
+ # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence
+ # supported by regexes so far, so it needs a separate branch.
+ current_literal.extend_string(@escape, @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 745 "lib/parser/lexer.rl"
+ begin
+ @escape = encode_escape(tok(p - 2, p).to_i(16)) end
+# line 728 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord & 0x9f)
+ end
+# line 732 "lib/parser/lexer.rl"
+ begin
+
+ @escape = encode_escape(@escape[0].ord | 0x80)
+ end
+# line 1918 "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 = 810; begin
+ p += 1
+ _goto_level = _out
+ next
+ end
+
+ end
+ end
+ when 478 then
+# line 2298 "lib/parser/lexer.rl"
+ begin
+ @num_base = 16; @num_digits_s = p end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+# line 2305 "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 2299 "lib/parser/lexer.rl"
+ begin
+ @num_base = 10; @num_digits_s = p end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+# line 2305 "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 475 then
+# line 2300 "lib/parser/lexer.rl"
+ begin
+ @num_base = 8; @num_digits_s = p end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+# line 2305 "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 469 then
+# line 2301 "lib/parser/lexer.rl"
+ begin
+ @num_base = 2; @num_digits_s = p end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+# line 2305 "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 481 then
+# line 2302 "lib/parser/lexer.rl"
+ begin
+ @num_base = 10; @num_digits_s = @ts end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+# line 2305 "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 2303 "lib/parser/lexer.rl"
+ begin
+ @num_base = 8; @num_digits_s = @ts end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+# line 2305 "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 32 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 862 "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 1583 "lib/parser/lexer.rl"
+ begin
+ tm = p end
+# line 1584 "lib/parser/lexer.rl"
+ begin
+ @act = 73; end
+ when 63 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 1754 "lib/parser/lexer.rl"
+ begin
+ @act = 99; end
+ when 92 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 1226 "lib/parser/lexer.rl"
+ begin
+ @sharp_s = p - 1 end
+# line 1229 "lib/parser/lexer.rl"
+ begin
+ emit_comment(@sharp_s, p == pe ? p - 2 : p) end
+# line 2537 "lib/parser/lexer.rl"
+ begin
+ @act = 181; end
+ when 488 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+# line 2337 "lib/parser/lexer.rl"
+ begin
+ @act = 156; end
+ when 484 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2302 "lib/parser/lexer.rl"
+ begin
+ @num_base = 10; @num_digits_s = @ts end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+# line 2337 "lib/parser/lexer.rl"
+ begin
+ @act = 156; end
+ when 448 then
+# line 1 "NONE"
+ begin
+ @te = p+1
+ end
+# line 2303 "lib/parser/lexer.rl"
+ begin
+ @num_base = 8; @num_digits_s = @ts end
+# line 2304 "lib/parser/lexer.rl"
+ begin
+ @num_suffix_s = p end
+# line 632 "lib/parser/lexer.rl"
+ begin
+ @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end
+# line 2337 "lib/parser/lexer.rl"
+ begin
+ @act = 156; end
+# line 24769 "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 24779 "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 283 "lib/parser/lexer.rl"
+ # %
+
+ # Ragel creates a local variable called `testEof` but it doesn't use
+ # it in any assignment. This dead code is here to swallow the warning.
+ # It has no runtime cost because Ruby doesn't produce any instructions from it.
+ if false
+ testEof
+ end
+
+ @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 2616 "lib/parser/lexer.rl"
+
+ # %
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/dedenter.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/dedenter.rb
new file mode 100644
index 000000000..5746cff64
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/dedenter.rb
@@ -0,0 +1,88 @@
+# 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")
+ if lines.length == 1
+ # If the line continuation sequence was found but there is no second
+ # line, it was not really a line continuation and must be ignored.
+ lines = [string.force_encoding(original_encoding)]
+ else
+ lines.map! {|s| s.force_encoding(original_encoding) }
+ end
+
+ 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/explanation.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/explanation.rb
new file mode 100644
index 000000000..2ca384c57
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/explanation.rb
@@ -0,0 +1,55 @@
+# 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 @context.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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/literal.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/literal.rb
new file mode 100644
index 000000000..ea47b46c3
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/literal.rb
@@ -0,0 +1,269 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/stack_state.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/stack_state.rb
new file mode 100644
index 000000000..d97114f15
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/lexer/stack_state.rb
@@ -0,0 +1,49 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/macruby.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/macruby.rb
new file mode 100644
index 000000000..e490e4198
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/macruby.rb
@@ -0,0 +1,6177 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-286,-97,205,206,419,-94,-94,-286,-286,-286,257,205,206,-286,-286,-80',
+'-286,556,514,468,588,-66,514,208,514,-97,-470,-468,535,486,487,205,206',
+'-470,-468,-95,-286,-286,707,-286,-286,-286,-286,-286,897,-95,720,514',
+'514,759,719,-96,-93,-100,587,667,504,205,206,506,209,736,897,667,-99',
+'491,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286',
+'-286,555,-86,-286,-286,-286,-100,573,-94,923,667,-286,-98,105,-286,499',
+'-97,256,104,-286,-95,-286,209,-286,-286,-286,-286,-286,-286,-286,-538',
+'-286,-86,-286,897,-99,-97,-538,-538,-538,-94,-97,209,-538,-538,-94,-538',
+'-286,-286,-534,-90,-89,-286,105,534,-538,-98,105,104,105,786,-87,104',
+'257,104,257,-538,-538,209,-538,-538,-538,-538,-538,105,758,105,-535',
+'-85,104,-95,104,105,105,105,-95,-96,104,104,104,-91,-96,588,940,-473',
+'-96,-538,-538,-538,-538,-538,-538,-538,-538,-538,-538,-538,-538,-538',
+'-538,105,-92,-538,-538,-538,104,574,-90,-404,504,-538,-538,503,-538',
+'767,803,587,252,-538,252,-538,931,-538,-538,-538,-538,-538,-538,-538',
+'76,-538,-538,-538,-93,569,-87,932,105,77,256,-538,256,104,767,545,-463',
+'-538,-538,78,-88,-534,-538,-463,-463,-463,-96,200,-463,-463,-463,-404',
+'-463,768,-538,-94,504,228,-404,506,-463,-538,-463,-463,-463,526,-534',
+'-404,-89,527,-538,199,-463,-463,-97,-463,-463,-463,-463,-463,198,-88',
+'817,-538,-89,-404,197,588,-538,225,-538,588,-87,227,226,-534,547,546',
+'557,-538,781,631,-463,-463,-463,-463,-463,-463,-463,-463,-463,-463,-463',
+'-463,-463,-463,897,-538,-463,-463,-463,587,-463,-463,466,587,-463,-473',
+'-87,-463,-463,-87,-463,631,-463,520,-463,-87,-463,-463,-463,-463,-463',
+'-463,-463,-465,-463,491,-463,209,-89,732,-465,647,646,645,651,648,205',
+'206,-532,-531,-463,-463,-463,-463,-538,-463,204,-463,-85,-463,568,-538',
+'-538,-538,-93,-466,-538,-538,-538,113,-538,953,-466,897,-89,897,653',
+'-89,-91,-538,-538,-538,-538,-89,-99,657,656,660,659,504,-538,-538,506',
+'-538,-538,-538,-538,-538,897,-92,-463,-460,957,-87,540,-100,940,-463',
+'-460,-95,105,541,-532,-531,545,104,-463,-460,960,731,-538,-538,-538',
+'-538,-538,-538,-538,-538,-538,-538,-538,-538,-538,-538,-532,-531,-538',
+'-538,-538,-287,721,-538,-463,961,-538,963,-287,-538,-538,-463,-538,897',
+'-538,545,-538,-287,-538,-538,-538,-538,-538,-538,-538,897,-538,-538',
+'-538,775,545,647,646,645,651,648,545,547,546,550,545,530,-538,-538,-538',
+'-538,-286,-538,922,-538,940,-96,209,-286,-286,-286,105,531,-286,-286',
+'-286,104,-286,775,522,647,646,645,651,648,105,523,-286,-286,-286,104',
+'547,546,543,105,521,209,-286,-286,104,-286,-286,-286,-286,-286,376,547',
+'546,205,206,378,377,547,546,552,699,547,546,548,-467,105,228,850,302',
+'303,104,-467,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286',
+'-286,-286,-286,228,-472,-286,-286,-286,482,722,-286,-472,228,-286,228',
+'483,-286,-286,938,-286,-472,-286,209,-286,481,-286,-286,-286,-286,-286',
+'-286,-286,-80,-286,775,-286,647,646,645,651,648,775,613,647,646,645',
+'651,648,202,-286,-286,-286,-286,-460,-286,203,-286,209,-98,897,-460',
+'-460,-460,-535,201,-460,-460,-460,497,-460,775,653,647,646,645,651,648',
+'-460,771,-460,-460,-460,660,659,249,781,631,774,624,-460,-460,250,-460',
+'-460,-460,-460,-460,775,-469,647,646,645,651,648,578,-469,-534,771,775',
+'101,647,646,645,651,648,631,774,205,206,-460,-460,-460,-460,-460,-460',
+'-460,-460,-460,-460,-460,-460,-460,-460,252,771,-460,-460,-460,209,-460',
+'-460,228,209,-460,663,771,-460,-460,-266,-460,564,-460,561,-460,901',
+'-460,-460,-460,-460,-460,-460,-460,520,-460,775,-460,647,646,645,651',
+'648,670,558,225,940,698,-471,227,226,-460,-460,-460,-460,-471,-460,701',
+'-460,-267,-460,277,69,70,66,9,52,-460,708,525,58,59,524,653,-460,62',
+'453,60,61,63,28,29,67,68,660,659,368,453,520,27,26,25,93,92,94,95,209',
+'775,18,647,646,645,651,648,8,42,724,10,97,96,98,87,51,89,88,90,468,91',
+'99,100,508,85,86,39,40,38,775,466,647,646,645,651,648,775,771,647,646',
+'645,651,648,-280,209,-286,-472,507,37,743,-280,31,-286,-472,53,54,468',
+'-535,55,-280,33,-286,-472,624,41,775,771,647,646,645,651,648,19,653',
+'209,500,499,84,76,79,80,252,81,82,660,659,228,77,83,5,69,70,66,9,52',
+'57,252,78,58,59,624,228,653,62,228,60,61,63,28,29,67,68,493,660,659',
+'750,492,27,26,25,93,92,94,95,-266,775,18,647,646,645,651,648,8,42,7',
+'10,97,96,98,87,51,89,88,90,754,91,99,100,761,85,86,39,40,38,775,763',
+'647,646,645,651,648,775,771,647,646,645,651,648,-287,766,884,-280,769',
+'37,777,-287,31,885,-280,53,54,778,631,55,-287,33,883,-280,785,41,775',
+'771,647,646,645,651,648,19,653,488,209,252,84,76,79,80,209,81,82,660',
+'659,261,77,83,277,69,70,66,9,52,57,484,78,58,59,209,794,653,62,477,60',
+'61,63,28,29,67,68,476,660,659,-268,209,27,26,25,93,92,94,95,-65,815',
+'18,647,646,645,468,648,8,42,466,10,97,96,98,87,51,89,88,90,464,91,99',
+'100,805,85,86,39,40,38,815,494,647,646,645,807,648,775,495,647,646,645',
+'651,648,-330,810,530,417,811,37,731,-330,31,529,818,53,54,453,209,55',
+'-330,33,531,824,825,41,775,208,647,646,645,651,648,19,653,624,421,420',
+'84,76,79,80,418,81,82,660,659,731,77,83,277,69,70,66,9,52,57,845,78',
+'58,59,848,767,653,62,209,60,61,63,28,29,67,68,852,660,659,379,854,27',
+'26,25,93,92,94,95,693,694,18,366,695,99,100,209,8,42,860,10,97,96,98',
+'87,51,89,88,90,301,91,99,100,862,85,86,39,40,38,228,108,109,110,111',
+'112,209,775,-286,647,646,645,651,648,-287,-286,865,-269,872,37,-535',
+'-287,31,873,-286,53,54,300,876,55,-287,33,225,878,466,41,227,226,223',
+'224,881,886,247,19,653,209,890,893,84,76,79,80,895,81,82,660,659,897',
+'77,83,277,69,70,66,9,52,57,897,78,58,59,209,902,905,62,906,60,61,63',
+'28,29,67,68,108,109,110,111,112,27,26,25,93,92,94,95,911,913,18,916',
+'918,228,,,8,42,,10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+'228,-557,-557,-557,-557,234,236,225,-286,-557,-557,227,226,223,224,-286',
+'242,243,,37,-535,,31,,-286,53,54,,,55,,33,225,,231,41,227,226,223,224',
+'235,233,229,19,230,,,,84,76,79,80,,81,82,,,,77,83,277,69,70,66,9,52',
+'57,,78,58,59,,,,62,,60,61,63,28,29,67,68,108,109,110,111,112,27,26,25',
+'93,92,94,95,,,18,108,109,110,111,112,8,42,,10,97,96,98,87,51,89,88,90',
+',91,99,100,,85,86,39,40,38,228,232,237,238,239,234,236,244,415,240,241',
+',,,,416,242,243,,37,,,31,,417,53,54,,,55,,33,225,,231,41,227,226,223',
+'224,235,233,229,19,230,,,,84,76,79,80,,81,82,,,,77,83,277,69,70,66,9',
+'52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95',
+',,18,,,,,562,8,42,,10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40',
+'38,228,232,237,238,239,234,236,244,245,240,241,,221,222,,,242,243,,37',
+',,31,,,53,54,,,55,,33,225,,231,41,227,226,223,224,235,233,229,19,230',
+',,,84,76,79,80,,81,82,,,,77,83,,246,-281,-233,,,57,,78,-281,-281,-281',
+',,-281,-281,-281,732,-281,647,646,645,651,648,,,,,-281,-281,-281,,,',
+',,,,-281,-281,,-281,-281,-281,-281,-281,,,,,,,,,653,,,,,,,,,657,656',
+'660,659,,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281',
+'-281,-281,,,-281,-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,69,70,66,9,52,,,,58,59,,,,62,,60,61,63,28,29',
+'67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,7,10,97,96,98,87,51,89',
+'88,90,,91,99,100,,85,86,39,40,38,228,,,,,,,,,,,,,,,,242,243,,37,,,31',
+',,53,54,,,55,,33,225,,231,41,227,226,223,224,,,229,19,230,,,,84,76,79',
+'80,,81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28',
+'29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51',
+'89,88,90,,91,99,100,,85,86,39,40,38,228,,,,,,,,,,,,,,,,242,243,,37,',
+',31,,,53,54,,,55,,33,225,,231,41,227,226,223,224,,,229,19,230,,,,84',
+'76,79,80,,81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61',
+'63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,39,40,38,228,,,,,,,,,,,,,,,,242,243',
+',37,,,31,,,53,54,,,55,,33,225,,231,41,227,226,223,224,,,229,19,230,',
+',,84,76,79,80,,81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,',
+'60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97',
+'96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,228,232,237,238,239',
+'234,236,244,245,240,241,,-557,-557,,,242,243,,37,,,31,,,53,54,,,55,',
+'33,225,,231,41,227,226,223,224,235,233,229,19,230,,,,84,76,79,80,,81',
+'82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28,29,67',
+'68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51,89,88',
+'90,,91,99,100,,85,86,39,40,38,228,232,237,238,239,234,236,244,245,240',
+'241,,-557,-557,,,242,243,,37,,,31,,,53,54,,,55,,33,225,,231,41,227,226',
+'223,224,235,233,229,19,230,,,,84,76,79,80,,81,82,,,,77,83,277,69,70',
+'66,9,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92',
+'94,95,,,18,,,,,,8,42,,10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39',
+'40,38,228,-557,-557,-557,-557,234,236,,,-557,-557,,,,,,242,243,,37,',
+',279,,,53,54,,,55,,33,225,,231,41,227,226,223,224,235,233,229,19,230',
+',,,84,76,79,80,,81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62',
+',60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97',
+'96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,228,,,,,,,,,,,,,,,,242',
+'243,,37,,,31,,,53,54,,,55,,33,225,,231,41,227,226,223,224,,,229,19,230',
+',,,84,76,79,80,,81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62',
+',60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97',
+'96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,228,-557,-557,-557,-557',
+'234,236,,,-557,-557,,,,,,242,243,,37,,,31,,,53,54,,,55,,33,225,,231',
+'41,227,226,223,224,235,233,229,19,230,,,,84,76,79,80,,81,82,,,,77,83',
+'277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26',
+'25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51,89,88,90,,91,99,100',
+',85,86,39,40,38,228,-557,-557,-557,-557,234,236,,,-557,-557,,,,,,242',
+'243,,37,,,31,,,53,54,,,55,,33,225,,231,41,227,226,223,224,235,233,229',
+'19,230,,,,84,76,79,80,,81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59',
+',,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42',
+',10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,228,-557,-557',
+'-557,-557,234,236,,,-557,-557,,,,,,242,243,,37,,,31,,,53,54,,,55,,33',
+'225,,231,41,227,226,223,224,235,233,229,19,230,,,,84,76,79,80,,81,82',
+',,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68',
+',,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51,89,88,90',
+',91,99,100,,85,86,39,40,38,228,232,237,238,239,234,236,,,240,241,,,',
+',,242,243,,37,,,279,,,53,54,,,55,,33,225,,231,41,227,226,223,224,235',
+'233,229,19,230,,,,84,76,79,80,,81,82,,,,77,83,277,69,70,66,9,52,57,',
+'78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18',
+',,,,,8,42,,10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,228',
+'-557,-557,-557,-557,234,236,,,-557,-557,,,,,,242,243,,37,,,31,,,53,54',
+',,55,,33,225,,231,41,227,226,223,224,235,233,229,19,230,,,,84,76,79',
+'80,,81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28',
+'29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51',
+'89,88,90,,91,99,100,,85,86,39,40,38,228,,,,,,,,,,,,,,,,242,243,,37,',
+',31,,,53,54,,,55,,33,225,,,41,227,226,223,224,,,,19,,,,,84,76,79,80',
+',81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28,29',
+'67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51,89',
+'88,90,,91,99,100,,85,86,39,40,38,228,,,,,,,,,,,,,,,,242,243,,37,,,31',
+',,53,54,,,55,,33,225,,231,41,227,226,223,224,,,,19,,,,,84,76,79,80,',
+'81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28,29',
+'67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51,89',
+'88,90,,91,99,100,,85,86,39,40,38,228,,,,,,,,,,,,,,,,242,243,,37,,,31',
+',,53,54,,,55,,33,225,,231,41,227,226,223,224,,,,19,,,,,84,76,79,80,',
+'81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28,29',
+'67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51,89',
+'88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,37,,,31,,,53,54',
+',,55,,33,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82,,,,77,83,277,69,70,66',
+'9,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94',
+'95,,,18,,,,,,8,42,,10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40',
+'38,,,,,,,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,84',
+'76,79,80,,81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61',
+'63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,37,,,279',
+',,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82,,,,77,83,277',
+'69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25',
+'93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51,89,88,90,,91,99,100,,85',
+'86,39,40,38,,,,,,,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,',
+',19,,,,,84,76,79,80,,81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,',
+',,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42',
+',10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,',
+',,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82',
+',,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68',
+',,,,,27,26,25,93,92,94,95,,,18,,,,,565,8,42,,10,97,96,98,87,51,89,88',
+'90,,91,99,100,,85,86,39,40,38,228,232,237,238,239,234,236,244,245,240',
+'241,,221,222,,,242,243,,37,,,31,,,53,54,,,55,,33,225,,231,41,227,226',
+'223,224,235,233,229,19,230,,,,84,76,79,80,,81,82,,,,77,83,,246,-540',
+',,,57,,78,-540,-540,-540,,,-540,-540,-540,732,-540,647,646,645,651,648',
+',,,-540,-540,-540,-540,,,,,,,,-540,-540,,-540,-540,-540,-540,-540,,',
+',,,,,,653,,,,,,,,,657,656,660,659,,-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,-539',
+'-540,-540,-540,,,,-539,-539,-539,,,-539,-539,-539,,-539,-540,-540,-540',
+'-540,,-540,,-540,-539,-539,-539,-539,,,,,,,,-539,-539,,-539,-539,-539',
+'-539,-539,,,,,,,,,,,,,,,,,,,,,,,-539,-539,-539,-539,-539,-539,-539,-539',
+'-539,-539,-539,-539,-539,-539,,,-539,-539,-539,,,-539,,,-539,,,-539',
+'-539,,-539,,-539,,-539,,-539,-539,-539,-539,-539,-539,-539,,-539,-539',
+'-539,,,,,,,,,,,,,,-539,-539,-539,-539,,-539,,-539,277,69,70,66,9,52',
+',,,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18',
+',,,,,8,42,,10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,',
+',,,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,84,76,79',
+'80,,81,82,,,,77,83,277,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28',
+'29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51',
+'89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,37,,,31,,,53',
+'54,,,55,,33,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66',
+',52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94',
+'95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40',
+'38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,',
+'84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61',
+'63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,,42,,,97,96,98,87',
+'51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82,,,,77,83,,69,70',
+'66,,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92',
+'94,95,,,18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40',
+'38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84',
+'76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63',
+'28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,,42,,,97,96,98,87,51',
+'89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53',
+'54,,,55,,,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66',
+',52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94',
+'95,,,18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84,76',
+'79,80,,81,82,,,,77,83,209,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63',
+'293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69',
+'70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296',
+'93,92,94,95,,,220,,,,,,,291,,,97,96,98,87,51,89,88,90,,91,99,100,,85',
+'86,,732,297,647,646,645,651,648,,,,,,,,,,,,,,,831,,,219,,,53,54,,,55',
+',,,,,653,,,,,,,,,657,656,660,659,84,76,79,80,,81,82,,,,77,83,,69,70',
+'66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93',
+'92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86',
+'39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218',
+',,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60',
+'61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97',
+'96,98,87,51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,',
+',,213,,,219,,,53,54,,,55,,270,,268,,41,,,,,,,,218,,,,,84,76,79,80,,81',
+'82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68',
+',,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90',
+',91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55',
+',,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57',
+',78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95',
+',,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84',
+'76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63',
+'293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69',
+'70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296',
+'93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85',
+'86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,',
+',218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62',
+',60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42',
+',,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,',
+',,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82',
+',,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,',
+',,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90',
+',91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55',
+',,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57',
+',78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95',
+',,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84',
+'76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63',
+'293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69',
+'70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296',
+'93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85',
+'86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,',
+',218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62',
+',60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42',
+',,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,',
+',,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82',
+',,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,',
+',,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90',
+',91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55',
+',,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57',
+',78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95',
+',,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84',
+'76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63',
+'293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69',
+'70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296',
+'93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85',
+'86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,',
+',218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62',
+',60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42',
+',,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,',
+',,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82',
+',,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,',
+',,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90',
+',91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55',
+',,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57',
+',78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95',
+',,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84',
+'76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63',
+'293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69',
+'70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296',
+'93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85',
+'86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,',
+',218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62',
+',60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42',
+',,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,',
+',,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82',
+',,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,',
+',,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90',
+',91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55',
+',,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57',
+',78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95',
+',,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84',
+'76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63',
+'293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69',
+'70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296',
+'93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85',
+'86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,',
+',218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62',
+',60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42',
+',,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,',
+',,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82',
+',,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,',
+',,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90',
+',91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55',
+',,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,9,52,57',
+',78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18',
+',,,,,8,42,7,10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,',
+',,,,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293',
+'294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87',
+'51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,270,,268,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83',
+',69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25',
+'93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,272,91,99,100,',
+'85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,270,,268,',
+'41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58',
+'59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,',
+',42,,,97,96,98,87,51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,',
+',,,,,,,,,,,213,,,219,,,458,54,,,55,,270,,268,,41,,,,,,,,218,,,,,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28',
+'29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89',
+'88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53',
+'54,,,55,,270,,268,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,209',
+'69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290',
+'296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100',
+',85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,',
+',,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59',
+',,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,',
+',,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,',
+',,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80',
+',81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67',
+'68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88',
+'90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,',
+',55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94',
+'95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40',
+'38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,',
+'84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61',
+'63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96',
+'98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213',
+',,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83',
+',69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290',
+'296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100',
+',85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,',
+',,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59',
+',,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,',
+',,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,',
+',,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80',
+',81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67',
+'68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88',
+'90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,',
+',55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,9,52',
+'57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,',
+',18,,,,,,8,42,,10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28',
+'29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89',
+'88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54',
+',,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,',
+',18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,',
+',,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293',
+'294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87',
+'51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,,,268,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,',
+'69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290',
+'296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,272,91,99,100',
+',85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,608,,268',
+',41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78',
+'58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,',
+',,,42,,,97,96,98,87,51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,',
+',,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,268,,41,,,,,,,,19,,,,,84,76,79',
+'80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29',
+'67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88',
+'90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54',
+',,55,,270,,268,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70',
+'66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93',
+'92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86',
+'39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,608,,268,,41,,,',
+',,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,',
+',,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,',
+',,42,,,97,96,98,87,51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,',
+',,,,,,,,,,,,213,,,219,,,53,54,,,55,,608,,268,,41,,,,,,,,218,,,,,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28',
+'29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89',
+'88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54',
+',,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,',
+',220,,,,,,,42,,,97,96,98,87,51,89,88,90,272,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,270,,268,,41,,,,,,,,218,',
+',,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60',
+'61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98',
+'87,51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213',
+',,219,,,53,54,,,55,,270,,268,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,',
+',,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,',
+'27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,272,91',
+'99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,270',
+',268,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57',
+',78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95',
+',,220,,,,,,,291,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,,650,297',
+'647,646,645,651,648,,,,,,,,,,,,,,,287,,,284,,,53,54,,,55,,283,,,,653',
+'688,,,,,,,,657,656,660,659,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94',
+'95,,,220,,,,,562,,291,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,,',
+'297,228,232,237,238,239,234,236,244,245,240,241,,221,222,,,242,243,',
+'287,,,219,,,53,54,,,55,,,225,,231,,227,226,223,224,235,233,229,,230',
+',,,84,76,79,80,,81,82,,,,77,83,,246,,299,,,57,,78,69,70,66,,52,,,,58',
+'59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220',
+',,,,,,291,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,,650,297,647,646',
+'645,651,648,,,,,,,,,,,,,,,875,,,219,,,53,54,,,55,,,,,,653,,,,,,,,,657',
+'656,660,659,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,',
+',,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,',
+',,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,',
+',,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,',
+'81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67',
+'68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88',
+'90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,',
+',55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94',
+'95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40',
+'38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,',
+'84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61',
+'63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96',
+'98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213',
+',,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83',
+',69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25',
+'93,92,94,95,,,18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86',
+'39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19',
+',,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60',
+'61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97',
+'96,98,87,51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,',
+',,213,,,219,,,53,54,,,55,,270,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82',
+',,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,',
+',,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90',
+'272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,',
+',55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,',
+',18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,',
+',,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28',
+'29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,,42,,,97,96,98,87,51,89',
+'88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54',
+',,55,,,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,',
+',18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,228',
+'232,237,238,239,234,236,244,245,240,241,,221,222,,,242,243,,213,,-233',
+'219,,,53,54,,,55,,,225,,231,41,227,226,223,224,235,233,229,19,230,,',
+',84,76,79,80,,81,82,,,,77,83,105,246,,-233,,104,57,,78,69,70,66,,52',
+',,,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95',
+',,220,,,,,,,291,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,,650,297',
+'647,646,645,651,648,,,,,,,,,,,,,,,331,,,31,,,53,54,,,55,,33,,,,653,',
+',,,,,,,657,656,660,659,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57',
+',78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95',
+',,220,,,,,,,291,,,97,96,98,336,51,89,88,337,,91,99,100,,85,86,,650,297',
+'647,646,645,651,648,,,,,,,,,,,,343,,,338,,,219,,,53,54,,,55,,,,,,653',
+',,,,,,,,657,656,660,659,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57',
+',78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95',
+',,220,,,,,,,291,,,97,96,98,336,51,89,88,337,,91,99,100,,85,86,,650,297',
+'647,646,645,651,648,,,,,,,,,,,,,,,338,,,219,,,53,54,,,55,,,,,,653,688',
+',,,,,,,657,656,660,659,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57',
+',78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95',
+',,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,608,,,,41,,,,,,,,218,,,,',
+'84,76,79,80,,81,82,,,,77,83,,69,70,66,9,52,57,,78,58,59,,,,62,,60,61',
+'63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,7,10,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,39,40,38,228,232,237,238,239,234,236',
+'244,245,240,241,,221,222,,,242,243,,37,,,31,,,53,54,,,55,,33,225,,231',
+'41,227,226,223,224,235,233,229,19,230,,,,84,76,79,80,,81,82,,,,77,83',
+',246,,,,368,57,,78,69,70,66,,52,,,,58,59,,,,62,,60,61,63,293,294,67',
+'68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88',
+'90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,',
+',55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,',
+',18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,',
+',,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28',
+'29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,,42,,,97,96,98,87,51,89',
+'88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54',
+',,55,,,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,',
+',18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,',
+',,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,9,52,57,,78,58,59,,,,62,,60,61,63,28',
+'29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8,42,,10,97,96,98,87,51',
+'89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,37,,,31,,,53',
+'54,,,55,,33,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66',
+',52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94',
+'95,,,18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28',
+'29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89',
+'88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54',
+',,55,,385,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66',
+',52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94',
+'95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40',
+'38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,385,,,,41,,,,,,,,218,',
+',,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60',
+'61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69',
+'70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93',
+'92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,272,91,99,100,,85',
+'86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,270,,268,,41',
+',,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59',
+',,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,',
+',,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,',
+',,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80',
+',81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67',
+'68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,291,,,97,96,98,87,51,89',
+'88,90,,91,99,100,,85,86,,,297,228,232,237,238,239,234,236,244,245,240',
+'241,,221,222,,,242,243,,287,,,219,,,53,54,,,55,,,225,,231,,227,226,223',
+'224,235,233,229,,230,,,,84,76,79,80,,81,82,,,,77,83,,246,,479,,,57,',
+'78,69,70,66,,52,,,,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93',
+'92,94,95,,,18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39',
+'40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,',
+',,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61',
+'63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,291,,,97,96',
+'98,87,51,89,88,90,,91,99,100,,85,86,,650,297,647,646,645,651,648,,,',
+',,,,,,,,,,,287,,,284,,,53,54,,,55,,,,,,653,,,,,,,,,657,656,660,659,84',
+'76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63',
+'293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,291,,,97,96,98',
+'87,51,89,88,90,,91,99,100,,85,86,,650,297,647,646,645,651,648,,,,,,',
+',,,,,,,,287,,,284,,,53,54,,,55,,,,,,653,,,,,,,,,657,656,660,659,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293',
+'294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87',
+'51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+'497,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,',
+'69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290',
+'296,93,92,94,95,,,220,,,,,,,291,,,97,96,98,87,51,89,88,90,,91,99,100',
+',85,86,,650,297,647,646,645,651,648,,,,,,,,,,,,,,,287,,,284,,,53,54',
+',,55,,,,,,653,639,,,,,,,,657,656,660,659,84,76,79,80,,81,82,,,,77,83',
+',69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290',
+'296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100',
+',85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,',
+',,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59',
+',,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,,42',
+',,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,',
+',,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82',
+',,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,',
+',27,26,25,93,92,94,95,,,18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99',
+'100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41',
+',,,,,,,19,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59',
+',,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42',
+',,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,',
+',,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82',
+',,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,',
+',27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99',
+'100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41',
+',,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59',
+',,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42',
+',,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,',
+',,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82',
+',,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,',
+',27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99',
+'100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41',
+',,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59',
+',,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,',
+',,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,',
+',,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80',
+',81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67',
+'68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88',
+'90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,',
+',55,,705,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66',
+',52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94',
+'95,,,18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38',
+',,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84,76',
+'79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293',
+'294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87',
+'51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69',
+'70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93',
+'92,94,95,,,18,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39',
+'40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,',
+',,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61',
+'63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87',
+'51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,270,,268,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83',
+',69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25',
+'93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,272,91,99,100,',
+'85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,270,,268,',
+'41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58',
+'59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,',
+'42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,',
+',,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,84,76,79,80,,81',
+'82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68',
+',,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90',
+',91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55',
+',270,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94',
+'95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40',
+'38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,',
+'84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61',
+'63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96',
+'98,87,51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213',
+',,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83',
+',69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290',
+'296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,272,91,99,100',
+',85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,608,,,,41',
+',,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59',
+',,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,',
+',,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,',
+',,,,,,,,,,213,,,219,,,53,54,,,55,,385,,,,41,,,,,,,,218,,,,,84,76,79',
+'80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,28,29',
+'67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,,42,,,97,96,98,87,51,89,88',
+'90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,',
+',55,,,,,,41,,,,,,,,19,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94',
+'95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40',
+'38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,',
+'84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61',
+'63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87',
+'51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219',
+',,53,54,,,55,,270,,268,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83',
+',69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290',
+'296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100',
+',85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,',
+',,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59',
+',,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,',
+',,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,',
+',,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80',
+',81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67',
+'68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96,98,87,51,89,88',
+'90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,',
+',55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52',
+'57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290,296,93,92,94',
+'95,,,220,,,,,,,42,,,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40',
+'38,,,,,,,,,,,,,,,,,,,,213,,,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,',
+'84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61',
+'63,293,294,67,68,,,,,,289,290,296,93,92,94,95,,,220,,,,,,,42,,,97,96',
+'98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213',
+',,219,,,53,54,,,55,,,,,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,,,,77,83',
+',69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,,,,289,290',
+'296,93,92,94,95,,,220,,,,,,,291,,,97,96,98,87,51,89,88,90,,91,99,100',
+',85,86,,,297,,,,,,,,,,,,,,,,,,,,287,,,284,,,53,54,,,55,,,,,,,,,,,,,',
+',,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60',
+'61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,220,,,,,,,42,,,97,96,98',
+'87,51,89,88,90,272,91,99,100,,85,86,39,40,38,,,,,,,,,,,,,,,,,,,,213',
+',,219,,,53,54,,,55,,270,,268,,41,,,,,,,,218,,,,,84,76,79,80,,81,82,',
+',,77,83,,69,70,66,,52,57,,78,58,59,,,,62,,60,61,63,293,294,67,68,,,',
+',,289,290,296,93,92,94,95,,,220,,,,,,,291,,,97,96,98,87,51,89,88,90',
+',91,99,100,,85,86,,,297,,,,,,,,,,,,,,,,,,,,287,,,284,,,53,54,,,55,,',
+',,,,,,,,,,,,,,,,84,76,79,80,,81,82,,,,77,83,,69,70,66,9,52,57,,78,58',
+'59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,93,92,94,95,,,18,,,,,,8',
+'42,,10,97,96,98,87,51,89,88,90,,91,99,100,,85,86,39,40,38,228,232,237',
+'238,239,234,236,244,245,240,241,,221,222,,,242,243,,37,,,31,,,53,54',
+',,55,,33,225,,231,41,227,226,223,224,235,233,229,19,230,,,,84,76,79',
+'80,,81,82,,,,77,83,,246,-239,,,368,57,,78,-239,-239,-239,,,-239,-239',
+'-239,,-239,,,,,,,,,,-239,,,,,,,,,,-239,-239,,-239,-239,-239,-239,-239',
+',,,,,,,,,,,-239,,,,,,,-239,-239,-239,,,-239,-239,-239,,-239,,,,,,-239',
+',,,-239,,,-239,,,,,252,-239,-239,-239,,-239,-239,-239,-239,-239,,,,',
+',,,,,,,,,-239,,,,,,,,,-293,,,,,-239,,-293,-293,-293,-239,-239,-293,-293',
+'-293,,-293,,-239,,,,,252,-239,,-293,-293,,,,,,,,,-293,-293,,-293,-293',
+'-293,-293,-293,,,-239,,,,,,,,,,,,,,-239,,,,,-239,-293,-293,-293,-293',
+'-293,-293,-293,-293,-293,-293,-293,-293,-293,-293,,,-293,-293,-293,',
+',-293,,261,-293,,,-293,-293,,-293,,-293,,-293,,-293,-293,-293,-293,-293',
+'-293,-293,-403,-293,,-293,,,,-403,-403,-403,,,-403,-403,-403,,-403,-293',
+'-293,,-293,,-293,,,-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,,252,-403,,,-403',
+'-403,,-403,,-403,,-403,,-403,-403,-403,-403,-403,-403,-403,-239,-403',
+'-403,-403,,,,-239,-239,-239,,,-239,-239,-239,,-239,-403,-403,,-403,',
+'-403,,,-239,-239,-239,,,,,,,,,-239,-239,,-239,-239,-239,-239,-239,,',
+',,,,,,,,,,,,,,,,,,,,-239,-239,-239,-239,-239,-239,-239,-239,-239,-239',
+'-239,-239,-239,-239,,,-239,-239,-239,,,-239,,252,-239,,,-239,-239,,-239',
+',-239,,-239,,-239,-239,-239,-239,-239,-239,-239,,-239,-239,-239,,,,',
+',,,,,,,,,-239,-239,,-239,,-239,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,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,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,353,352,354,351,160,179',
+'178,,,,,,159,166,157,158,348,349,350,346,118,89,88,347,,91,,,,,,149',
+'150,,146,128,129,130,137,134,136,,,131,132,,,,151,152,138,139,,,,,,358',
+',,,,,,,143,142,,127,148,145,144,140,141,135,133,125,147,126,394,398',
+'153,,395,,,,,,,,149,150,,146,128,129,130,137,134,136,,,131,132,,,,151',
+'152,138,139,,,,,,252,,,,,,,,143,142,,127,148,145,144,140,141,135,133',
+'125,147,126,401,405,153,,400,,,,,,,,149,150,,146,128,129,130,137,134',
+'136,,,131,132,,,,151,152,138,139,,,,,,252,,,,,,,,143,142,,127,148,145',
+'144,140,141,135,133,125,147,126,450,398,153,,451,,,,,,,,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,450,398,153,,451,,',
+',,,,,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,579',
+'398,153,,580,,,,,,,,149,150,,146,128,129,130,137,134,136,,,131,132,',
+',,151,152,138,139,,,,,,252,,,,,,,,143,142,,127,148,145,144,140,141,135',
+'133,125,147,126,581,405,153,,582,,,,,,,,149,150,,146,128,129,130,137',
+'134,136,,,131,132,,,,151,152,138,139,,,,,,252,,,,,,,,143,142,,127,148',
+'145,144,140,141,135,133,125,147,126,617,398,153,,618,,,,,,,,149,150',
+',146,128,129,130,137,134,136,,,131,132,,,,151,152,138,139,,,,,,252,',
+',,,,,,143,142,,127,148,145,144,140,141,135,133,125,147,126,620,405,153',
+',621,,,,,,,,149,150,,146,128,129,130,137,134,136,,,131,132,,,,151,152',
+'138,139,,,,,,252,,,,,,,,143,142,,127,148,145,144,140,141,135,133,125',
+'147,126,579,398,153,,580,,,,,,,,149,150,,146,128,129,130,137,134,136',
+',,131,132,,,,151,152,138,139,,,,,,252,,,,,,,,143,142,,127,148,145,144',
+'140,141,135,133,125,147,126,581,405,153,,582,,,,,,,,149,150,,146,128',
+'129,130,137,134,136,,,131,132,,,,151,152,138,139,,,,,,252,,,,,,,,143',
+'142,,127,148,145,144,140,141,135,133,125,147,126,673,398,153,,674,,',
+',,,,,149,150,,146,128,129,130,137,134,136,,,131,132,,,,151,152,138,139',
+',,,,,252,,,,,,,,143,142,,127,148,145,144,140,141,135,133,125,147,126',
+'675,405,153,,676,,,,,,,,149,150,,146,128,129,130,137,134,136,,,131,132',
+',,,151,152,138,139,,,,,,252,,,,,,,,143,142,,127,148,145,144,140,141',
+'135,133,125,147,126,678,405,153,,679,,,,,,,,149,150,,146,128,129,130',
+'137,134,136,,,131,132,,,,151,152,138,139,,,,,,252,,,,,,,,143,142,,127',
+'148,145,144,140,141,135,133,125,147,126,450,398,153,,451,,,,,,,,149',
+'150,,146,128,129,130,137,134,136,,,131,132,,,,151,152,138,139,,,,,,252',
+',,,,,,,143,142,,127,148,145,144,140,141,135,133,125,147,126,927,398',
+'153,,928,,,,,,,,149,150,,146,128,129,130,137,134,136,,,131,132,,,,151',
+'152,138,139,,,,,,252,,,,,,,,143,142,,127,148,145,144,140,141,135,133',
+'125,147,126,929,405,153,,930,,,,,,,,149,150,,146,128,129,130,137,134',
+'136,,,131,132,,,,151,152,138,139,,,,,,252,,,,,,,,143,142,,127,148,145',
+'144,140,141,135,133,125,147,126,949,405,153,,948,,,,,,,,149,150,,146',
+'128,129,130,137,134,136,,,131,132,,,,151,152,138,139,,,,,,252,,,,,,',
+',143,142,,127,148,145,144,140,141,135,133,125,147,126,,,153,228,232',
+'237,238,239,234,236,244,245,240,241,,221,222,,,242,243,,,,,,,,,,,,,',
+',225,,231,,227,226,223,224,235,233,229,,230,,228,232,237,238,239,234',
+'236,244,245,240,241,,221,222,,246,242,243,,,,,,,,,,,,,,,225,,231,,227',
+'226,223,224,235,233,229,,230,,228,232,237,238,239,234,236,244,245,240',
+'241,,221,222,,246,242,243,,,,,,,,,,,,,,,225,,231,,227,226,223,224,235',
+'233,229,,230,,228,232,237,238,239,234,236,244,245,240,241,,221,222,',
+'246,242,243,,,,,,,,,,,,,,,225,,231,,227,226,223,224,235,233,229,,230',
+',228,232,237,238,239,234,236,244,245,240,241,,221,222,,246,242,243,',
+',,,,,,,,,,,,,225,,231,,227,226,223,224,235,233,229,,230,,228,232,237',
+'238,239,234,236,244,245,240,241,,221,222,,246,242,243,,,,,,,,,,,,,,',
+'225,,231,,227,226,223,224,235,233,229,,230,,228,232,237,238,239,234',
+'236,244,245,240,241,,221,222,209,246,242,243,,,,,,,,,,,,,,,225,,231',
+',227,226,223,224,235,233,229,,230,,228,232,237,238,239,234,236,244,245',
+'240,241,,221,222,,246,242,243,,,,,,,,,,,,,,,225,,231,,227,226,223,224',
+'235,233,229,,230,,228,232,237,238,239,234,236,244,245,240,241,,221,222',
+',246,242,243,,,,,,,,,,,,,,,225,,231,,227,226,223,224,235,233,229,,230',
+',228,232,237,238,239,234,236,244,245,240,241,,221,222,,246,242,243,',
+',,,,,,,,,,,,,225,,231,,227,226,223,224,235,233,229,,230,,228,232,237',
+'238,239,234,236,244,245,240,241,,221,222,,246,242,243,,,,,,,,,,,,,,',
+'225,,231,,227,226,223,224,235,233,229,,230,,,,,,,,,,,,,,,,,246' ]
+ racc_action_table = arr = ::Array.new(23658, 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 = [
+'400,928,536,536,214,951,788,400,400,400,56,628,628,400,400,612,400,364',
+'853,597,459,612,671,18,753,674,348,351,342,297,297,412,412,348,351,673',
+'400,400,566,400,400,400,400,400,869,927,580,322,323,638,579,929,329',
+'214,459,516,637,542,542,637,18,597,871,789,524,418,400,400,400,400,400',
+'400,400,400,400,400,400,400,400,400,364,566,400,400,400,332,400,566',
+'875,517,400,676,536,400,882,580,56,536,400,579,400,628,400,400,400,400',
+'400,400,400,401,400,788,400,967,418,928,401,401,401,951,928,412,401',
+'401,951,401,400,400,929,400,674,400,853,342,401,400,671,853,753,671',
+'673,671,24,753,292,401,401,542,401,401,401,401,401,342,638,516,676,329',
+'342,927,516,322,323,789,927,929,322,323,789,524,929,460,968,212,675',
+'401,401,401,401,401,401,401,401,401,401,401,401,401,401,517,332,401',
+'401,401,517,401,676,746,313,401,678,313,401,650,723,460,24,401,292,401',
+'887,401,401,401,401,401,401,401,74,401,401,401,212,395,617,888,683,74',
+'24,620,292,683,732,365,90,401,401,74,401,675,401,90,90,90,401,13,90',
+'90,90,746,90,650,678,723,317,424,746,317,90,678,90,90,90,338,678,746',
+'395,338,678,12,90,90,395,90,90,90,90,90,11,675,732,620,618,746,10,448',
+'678,424,620,594,617,424,424,620,365,365,365,620,941,941,90,90,90,90',
+'90,90,90,90,90,90,90,90,90,90,969,620,90,90,90,448,90,90,924,594,90',
+'36,617,90,90,617,90,858,90,858,90,617,90,90,90,90,90,90,90,352,90,301',
+'90,926,618,587,352,587,587,587,587,587,321,321,337,336,90,90,90,90,581',
+'90,15,90,36,90,394,581,581,581,36,353,581,581,581,7,581,933,353,934',
+'618,935,587,618,301,581,581,581,581,618,301,587,587,587,587,314,581',
+'581,314,581,581,581,581,581,936,15,337,336,937,394,356,15,939,337,336',
+'394,275,356,337,336,362,275,337,336,942,587,581,581,581,581,581,581',
+'581,581,581,581,581,581,581,581,337,336,581,581,581,886,581,581,347',
+'943,581,944,886,581,581,347,581,945,581,360,581,886,581,581,581,581',
+'581,581,581,946,581,581,581,774,553,774,774,774,774,774,363,362,362',
+'362,361,874,581,581,581,581,582,581,874,581,903,581,455,582,582,582',
+'535,874,582,582,582,535,582,901,330,901,901,901,901,901,326,330,582',
+'582,582,326,360,360,360,3,330,461,582,582,3,582,582,582,582,582,115',
+'553,553,311,311,115,115,363,363,363,553,361,361,361,354,689,429,774',
+'38,38,689,354,582,582,582,582,582,582,582,582,582,582,582,582,582,582',
+'428,829,582,582,582,286,582,582,829,427,582,426,286,582,582,901,582',
+'829,582,474,582,286,582,582,582,582,582,582,582,475,582,810,582,810',
+'810,810,810,810,653,478,653,653,653,653,653,14,582,582,582,582,87,582',
+'14,582,480,582,947,87,87,87,948,14,87,87,87,485,87,771,810,771,771,771',
+'771,771,87,653,87,87,87,810,810,23,662,662,653,489,87,87,23,87,87,87',
+'87,87,957,349,957,957,957,957,957,414,349,949,771,848,1,848,848,848',
+'848,848,498,771,16,16,87,87,87,87,87,87,87,87,87,87,87,87,87,87,402',
+'957,87,87,87,501,87,87,425,392,87,513,848,87,87,388,87,386,87,380,87',
+'848,87,87,87,87,87,87,87,518,87,918,87,918,918,918,918,918,519,374,425',
+'958,550,350,425,425,87,87,87,87,350,87,556,87,563,87,515,515,515,515',
+'515,515,346,567,333,515,515,331,918,346,515,570,515,515,515,515,515',
+'515,515,918,918,328,575,327,515,515,515,515,515,515,515,583,940,515',
+'940,940,940,940,940,515,515,585,515,515,515,515,515,515,515,515,515',
+'318,515,515,515,316,515,515,515,515,515,902,598,902,902,902,902,902',
+'916,940,916,916,916,916,916,288,600,679,285,315,515,605,288,515,679',
+'285,515,515,607,679,515,288,515,679,285,614,515,897,902,897,897,897',
+'897,897,515,916,616,310,309,515,515,515,515,619,515,515,916,916,306',
+'515,515,113,113,113,113,113,113,515,622,515,113,113,623,626,897,113',
+'627,113,113,113,113,113,113,113,303,897,897,629,302,113,113,113,113',
+'113,113,113,632,938,113,938,938,938,938,938,113,113,113,113,113,113',
+'113,113,113,113,113,113,633,113,113,113,641,113,113,113,113,113,850',
+'642,850,850,850,850,850,895,938,895,895,895,895,895,484,643,830,832',
+'651,113,658,484,113,830,832,113,113,661,664,113,484,113,830,832,669',
+'113,893,850,893,893,893,893,893,113,895,298,672,296,113,113,113,113',
+'291,113,113,895,895,290,113,113,783,783,783,783,783,783,113,287,113',
+'783,783,681,686,893,783,282,783,783,783,783,783,783,783,281,893,893',
+'704,280,783,783,783,783,783,783,783,278,731,783,731,731,731,269,731',
+'783,783,266,783,783,783,783,783,783,783,783,783,265,783,783,783,725',
+'783,783,783,783,783,873,304,873,873,873,726,873,766,304,766,766,766',
+'766,766,43,727,340,304,729,783,730,43,783,340,734,783,783,251,739,783',
+'43,783,340,740,741,783,953,220,953,953,953,953,953,783,766,745,216,215',
+'783,783,783,783,213,783,783,766,766,760,783,783,197,197,197,197,197',
+'197,783,767,783,197,197,773,775,953,197,776,197,197,197,197,197,197',
+'197,779,953,953,195,782,197,197,197,197,197,197,197,546,546,197,101',
+'546,546,546,42,197,197,791,197,197,197,197,197,197,197,197,197,37,197',
+'197,197,795,197,197,197,197,197,443,611,611,611,611,611,796,963,930',
+'963,963,963,963,963,527,930,799,800,812,197,930,527,197,813,930,197',
+'197,35,819,197,527,197,443,820,822,197,443,443,443,443,826,831,21,197',
+'963,836,837,838,197,197,197,197,841,197,197,963,963,842,197,197,835',
+'835,835,835,835,835,197,844,197,835,835,847,849,855,835,856,835,835',
+'835,835,835,835,835,6,6,6,6,6,835,835,835,835,835,835,835,861,866,835',
+'867,868,444,,,835,835,,835,835,835,835,835,835,835,835,835,,835,835',
+'835,,835,835,835,835,835,441,441,441,441,441,441,441,444,621,441,441',
+'444,444,444,444,621,441,441,,835,621,,835,,621,835,835,,,835,,835,441',
+',441,835,441,441,441,441,441,441,441,835,441,,,,835,835,835,835,,835',
+'835,,,,835,835,602,602,602,602,602,602,835,,835,602,602,,,,602,,602',
+'602,602,602,602,602,602,276,276,276,276,276,602,602,602,602,602,602',
+'602,,,602,473,473,473,473,473,602,602,,602,602,602,602,602,602,602,602',
+'602,,602,602,602,,602,602,602,602,602,446,446,446,446,446,446,446,446',
+'211,446,446,,,,,211,446,446,,602,,,602,,211,602,602,,,602,,602,446,',
+'446,602,446,446,446,446,446,446,446,602,446,,,,602,602,602,602,,602',
+'602,,,,602,602,787,787,787,787,787,787,602,,602,787,787,,,,787,,787',
+'787,787,787,787,787,787,,,,,,787,787,787,787,787,787,787,,,787,,,,,383',
+'787,787,,787,787,787,787,787,787,787,787,787,,787,787,787,,787,787,787',
+'787,787,383,383,383,383,383,383,383,383,383,383,383,,383,383,,,383,383',
+',787,,,787,,,787,787,,,787,,787,383,,383,787,383,383,383,383,383,383',
+'383,787,383,,,,787,787,787,787,,787,787,,,,787,787,,383,51,383,,,787',
+',787,51,51,51,,,51,51,51,913,51,913,913,913,913,913,,,,,51,51,51,,,',
+',,,,51,51,,51,51,51,51,51,,,,,,,,,913,,,,,,,,,913,913,913,913,,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,434,,,,,,,,,,,,,,,,434,434',
+',0,,,0,,,0,0,,,0,,0,434,,434,0,434,434,434,434,,,434,0,434,,,,0,0,0',
+'0,,0,0,,,,0,0,682,682,682,682,682,682,0,,0,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',
+'435,,,,,,,,,,,,,,,,435,435,,682,,,682,,,682,682,,,682,,682,435,,435',
+'682,435,435,435,435,,,435,682,435,,,,682,682,682,682,,682,682,,,,682',
+'682,52,52,52,52,52,52,682,,682,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,436,,,,,,,,,,,,,,,,436,436,,52,,,52,,,52,52',
+',,52,,52,436,,436,52,436,436,436,436,,,436,52,436,,,,52,52,52,52,,52',
+'52,,,,52,52,834,834,834,834,834,834,52,,52,834,834,,,,834,,834,834,834',
+'834,834,834,834,,,,,,834,834,834,834,834,834,834,,,834,,,,,,834,834',
+',834,834,834,834,834,834,834,834,834,,834,834,834,,834,834,834,834,834',
+'422,422,422,422,422,422,422,422,422,422,422,,422,422,,,422,422,,834',
+',,834,,,834,834,,,834,,834,422,,422,834,422,422,422,422,422,422,422',
+'834,422,,,,834,834,834,834,,834,834,,,,834,834,828,828,828,828,828,828',
+'834,,834,828,828,,,,828,,828,828,828,828,828,828,828,,,,,,828,828,828',
+'828,828,828,828,,,828,,,,,,828,828,,828,828,828,828,828,828,828,828',
+'828,,828,828,828,,828,828,828,828,828,423,423,423,423,423,423,423,423',
+'423,423,423,,423,423,,,423,423,,828,,,828,,,828,828,,,828,,828,423,',
+'423,828,423,423,423,423,423,423,423,828,423,,,,828,828,828,828,,828',
+'828,,,,828,828,279,279,279,279,279,279,828,,828,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,440,440,440,440,440,440,440,,,440,440,,,,,,440,440,,279,,,279',
+',,279,279,,,279,,279,440,,440,279,440,440,440,440,440,440,440,279,440',
+',,,279,279,279,279,,279,279,,,,279,279,537,537,537,537,537,537,279,',
+'279,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,437,,,,,,,,,,,,,,,,437,437,,537,,',
+'537,,,537,537,,,537,,537,437,,437,537,437,437,437,437,,,437,537,437',
+',,,537,537,537,537,,537,537,,,,537,537,603,603,603,603,603,603,537,',
+'537,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,433,433,433,433,433,433,433,,,433',
+'433,,,,,,433,433,,603,,,603,,,603,603,,,603,,603,433,,433,603,433,433',
+'433,433,433,433,433,603,433,,,,603,603,603,603,,603,603,,,,603,603,687',
+'687,687,687,687,687,603,,603,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,442,442,442',
+'442,442,442,442,,,442,442,,,,,,442,442,,687,,,687,,,687,687,,,687,,687',
+'442,,442,687,442,442,442,442,442,442,442,687,442,,,,687,687,687,687',
+',687,687,,,,687,687,735,735,735,735,735,735,687,,687,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,438,438,438,438,438,438,438,,,438,438,,,,,,438,438,',
+'735,,,735,,,735,735,,,735,,735,438,,438,735,438,438,438,438,438,438',
+'438,735,438,,,,735,735,735,735,,735,735,,,,735,735,284,284,284,284,284',
+'284,735,,735,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,445,445,445,445,445,445,445',
+',,445,445,,,,,,445,445,,284,,,284,,,284,284,,,284,,284,445,,445,284',
+'445,445,445,445,445,445,445,284,445,,,,284,284,284,284,,284,284,,,,284',
+'284,750,750,750,750,750,750,284,,284,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,439',
+'439,439,439,439,439,439,,,439,439,,,,,,439,439,,750,,,750,,,750,750',
+',,750,,750,439,,439,750,439,439,439,439,439,439,439,750,439,,,,750,750',
+'750,750,,750,750,,,,750,750,697,697,697,697,697,697,750,,750,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,432,,,,,,,,,,,,,,,,432,432,,697,,,697,,,697,697',
+',,697,,697,432,,,697,432,432,432,432,,,,697,,,,,697,697,697,697,,697',
+'697,,,,697,697,912,912,912,912,912,912,697,,697,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,431,,,,,,,,,,,,,,,,431,431,,912,,,912,,,912,912,,,912,,912,431',
+',431,912,431,431,431,431,,,,912,,,,,912,912,912,912,,912,912,,,,912',
+'912,219,219,219,219,219,219,912,,912,219,219,,,,219,,219,219,219,219',
+'219,219,219,,,,,,219,219,219,219,219,219,219,,,219,,,,,,219,219,,219',
+'219,219,219,219,219,219,219,219,,219,219,219,,219,219,219,219,219,430',
+',,,,,,,,,,,,,,,430,430,,219,,,219,,,219,219,,,219,,219,430,,430,219',
+'430,430,430,430,,,,219,,,,,219,219,219,219,,219,219,,,,219,219,910,910',
+'910,910,910,910,219,,219,910,910,,,,910,,910,910,910,910,910,910,910',
+',,,,,910,910,910,910,910,910,910,,,910,,,,,,910,910,,910,910,910,910',
+'910,910,910,910,910,,910,910,910,,910,910,910,910,910,,,,,,,,,,,,,,',
+',,,,,910,,,910,,,910,910,,,910,,910,,,,910,,,,,,,,910,,,,,910,910,910',
+'910,,910,910,,,,910,910,904,904,904,904,904,904,910,,910,904,904,,,',
+'904,,904,904,904,904,904,904,904,,,,,,904,904,904,904,904,904,904,,',
+'904,,,,,,904,904,,904,904,904,904,904,904,904,904,904,,904,904,904,',
+'904,904,904,904,904,,,,,,,,,,,,,,,,,,,,904,,,904,,,904,904,,,904,,904',
+',,,904,,,,,,,,904,,,,,904,904,904,904,,904,904,,,,904,904,31,31,31,31',
+'31,31,904,,904,31,31,,,,31,,31,31,31,31,31,31,31,,,,,,31,31,31,31,31',
+'31,31,,,31,,,,,,31,31,,31,31,31,31,31,31,31,31,31,,31,31,31,,31,31,31',
+'31,31,,,,,,,,,,,,,,,,,,,,31,,,31,,,31,31,,,31,,31,,,,31,,,,,,,,31,,',
+',,31,31,31,31,,31,31,,,,31,31,631,631,631,631,631,631,31,,31,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,512,512,512',
+'512,512,512,631,,631,512,512,,,,512,,512,512,512,512,512,512,512,,,',
+',,512,512,512,512,512,512,512,,,512,,,,,,512,512,,512,512,512,512,512',
+'512,512,512,512,,512,512,512,,512,512,512,512,512,,,,,,,,,,,,,,,,,,',
+',512,,,512,,,512,512,,,512,,512,,,,512,,,,,,,,512,,,,,512,512,512,512',
+',512,512,,,,512,512,784,784,784,784,784,784,512,,512,784,784,,,,784',
+',784,784,784,784,784,784,784,,,,,,784,784,784,784,784,784,784,,,784',
+',,,,391,784,784,,784,784,784,784,784,784,784,784,784,,784,784,784,,784',
+'784,784,784,784,391,391,391,391,391,391,391,391,391,391,391,,391,391',
+',,391,391,,784,,,784,,,784,784,,,784,,784,391,,391,784,391,391,391,391',
+'391,391,391,784,391,,,,784,784,784,784,,784,784,,,,784,784,,391,406',
+',,,784,,784,406,406,406,,,406,406,406,805,406,805,805,805,805,805,,',
+',406,406,406,406,,,,,,,,406,406,,406,406,406,406,406,,,,,,,,,805,,,',
+',,,,,805,805,805,805,,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,405,406,406,406,,,,405,405,405,,,405,405,405,,405',
+'406,406,406,406,,406,,406,405,405,405,405,,,,,,,,405,405,,405,405,405',
+'405,405,,,,,,,,,,,,,,,,,,,,,,,405,405,405,405,405,405,405,405,405,405',
+'405,405,405,405,,,405,405,405,,,405,,,405,,,405,405,,405,,405,,405,',
+'405,405,405,405,405,405,405,,405,405,405,,,,,,,,,,,,,,405,405,405,405',
+',405,,405,793,793,793,793,793,793,,,,793,793,,,,793,,793,793,793,793',
+'793,793,793,,,,,,793,793,793,793,793,793,793,,,793,,,,,,793,793,,793',
+'793,793,793,793,793,793,793,793,,793,793,793,,793,793,793,793,793,,',
+',,,,,,,,,,,,,,,,,793,,,793,,,793,793,,,793,,793,,,,793,,,,,,,,793,,',
+',,793,793,793,793,,793,793,,,,793,793,589,589,589,589,589,589,793,,793',
+'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,589,,,,589,589',
+',204,204,204,,204,589,,589,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,768,768,768,,768,208,,208,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,,754,754,754,,754,768,,768,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,,807,754,807',
+'807,807,807,807,,,,,,,,,,,,,,,754,,,754,,,754,754,,,754,,,,,,807,,,',
+',,,,,807,807,807,807,754,754,754,754,,754,754,,,,754,754,,218,218,218',
+',218,754,,754,218,218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218',
+'218,218,218,218,218,,,218,,,,,,,218,,,218,218,218,218,218,218,218,218',
+',218,218,218,,218,218,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,,,218',
+'218,,,218,,,,,,218,,,,,,,,218,,,,,218,218,218,218,,218,218,,,,218,218',
+',743,743,743,,743,218,,218,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,,221,221,221,,221,743,,743,221,221,,,,221,,221',
+'221,221,221,221,221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,',
+',221,,,221,221,221,221,221,221,221,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,,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,,5,5,5,5,5,246,,246,5,5,,,,5',
+',5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,',
+'5,5,5,,5,5,5,5,5,,,,,,,,,,,,,,,,,,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,5',
+',,,,5,5,5,5,,5,5,,,,5,5,,736,736,736,,736,5,,5,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,,252,252,252,,252,736,,736,252',
+'252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252,252,252',
+'252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,252,252,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,253,,261,261,261,,261,253,,253,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,724,724,724,,724,261,,261,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,,722,722,722',
+',722,724,,724,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',
+',268,268,268,,268,722,,722,268,268,,,,268,,268,268,268,268,268,268,268',
+',,,,,268,268,268,268,268,268,268,,,268,,,,,,,268,,,268,268,268,268,268',
+'268,268,268,,268,268,268,,268,268,268,268,268,,,,,,,,,,,,,,,,,,,,268',
+',,268,,,268,268,,,268,,,,,,268,,,,,,,,268,,,,,268,268,268,268,,268,268',
+',,,268,268,,721,721,721,,721,268,,268,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,,270,270,270,,270,721,,721,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,,272,272,272,,272,270,,270,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,,720,720,720',
+',720,272,,272,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',
+',719,719,719,,719,720,,720,719,719,,,,719,,719,719,719,719,719,719,719',
+',,,,,719,719,719,719,719,719,719,,,719,,,,,,,719,,,719,719,719,719,719',
+'719,719,719,,719,719,719,,719,719,719,719,719,,,,,,,,,,,,,,,,,,,,719',
+',,719,,,719,719,,,719,,,,,,719,,,,,,,,719,,,,,719,719,719,719,,719,719',
+',,,719,719,,277,277,277,277,277,719,,719,277,277,,,,277,,277,277,277',
+'277,277,277,277,,,,,,277,277,277,277,277,277,277,,,277,,,,,,277,277',
+',277,277,277,277,277,277,277,277,277,,277,277,277,,277,277,277,277,277',
+',,,,,,,,,,,,,,,,,,,277,,,277,,,277,277,,,277,,277,,,,277,,,,,,,,277',
+',,,,277,277,277,277,,277,277,,,,277,277,,707,707,707,,707,277,,277,707',
+'707,,,,707,,707,707,707,707,707,707,707,,,,,,707,707,707,707,707,707',
+'707,,,707,,,,,,,707,,,707,707,707,707,707,707,707,707,,707,707,707,',
+'707,707,707,707,707,,,,,,,,,,,,,,,,,,,,707,,,707,,,707,707,,,707,,,',
+',,707,,,,,,,,707,,,,,707,707,707,707,,707,707,,,,707,707,,108,108,108',
+',108,707,,707,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',
+',466,466,466,,466,108,,108,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,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,,464,464,464,,464,466,,466,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,464,,458,458,458,,458,464,,464,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,,883,883',
+'883,,883,458,,458,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,,881,881,881,,881,883,,883,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,,878,878,878,,878,881,,881,878,878,',
+',,878,,878,878,878,878,878,878,878,,,,,,878,878,878,878,878,878,878',
+',,878,,,,,,,878,,,878,878,878,878,878,878,878,878,878,878,878,878,,878',
+'878,878,878,878,,,,,,,,,,,,,,,,,,,,878,,,878,,,878,878,,,878,,878,,878',
+',878,,,,,,,,878,,,,,878,878,878,878,,878,878,,,,878,878,,19,19,19,,19',
+'878,,878,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,,27,27,27,,27,19,,19,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,,538',
+'32,538,538,538,538,538,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,,,538',
+'538,,,,,,,,538,538,538,538,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,,,,,584,,33,,,33,33,33,33,33,33,33,33,,33,33,33,,33,33,,,33,584',
+'584,584,584,584,584,584,584,584,584,584,,584,584,,,584,584,,33,,,33',
+',,33,33,,,33,,,584,,584,,584,584,584,584,584,584,584,,584,,,,33,33,33',
+'33,,33,33,,,,33,33,,584,,33,,,33,,33,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',
+',639,817,639,639,639,639,639,,,,,,,,,,,,,,,817,,,817,,,817,817,,,817',
+',,,,,639,,,,,,,,,639,639,639,639,817,817,817,817,,817,817,,,,817,817',
+',803,803,803,,803,817,,817,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,,39,39,39,,39,803,,803,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,,53,53,53,,53,41,,41,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,596,596,596,596,596,596,596,596,596,596,596,,596,596,,,596,596,,62',
+',596,62,,,62,62,,,62,,,596,,596,62,596,596,596,596,596,596,596,62,596',
+',,,62,62,62,62,,62,62,,,,62,62,62,596,,596,,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,,890,63,890,890,890',
+'890,890,,,,,,,,,,,,,,,63,,,63,,,63,63,,,63,,63,,,,890,,,,,,,,,890,890',
+'890,890,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,,688,64,688,688,688,688,688,,,,,',
+',,,,,,64,,,64,,,64,,,64,64,,,64,,,,,,688,,,,,,,,,688,688,688,688,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,,864,65,864,864,864,864,864,,,,,,,,,,,,,,',
+'65,,,65,,,65,65,,,65,,,,,,864,864,,,,,,,,864,864,864,864,65,65,65,65',
+',65,65,,,,65,65,,786,786,786,,786,65,,65,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,,103,103,103,103,103,786,,786,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,712,712,712,712,712,712,712,712,712,712,712',
+',712,712,,,712,712,,103,,,103,,,103,103,,,103,,103,712,,712,103,712',
+'712,712,712,712,712,712,103,712,,,,103,103,103,103,,103,103,,,,103,103',
+',712,,,,103,103,,103,468,468,468,,468,,,,468,468,,,,468,,468,468,468',
+'468,468,468,468,,,,,,468,468,468,468,468,468,468,,,468,,,,,,,468,,,468',
+'468,468,468,468,468,468,468,,468,468,468,,468,468,468,468,468,,,,,,',
+',,,,,,,,,,,,,468,,,468,,,468,468,,,468,,,,,,468,,,,,,,,468,,,,,468,468',
+'468,468,,468,468,,,,468,468,,109,109,109,,109,468,,468,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,,781,781,781,,781,112,,112,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,,198,198,198,,198',
+'781,,781,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,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,,201,201,201,,201,200,,200,201,201,,,,201',
+',201,201,201,201,201,201,201,,,,,,201,201,201,201,201,201,201,,,201',
+',,,,,,201,,,201,201,201,201,201,201,201,201,201,201,201,201,,201,201',
+'201,201,201,,,,,,,,,,,,,,,,,,,,201,,,201,,,201,201,,,201,,201,,201,',
+'201,,,,,,,,201,,,,,201,201,201,201,,201,201,,,,201,201,,705,705,705',
+',705,201,,201,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',
+',283,283,283,,283,705,,705,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,717,717,717,717,717,717,717',
+'717,717,717,717,,717,717,,,717,717,,283,,,283,,,283,283,,,283,,,717',
+',717,,717,717,717,717,717,717,717,,717,,,,283,283,283,283,,283,283,',
+',,283,283,,717,,283,,,283,,283,677,677,677,,677,,,,677,677,,,,677,,677',
+'677,677,677,677,677,677,,,,,,677,677,677,677,677,677,677,,,677,,,,,',
+',677,,,677,677,677,677,677,677,677,677,,677,677,677,,677,677,677,677',
+'677,,,,,,,,,,,,,,,,,,,,677,,,677,,,677,677,,,677,,,,,,677,,,,,,,,677',
+',,,,677,677,677,677,,677,677,,,,677,677,,299,299,299,,299,677,,677,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,,761,299,761,761,761,761,761,,,,,,,,,,,,,,,299,,,299,,,299,299',
+',,299,,,,,,761,,,,,,,,,761,761,761,761,299,299,299,299,,299,299,,,,299',
+'299,,624,624,624,,624,299,,299,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,,763,624,763,763,763,763,763,',
+',,,,,,,,,,,,,624,,,624,,,624,624,,,624,,,,,,763,,,,,,,,,763,763,763',
+'763,624,624,624,624,,624,624,,,,624,624,,308,308,308,,308,624,,624,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,,613,613',
+'613,,613,308,,308,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,,511,613,511,511,511,511,511,,,,,,,,,,,,,',
+',613,,,613,,,613,613,,,613,,,,,,511,511,,,,,,,,511,511,511,511,613,613',
+'613,613,,613,613,,,,613,613,,608,608,608,,608,613,,613,608,608,,,,608',
+',608,608,608,608,608,608,608,,,,,,608,608,608,608,608,608,608,,,608',
+',,,,,,608,,,608,608,608,608,608,608,608,608,,608,608,608,,608,608,608',
+'608,608,,,,,,,,,,,,,,,,,,,,608,,,608,,,608,608,,,608,,,,,,608,,,,,,',
+',608,,,,,608,608,608,608,,608,608,,,,608,608,,324,324,324,,324,608,',
+'608,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,,325,325',
+'325,,325,324,,324,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,,574,574,574,,574,325,,325,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,,573,573,573,,573,574,,574,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,,569,569,569,,569,573,,573,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,,568,568,568',
+',568,569,,569,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,568,568,,568,568,,,,568,568',
+',565,565,565,,565,568,,568,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,,564,564,564,,564,565,,565,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,,343,343,343,,343,564,,564,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,,562,562,562,,562,343,',
+'343,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,,534,534',
+'534,,534,562,,562,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,,531,531,531,,531,534,,534,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,,521,521,521,,521,531,,531,521,521,,,,521',
+',521,521,521,521,521,521,521,,,,,,521,521,521,521,521,521,521,,,521',
+',,,,,,521,,,521,521,521,521,521,521,521,521,521,521,521,521,,521,521',
+'521,521,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,,521,,521,',
+'521,,,,,,,,521,,,,,521,521,521,521,,521,521,,,,521,521,,358,358,358',
+',358,521,,521,358,358,,,,358,,358,358,358,358,358,358,358,,,,,,358,358',
+'358,358,358,358,358,,,358,,,,,,,358,,,358,358,358,358,358,358,358,358',
+',358,358,358,,358,358,358,358,358,,,,,,,,,,,,,,,,,,,,358,,,358,,,358',
+'358,,,358,,,,,,358,,,,,,,,358,,,,,358,358,358,358,,358,358,,,,358,358',
+',520,520,520,,520,358,,358,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,,385,385,385,,385,520,,520,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,,506,506,506,,506,385,,385,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,,503,503,503,,503,506',
+',506,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',
+',499,499,499,,499,503,,503,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,,497,497,497,,497,499,,499,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,,493,493,493,,493,497,,497,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,,417,417,417,,417,493,',
+'493,417,417,,,,417,,417,417,417,417,417,417,417,,,,,,417,417,417,417',
+'417,417,417,,,417,,,,,,,417,,,417,417,417,417,417,417,417,417,417,417',
+'417,417,,417,417,417,417,417,,,,,,,,,,,,,,,,,,,,417,,,417,,,417,417',
+',,417,,417,,417,,417,,,,,,,,417,,,,,417,417,417,417,,417,417,,,,417',
+'417,,492,492,492,,492,417,,417,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,,419,419,419,,419,492,,492,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,,421,421,421',
+',421,420,,420,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',
+',491,491,491,,491,421,,421,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,,488,488,488,,488,491,,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,,481,481,481,,481,488,,488,481,481,,,,481,,481,481,481',
+'481,481,481,481,,,,,,481,481,481,481,481,481,481,,,481,,,,,,,481,,,481',
+'481,481,481,481,481,481,481,481,481,481,481,,481,481,481,481,481,,,',
+',,,,,,,,,,,,,,,,481,,,481,,,481,481,,,481,,481,,481,,481,,,,,,,,481',
+',,,,481,481,481,481,,481,481,,,,481,481,,479,479,479,,479,481,,481,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,,472,472,472,472,472,479',
+',479,472,472,,,,472,,472,472,472,472,472,472,472,,,,,,472,472,472,472',
+'472,472,472,,,472,,,,,,472,472,,472,472,472,472,472,472,472,472,472',
+',472,472,472,,472,472,472,472,472,20,20,20,20,20,20,20,20,20,20,20,',
+'20,20,,,20,20,,472,,,472,,,472,472,,,472,,472,20,,20,472,20,20,20,20',
+'20,20,20,472,20,,,,472,472,472,472,,472,472,,,,472,472,,20,449,,,472',
+'472,,472,449,449,449,,,449,449,449,,449,,,,,,,,,,449,,,,,,,,,,449,449',
+',449,449,449,449,449,,,,,,,,,,,,452,,,,,,,452,452,452,,,452,452,452',
+',452,,,,,,449,,,,452,,,449,,,,,449,449,452,452,,452,452,452,452,452',
+',,,,,,,,,,,,,449,,,,,,,,,26,,,,,449,,26,26,26,449,452,26,26,26,,26,',
+'452,,,,,452,452,,26,26,,,,,,,,,26,26,,26,26,26,26,26,,,452,,,,,,,,,',
+',,,,452,,,,,452,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,25,26,,26,,,,25',
+'25,25,,,25,25,25,,25,26,26,,26,,26,,,25,25,25,,,,,,,,,25,25,,25,25,25',
+'25,25,,,,,,,,,,,,,,,,,,,,,,,25,25,25,25,25,25,25,25,25,25,25,25,25,25',
+',,25,25,25,,,25,,25,25,,,25,25,,25,,25,,25,,25,25,25,25,25,25,25,396',
+'25,25,25,,,,396,396,396,,,396,396,396,,396,25,25,,25,,25,,,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,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9',
+'9,9,9,9,9,,,,9,9,9,9,9,9,9,9,9,9,,,,,,9,9,9,9,9,9,9,9,9,,,9,,,,,,,,9',
+'9,,9,9,9,9,9,9,9,,,9,9,,,,9,9,9,9,,,,,,,,,,,,,,9,9,,9,9,9,9,9,9,9,9',
+'9,9,9,,,9,9,,,,,,,,,,,9,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,375,,,375,375,,,,375,375,375',
+'375,,,,,,,,,,,,,,375,375,,375,375,375,375,375,375,375,375,375,375,375',
+',,375,375,,,,,,,,,,,375,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,560,,,560,560,,,,560,560,560',
+'560,,,,,,,,,,,,,,560,560,,560,560,560,560,560,560,560,560,560,560,560',
+',,560,560,,,,,,,,,,,560,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8',
+'8,8,,,,8,8,8,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8,,8',
+'8,8,8,8,8,8,,,8,8,,,,8,8,8,8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8,8,8',
+',,8,8,,,,,,,,,,,8,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,690,,,690,690,,,,690,690,690,690',
+',,,,,,,,,,,,,690,690,,690,690,690,690,690,690,690,690,690,690,690,,',
+'690,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66',
+'66,66,,,,66,66,66,66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,66',
+'66,66,66,66,,66,,,,,,66,66,,66,66,66,66,66,66,66,,,66,66,,,,66,66,66',
+'66,,,,,,66,,,,,,,,66,66,,66,66,66,66,66,66,66,66,66,66,66,202,202,66',
+',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,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,249,249,203,,249,,,,,,,,249,249,,249,249',
+'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,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,415',
+'415,250,,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,416,416,415,,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,482,482,416,,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,483,483,482',
+',483,,,,,,,,483,483,,483,483,483,483,483,483,483,,,483,483,,,,483,483',
+'483,483,,,,,,483,,,,,,,,483,483,,483,483,483,483,483,483,483,483,483',
+'483,483,494,494,483,,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,495,495,494,,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,522,522,495,,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',
+'523,523,522,,523,,,,,,,,523,523,,523,523,523,523,523,523,523,,,523,523',
+',,,523,523,523,523,,,,,,523,,,,,,,,523,523,,523,523,523,523,523,523',
+'523,523,523,523,523,529,529,523,,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,530,530,529,,530,,,,,,,,530',
+'530,,530,530,530,530,530,530,530,,,530,530,,,,530,530,530,530,,,,,,530',
+',,,,,,,530,530,,530,530,530,530,530,530,530,530,530,530,530,884,884',
+'530,,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,885,885,884,,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,922,922,885,,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,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,,408,408,408,408,408,408',
+'408,408,408,408,408,,408,408,,496,408,408,,,,,,,,,,,,,,,408,,408,,408',
+'408,408,408,408,408,408,,408,,804,804,804,804,804,804,804,804,804,804',
+'804,,804,804,,408,804,804,,,,,,,,,,,,,,,804,,804,,804,804,804,804,804',
+'804,804,,804,,802,802,802,802,802,802,802,802,802,802,802,,802,802,',
+'804,802,802,,,,,,,,,,,,,,,802,,802,,802,802,802,802,802,802,802,,802',
+',263,263,263,263,263,263,263,263,263,263,263,,263,263,,802,263,263,',
+',,,,,,,,,,,,,263,,263,,263,263,263,263,263,263,263,,263,,447,447,447',
+'447,447,447,447,447,447,447,447,,447,447,,263,447,447,,,,,,,,,,,,,,',
+'447,,447,,447,447,447,447,447,447,447,,447,,703,703,703,703,703,703',
+'703,703,703,703,703,,703,703,447,447,703,703,,,,,,,,,,,,,,,703,,703',
+',703,703,703,703,703,703,703,,703,,625,625,625,625,625,625,625,625,625',
+'625,625,,625,625,,703,625,625,,,,,,,,,,,,,,,625,,625,,625,625,625,625',
+'625,625,625,,625,,706,706,706,706,706,706,706,706,706,706,706,,706,706',
+',625,706,706,,,,,,,,,,,,,,,706,,706,,706,706,706,706,706,706,706,,706',
+',710,710,710,710,710,710,710,710,710,710,710,,710,710,,706,710,710,',
+',,,,,,,,,,,,,710,,710,,710,710,710,710,710,710,710,,710,,715,715,715',
+'715,715,715,715,715,715,715,715,,715,715,,710,715,715,,,,,,,,,,,,,,',
+'715,,715,,715,715,715,715,715,715,715,,715,,,,,,,,,,,,,,,,,715' ]
+ racc_action_check = arr = ::Array.new(23658, 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 = [
+ 1770, 680, nil, 401, nil, 9265, 1244, 268, 21766, 21394,
+ 173, 143, 134, 159, 542, 280, 652, nil, -66, 12015,
+ 20797, 1215, nil, 578, 117, 21155, 21046, 12140, 12265, 12390,
+ nil, 3895, 12515, 12640, nil, 1098, 239, 1135, 495, 13023,
+ 13148, 13273, 1051, 1012, nil, nil, nil, nil, nil, nil,
+ nil, 1637, 2020, 13398, 13523, 13648, -15, nil, 13773, 13898,
+ nil, nil, 14023, 14156, 14281, 14406, 22002, nil, nil, nil,
+ nil, nil, nil, nil, 103, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 624, nil, nil,
+ 234, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 1173, nil, 14656, nil, nil, nil, nil, 11140, 14914,
+ 15039, 15164, 15289, 884, nil, 485, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 1032, nil, 1134, 15539, 15664,
+ 15789, 15914, 22062, 22122, 4890, 5015, 5140, 5265, 5390, nil,
+ nil, 1381, 87, 1072, -82, 987, 1035, nil, 5765, 3520,
+ 1023, 6015, 6140, 6265, 6390, 6515, 6640, 6765, 6890, 7015,
+ 7140, 7265, 7390, 7515, 7640, 7765, 7890, 8015, 8140, 8265,
+ 8390, 8515, 8640, 8765, 8890, 9015, 9140, nil, nil, 22182,
+ 22242, 1006, 9515, 9640, nil, nil, nil, nil, nil, nil,
+ nil, 9765, nil, 23254, nil, 936, 926, nil, 10140, 964,
+ 10390, nil, 10515, nil, nil, 294, 1369, 10890, 910, 2395,
+ 911, 943, 896, 16164, 3020, 765, 502, 962, 762, nil,
+ 918, 876, 119, nil, nil, nil, 908, -32, 866, 16422,
+ nil, 259, 846, 842, 999, nil, 816, nil, 16672, 865,
+ 862, 505, nil, 72, 273, 749, 707, 128, 728, nil,
+ nil, 320, 35, 36, 17047, 17172, 392, 771, 654, 28,
+ 435, 716, 61, 744, nil, nil, 334, 333, 212, nil,
+ 1014, nil, 27, 18047, nil, nil, 689, 375, -51, 592,
+ 670, -50, 266, 298, 475, nil, 337, nil, 18672, nil,
+ 403, 428, 364, 424, -43, 173, nil, nil, nil, nil,
+ nil, nil, nil, nil, 631, 21518, nil, nil, nil, nil,
+ 611, nil, nil, 1509, nil, 18922, 592, nil, 590, nil,
+ nil, 4270, 587, nil, 284, 137, 21264, nil, nil, nil,
+ 0, 109, 615, nil, nil, 4507, 4398, nil, 23116, nil,
+ nil, nil, -5, nil, 585, 22302, 22362, 19672, -21, 19922,
+ 20047, 20172, 2145, 2270, 189, 646, 519, 517, 508, 488,
+ 3520, 3395, 3270, 2645, 1770, 1895, 2020, 2520, 2895, 3145,
+ 2395, 1259, 2770, 1134, 1234, 3020, 1384, 23300, 211, 20925,
+ nil, nil, 20980, nil, nil, 374, nil, nil, 11515, -54,
+ 97, 403, nil, nil, 11390, nil, 11265, nil, 14789, nil,
+ nil, nil, 20797, 1384, 467, 474, nil, nil, 484, 20672,
+ 502, 20547, 22422, 22482, 887, 550, nil, nil, 20422, 530,
+ nil, 20297, 19797, 19547, 22542, 22602, 23070, 19422, 672, 19297,
+ nil, 583, nil, 19172, nil, nil, 19047, nil, nil, nil,
+ nil, 16810, 4145, 703, nil, 759, 29, 63, 717, 733,
+ 18797, 18547, 22662, 22722, 40, nil, nil, 1137, nil, 22782,
+ 22842, 18422, nil, nil, 18297, 378, -34, 2520, 12528, nil,
+ nil, nil, 21, nil, nil, nil, 1117, nil, nil, nil,
+ 628, nil, nil, 418, nil, nil, 626, nil, nil, nil,
+ 21642, nil, 18172, 629, 17922, 17797, -48, 673, 17672, 17547,
+ 679, nil, nil, 17422, 17297, 690, nil, nil, nil, -36,
+ -40, 364, 494, 669, 12640, 677, nil, 298, nil, 4765,
+ nil, nil, nil, nil, 215, nil, 14023, -68, 697, nil,
+ 714, nil, 1384, 2645, nil, 716, nil, 765, 16922, nil,
+ nil, 1162, -114, 16797, 730, nil, 744, 200, 258, 788,
+ 204, 1256, 803, 767, 16547, 23392, 831, 834, -25, 903,
+ nil, 4020, 791, 853, nil, nil, nil, -70, 21, 12786,
+ nil, 815, 822, 836, nil, nil, nil, nil, nil, nil,
+ 116, 917, nil, 561, nil, nil, nil, nil, 919, nil,
+ nil, 926, 643, nil, 964, nil, nil, nil, nil, 975,
+ nil, 10, 870, 11, 1, 150, 67, 16297, 175, 764,
+ nil, 895, 1895, 100, nil, nil, 1013, 2770, 14294, 427,
+ 21890, nil, nil, nil, nil, nil, nil, 3270, nil, nil,
+ nil, nil, nil, 23346, 907, 16039, 23438, 11015, nil, nil,
+ 23484, nil, 14656, nil, nil, 23530, nil, 16164, nil, 10765,
+ 10640, 10265, 10015, 118, 9890, 940, 951, 961, nil, 985,
+ 964, 995, 145, nil, 1090, 2895, 9390, nil, nil, 977,
+ 996, 1100, nil, 5890, nil, 991, 172, nil, nil, nil,
+ 3145, nil, nil, 12, 5640, nil, nil, nil, nil, nil,
+ 1001, 16435, nil, 16560, nil, nil, 1031, 1091, 5515, nil,
+ nil, 590, nil, 1017, 426, 1060, 1024, nil, nil, 1149,
+ nil, 15414, 1153, 1009, 4270, nil, 14531, 1509, -18, 37,
+ nil, 1171, nil, 4640, nil, 1185, 1080, nil, nil, 1104,
+ 1088, nil, 23208, 12898, 23162, 4362, nil, 5653, nil, nil,
+ 554, nil, 1110, 1094, nil, nil, nil, 12773, nil, 1116,
+ 1104, nil, 1105, nil, nil, nil, 1111, nil, 2270, 498,
+ 889, 1186, 890, nil, 2145, 1259, 1119, 1117, 1118, nil,
+ nil, 1123, 1128, nil, 1138, nil, nil, 1145, 628, 1143,
+ 899, nil, nil, 6, nil, 1264, 1266, nil, 317, nil,
+ nil, 1286, nil, nil, 14419, nil, 1167, 1169, 1170, -85,
+ nil, -67, nil, 1024, 412, 33, nil, nil, 11890, nil,
+ nil, 11765, 87, 11640, 22902, 22962, 372, 98, 216, nil,
+ 14169, nil, nil, 935, nil, 906, nil, 810, nil, nil,
+ nil, 460, 774, 369, 3770, nil, nil, nil, nil, nil,
+ 3645, nil, 3395, 1601, nil, nil, 781, nil, 684, nil,
+ nil, nil, 23022, nil, 193, nil, 221, 33, -11, 39,
+ 1131, nil, nil, 252, 254, 256, 279, 283, 870, 287,
+ 745, 285, 419, 444, 326, 332, 344, 501, 545, 588,
+ nil, -7, nil, 1060, nil, nil, nil, 617, 616, nil,
+ nil, nil, nil, 1156, nil, nil, nil, -16, 43, 185,
+ nil, nil ]
+
+racc_action_default = [
+ -3, -557, -1, -543, -4, -557, -7, -557, -557, -557,
+ -557, -557, -557, -557, -557, -280, -39, -40, -545, -557,
+ -45, -47, -48, -49, -255, -255, -255, -290, -326, -327,
+ -65, -11, -69, -77, -79, -557, -472, -557, -557, -557,
+ -557, -557, -545, -232, -273, -274, -275, -276, -277, -278,
+ -279, -533, -11, -557, -556, -525, -298, -300, -557, -557,
+ -304, -307, -543, -557, -557, -557, -557, -328, -329, -331,
+ -332, -421, -422, -423, -424, -425, -440, -428, -429, -442,
+ -444, -433, -438, -454, -442, -456, -457, -531, -461, -462,
+ -532, -464, -465, -466, -467, -468, -469, -470, -471, -474,
+ -475, -557, -2, -544, -552, -553, -554, -6, -557, -557,
+ -557, -557, -557, -3, -15, -557, -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, -557, -557,
+ -557, -241, -557, -557, -557, -557, -557, -557, -545, -546,
+ -44, -557, -472, -557, -280, -557, -557, -224, -557, -11,
+ -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, -391, -393, -557,
+ -557, -54, -241, -557, -297, -396, -405, -407, -60, -402,
+ -61, -545, -62, -233, -243, -265, -265, -248, -557, -266,
+ -557, -527, -557, -63, -64, -543, -12, -557, -67, -11,
+ -545, -557, -70, -73, -11, -85, -557, -557, -92, -290,
+ -293, -545, -557, -326, -327, -330, -403, -557, -75, -557,
+ -81, -287, -458, -459, -557, -209, -210, -225, -557, -413,
+ -557, -283, -234, -549, -549, -557, -557, -549, -557, -299,
+ -383, -46, -557, -557, -557, -557, -543, -557, -544, -472,
+ -557, -557, -280, -557, -342, -343, -101, -102, -557, -104,
+ -557, -280, -557, -557, -472, -319, -106, -107, -147, -148,
+ -149, -165, -170, -177, -180, -321, -557, -523, -557, -426,
+ -557, -557, -557, -557, -557, -557, 972, -5, -555, -21,
+ -22, -23, -24, -25, -557, -557, -17, -18, -19, -116,
+ -557, -27, -36, -188, -266, -557, -557, -28, -37, -38,
+ -29, -190, -545, -242, -534, -535, -255, -400, -536, -537,
+ -535, -534, -255, -399, -401, -536, -537, -35, -198, -41,
+ -42, -43, -545, -296, -557, -557, -557, -241, -287, -557,
+ -557, -557, -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, -545, -372, -255,
+ -534, -535, -255, -52, -55, -545, -256, -257, -258, -372,
+ -372, -545, -292, -244, -264, -245, -264, -262, -557, -267,
+ -530, -10, -544, -14, -545, -66, -285, -82, -71, -557,
+ -545, -241, -557, -557, -91, -557, -458, -459, -557, -78,
+ -83, -557, -557, -557, -557, -557, -230, -557, -556, -556,
+ -282, -545, -235, -551, -550, -237, -551, -288, -289, -526,
+ -301, -495, -11, -333, -334, -11, -557, -557, -557, -557,
+ -557, -241, -557, -557, -287, -312, -101, -102, -103, -557,
+ -557, -241, -315, -476, -557, -557, -557, -11, -495, -323,
+ -541, -542, -545, -427, -441, -446, -557, -448, -430, -443,
+ -557, -445, -432, -557, -435, -437, -557, -455, -8, -16,
+ -557, -26, -557, -272, -557, -557, -404, -557, -557, -557,
+ -56, -240, -397, -557, -557, -58, -398, -295, -547, -534,
+ -535, -534, -535, -545, -188, -557, -373, -377, -375, -11,
+ -50, -394, -51, -395, -372, -238, -45, -557, -265, -254,
+ -545, -260, -11, -11, -291, -265, -263, -268, -557, -528,
+ -529, -13, -68, -557, -74, -80, -545, -534, -535, -239,
+ -88, -90, -557, -76, -557, -197, -207, -208, -545, -556,
+ -340, -11, -414, -556, -415, -416, -284, -549, -557, -495,
+ -386, -522, -522, -522, -494, -496, -497, -498, -499, -500,
+ -501, -557, -504, -557, -506, -512, -514, -515, -517, -518,
+ -519, -557, -556, -335, -556, -305, -336, -337, -308, -557,
+ -311, -557, -545, -534, -535, -538, -286, -557, -101, -102,
+ -105, -545, -11, -557, -478, -317, -557, -11, -495, -557,
+ -557, -524, -447, -450, -451, -452, -453, -11, -431, -434,
+ -436, -439, -117, -189, -270, -557, -191, -557, -548, -31,
+ -193, -32, -194, -57, -33, -196, -34, -195, -59, -557,
+ -557, -557, -557, -404, -557, -522, -522, -522, -371, -557,
+ -377, -557, -501, -510, -557, -11, -557, -251, -259, -545,
+ -557, -557, -246, -264, -269, -72, -86, -84, -294, -9,
+ -11, -420, -341, -557, -557, -418, -236, -384, -387, -389,
+ -377, -557, -487, -557, -490, -492, -557, -557, -557, -503,
+ -344, -557, -346, -348, -355, -501, -545, -516, -520, -557,
+ -338, -557, -557, -11, -11, -310, -557, -11, -404, -557,
+ -404, -557, -477, -11, -320, -557, -545, -480, -324, -557,
+ -271, -30, -192, -557, -231, -362, -364, -557, -367, -369,
+ -557, -374, -557, -378, -379, -381, -382, -557, -392, -557,
+ -265, -250, -265, -261, -406, -408, -265, -419, -11, -93,
+ -557, -557, -100, -417, -11, -11, -545, -522, -522, -507,
+ -521, -522, -522, -513, -522, -502, -508, -545, -557, -353,
+ -557, -505, -302, -557, -303, -557, -557, -268, -556, -313,
+ -316, -557, -322, -479, -495, -449, -522, -522, -522, -522,
+ -511, -522, -376, -557, -509, -557, -53, -249, -264, -252,
+ -247, -264, -413, -241, -557, -557, -99, -557, -557, -385,
+ -557, -483, -485, -557, -488, -557, -491, -557, -493, -345,
+ -347, -351, -557, -356, -11, -306, -309, -409, -410, -411,
+ -11, -318, -11, -557, -359, -361, -557, -365, -557, -368,
+ -370, -380, -557, -287, -265, -412, -545, -534, -535, -538,
+ -98, -388, -390, -522, -522, -522, -522, -349, -557, -354,
+ -557, -556, -557, -557, -522, -522, -522, -522, -286, -538,
+ -253, -404, -481, -557, -484, -486, -489, -557, -352, -339,
+ -314, -325, -357, -557, -360, -363, -366, -522, -350, -522,
+ -482, -358 ]
+
+clist = [
+'119,119,313,207,355,36,282,310,314,317,36,295,295,392,312,264,264,264',
+'498,519,114,196,629,106,489,454,210,308,15,566,396,402,278,15,124,124',
+'36,285,285,512,515,779,295,295,295,463,465,687,322,323,280,102,326,255',
+'259,609,644,36,119,15,288,288,6,727,455,103,298,6,329,344,344,344,726',
+'122,122,382,389,449,452,528,15,640,106,644,665,668,502,505,816,843,509',
+'332,341,341,544,609,551,554,369,370,371,372,251,258,260,599,814,900',
+'36,839,327,606,903,606,589,2,776,36,36,262,273,274,361,729,107,602,603',
+'365,784,870,591,15,728,593,342,345,749,195,335,375,15,15,594,560,315',
+'601,386,386,456,600,739,357,316,839,319,510,333,532,356,539,501,320',
+'13,324,939,6,783,13,325,1,677,910,682,793,373,6,537,538,690,864,730',
+'813,638,757,644,511,248,834,782,264,835,448,459,13,460,406,907,633,753',
+'900,958,359,36,360,614,381,387,390,362,760,669,407,363,623,13,553,843',
+'364,692,968,723,697,367,837,36,15,,,374,583,816,397,,644,847,870,,838',
+',841,264,264,,396,402,839,,15,921,264,,,,746,,281,,,796,,735,,295,,',
+'13,812,,,,680,,,490,13,13,485,,295,,278,867,36,868,36,278,,700,285,36',
+'866,,,616,,106,836,,474,,,,,480,285,15,,15,,788,619,288,15,,516,517',
+'478,,790,,959,255,619,471,,259,,288,,,,,609,672,,,,472,745,473,,,311',
+'681,713,457,106,321,321,718,619,321,,461,,,,859,619,13,,,533,,,,933',
+'119,,,,,,912,518,,634,567,737,,,13,908,821,,742,11,559,787,944,606,11',
+',,,,,321,321,321,321,124,,,,264,,,406,644,756,,598,,,,,11,605,,,380',
+',,,571,,,,,,576,585,,,,,,11,13,122,13,,281,397,,13,386,,334,,,,490,',
+',,637,295,635,,,490,,,,,295,671,264,828,,,,570,406,,36,571,,575,571',
+',,285,,,406,,11,,,686,285,409,410,411,412,11,11,15,,,281,,,,288,281',
+'264,,397,,,,406,288,36,,264,36,406,,397,683,606,,590,606,,592,,,,611',
+',666,666,,,15,,36,15,,,,,,,909,397,119,,,684,685,,,397,,,,951,,15,,',
+'567,,904,,702,,696,709,711,,,,714,716,,11,,,124,490,,751,,925,295,755',
+'36,,,,747,,877,567,879,295,,11,880,36,36,,,,,321,321,,,15,285,,,,,,',
+'122,,,798,285,15,15,536,,13,,36,791,,,,288,795,,,,,542,571,,,576,288',
+',,,,567,,15,,,,11,,11,567,789,,,11,,,,13,,318,13,,,,,119,,820,,,36,',
+',822,826,36,,,926,,,,13,,,36,792,950,,,,,797,15,,619,,801,15,,,,,,,',
+',,15,,,,,,,,295,,,662,,,664,36,,,,,,,311,861,,,13,,,,36,,,,829,,,,15',
+'13,13,,,,,,853,14,,,,,14,15,,,,832,,,,628,,36,36,,211,36,13,,,295,,36',
+'211,211,211,,14,286,286,,,,666,,15,15,734,,15,413,,,384,388,15,344,321',
+'14,211,740,741,,,211,211,924,36,211,330,340,340,,36,36,,,,13,341,,,',
+'13,,,,,,752,15,,11,13,,,15,15,,,,943,,462,,264,,,,14,,406,,,211,211',
+'211,211,14,14,,,475,467,,469,,470,,770,,13,11,,,11,,,,,,,,36,,567,13',
+'397,406,36,,36,,,,799,,11,,,,,,,,,15,,,,,,15,,15,,,,,13,13,,,13,,,,',
+',13,,,,819,,,,,,,321,,,14,211,211,211,211,827,11,211,211,211,211,211',
+',,,,,725,,11,11,13,14,,,,,13,13,,,,,,,,,563,855,856,,,858,,770,,,849',
+'11,,,577,,,,211,211,,,,,,,,211,,,,,,,,,,,,,,,,14,,14,882,,,286,14,,887',
+'888,,,,595,,,13,,11,604,321,286,13,11,13,,,,,597,,,612,11,,607,,318',
+'615,610,770,,770,,,,211,211,,,,,,,,,,,,636,,,,,,211,,,,,632,11,,,607',
+',,318,941,,211,,,,942,,11,,,,833,384,,937,770,,,,,,691,,,,,,,,,,,,842',
+',,844,,,,11,11,,,11,,,,,,11,770,,770,,,704,,,,211,,,,,,,,,,770,,,,,',
+',869,,738,871,,,,,11,,,,,24,11,11,,,24,,,,,744,211,,,,,,748,,24,,,,',
+',14,,24,24,24,,24,286,,211,,,,,,,286,,,,,,,,,211,,24,24,,,,,24,24,,',
+'24,,,14,,,14,,934,11,,935,211,936,,11,,11,,,,,211,,,211,,,14,,,945,',
+',946,,947,,,,,24,,,,800,24,24,24,24,24,24,,,,,,,,211,211,,,,211,211',
+'823,,,,,967,,,,,,,,,14,969,,,,,762,764,765,,,,,14,14,,,,,,,,,851,286',
+',,,846,,,,,,,286,,,,,,,14,863,,,857,,,,,,,,,24,24,24,24,24,,,24,24,24',
+'24,24,,,,,,,,,,,24,,,,,,889,,,,,211,,806,808,809,14,899,,,,14,,,,,,',
+',,,14,,24,24,,,,,,,211,24,,,,,,,,,,,,,,,,24,,24,607,,,857,24,,,,14,',
+',,,,,,,,,,,,,14,,,,830,,,,,,,,,,,,,,,,,24,24,,,,,,,,,211,,14,14,,,14',
+',,24,891,892,14,,894,896,,898,,,,,,,24,,,,,,,,,,,,874,,,914,915,917',
+'919,,920,,,14,,,,,,14,14,,,,,,,,,,,,,,,,,,,,,,,,,,,,,24,,,,,,,,,,,,',
+',,,,,,211,,,,952,954,955,956,,,,,,,,962,964,965,966,,,14,24,,,,,14,',
+'14,,,,,,,24,,970,,971,,,,,24,,,,,,,,,,,,,,,,24,,,,,,,,,,,,,,,24,,,24',
+',,,,,24,,,,,,,,,,24,,,24,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,24,24,,',
+',24,24,,,,,,,,,,,,,,,24,,,,,,,,217,,,,,24,24,,263,263,263,,,,,,,,,,305',
+'306,307,,,,,,,,,,,,24,263,263,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,24,,,,,24,,,,,24,,,,,,,,,,24,,,,,,,,,,24,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,24,,,,,,,,,,,,,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,383,263,391,263,,24',
+'408,24,24,,,24,,,,,,24,,,217,,,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,447,,,,24',
+',263,263,,,24,24,,,,263,,,,,,,263,,263,,263,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,24,,,496,,,,,,,,,,,,,,,,,,24,,,,,,24,,24,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,263,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,263',
+',408,584,391,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,596,,,,,,263,,263,',
+'263,,,,,,,,,,,,,263,,,,,,,,,,625,626,627,,,,,,263,,,,263,,,263,,,,,',
+',,,,,,,,263,263,,,,,,,,,,263,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,703,,263',
+'706,,,710,712,,,,715,717,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,263,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,263,,802,,,,,,,,,,,,710,712,717,715,,804,,,,,',
+',,,,,,263,,,,,,,263,,,,,,,,,,,,,,,,,,,,,,,,,263,,,,,,,,,,,,,,,,,,263',
+',,,,,,,,,,,,,,,,802,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,263,,,263,,263' ]
+ racc_goto_table = arr = ::Array.new(2681, 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,61,29,51,48,45,8,63,63,48,58,58,22,60,31,31,31,10,87,14,14,11',
+'91,47,36,18,29,24,23,34,34,41,24,56,56,48,48,48,84,84,85,58,58,58,66',
+'66,93,16,16,42,4,16,64,64,157,119,48,52,24,24,24,7,117,22,6,46,7,48',
+'48,48,48,116,55,55,25,25,34,34,49,24,128,91,119,86,86,62,62,124,153',
+'62,24,24,24,147,157,147,147,16,16,16,16,35,35,35,67,123,110,48,152,4',
+'67,113,67,37,2,112,48,48,40,40,40,143,121,5,37,37,143,101,154,65,24',
+'119,65,50,50,12,15,19,28,24,24,38,57,59,68,61,61,69,71,72,79,80,152',
+'81,83,88,90,94,95,96,97,20,98,113,7,99,20,100,1,102,103,104,105,7,7',
+'106,107,108,109,114,122,125,126,119,127,129,130,11,31,131,132,134,20',
+'135,52,136,137,138,110,113,141,48,142,47,18,18,18,144,128,87,18,145',
+'47,20,146,153,148,149,113,23,150,5,151,48,24,,,2,22,124,64,,119,112',
+'154,,117,,117,31,31,,34,34,152,,24,123,31,,,,23,,9,,,128,,37,,58,,,20',
+'121,,,,49,,,45,20,20,29,,58,,41,117,48,117,48,41,,147,48,48,116,,,22',
+',91,121,,42,,,,,42,48,24,,24,,23,34,24,24,,16,16,46,,23,,85,64,34,4',
+',64,,24,,,,,157,22,,,,6,47,7,,,27,22,36,40,91,27,27,36,34,27,,40,,,',
+'86,34,20,,,91,,,,117,52,,,,,,93,4,,25,29,66,,,20,11,67,,66,17,14,84',
+'117,67,17,,,,,,27,27,27,27,56,,,,31,,,52,119,62,,63,,,,,17,63,,,9,,',
+',64,,,,,,64,29,,,,,,17,20,55,20,,9,64,,20,61,,17,,,,45,,,,63,58,60,',
+',45,,,,,58,61,31,84,,,,35,52,,48,64,,35,64,,,48,,,52,,17,,,8,48,27,27',
+'27,27,17,17,24,,,9,,,,24,9,31,,64,,,,52,24,48,,31,48,52,,64,16,67,,35',
+'67,,35,,,,7,,91,91,,,24,,48,24,,,,,,,87,64,52,,,91,91,,,64,,,,23,,24',
+',,29,,84,,14,,24,18,18,,,,18,18,,17,,,56,45,,60,,10,58,60,48,,,,45,',
+'66,29,66,58,,17,66,48,48,,,,,27,27,,,24,48,,,,,,,55,,,51,48,24,24,27',
+',20,,48,8,,,,24,8,,,,,27,64,,,64,24,,,,,29,,24,,,,17,,17,29,16,,,17',
+',,,20,,26,20,,,,,52,,61,,,48,,,63,61,48,,,22,,,,20,,,48,91,66,,,,,91',
+'24,,34,,18,24,,,,,,,,,,24,,,,,,,,58,,,9,,,9,48,,,,,,,27,8,,,20,,,,48',
+',,,48,,,,24,20,20,,,,,,16,21,,,,,21,24,,,,24,,,,27,,48,48,,21,48,20',
+',,58,,48,21,21,21,,21,21,21,,,,91,,24,24,9,,24,43,,,26,26,24,48,27,21',
+'21,9,9,,,21,21,63,48,21,21,21,21,,48,48,,,,20,24,,,,20,,,,,,9,24,,17',
+'20,,,24,24,,,,8,,43,,31,,,,21,,52,,,21,21,21,21,21,21,,,43,26,,26,,26',
+',111,,20,17,,,17,,,,,,,,48,,29,20,64,52,48,,48,,,,9,,17,,,,,,,,,24,',
+',,,,24,,24,,,,,20,20,,,20,,,,,,20,,,,9,,,,,,,27,,,21,21,21,21,21,9,17',
+'21,21,21,21,21,,,,,,115,,17,17,20,21,,,,,20,20,,,,,,,,,26,9,9,,,9,,111',
+',,111,17,,,43,,,,21,21,,,,,,,,21,,,,,,,,,,,,,,,,21,,21,9,,,21,21,,9',
+'9,,,,43,,,20,,17,43,27,21,20,17,20,,,,,26,,,43,17,,26,,26,43,26,111',
+',111,,,,21,21,,,,,,,,,,,,43,,,,,,21,,,,,26,17,,,26,,,26,9,,21,,,,9,',
+'17,,,,17,26,,111,111,,,,,,43,,,,,,,,,,,,115,,,115,,,,17,17,,,17,,,,',
+',17,111,,111,,,26,,,,21,,,,,,,,,,111,,,,,,,115,,43,115,,,,,17,,,,,39',
+'17,17,,,39,,,,,26,21,,,,,,43,,39,,,,,,21,,39,39,39,,39,21,,21,,,,,,',
+'21,,,,,,,,,21,,39,39,,,,,39,39,,,39,,,21,,,21,,115,17,,115,21,115,,17',
+',17,,,,,21,,,21,,,21,,,115,,,115,,115,,,,,39,,,,26,39,39,39,39,39,39',
+',,,,,,,21,21,,,,21,21,43,,,,,115,,,,,,,,,21,115,,,,,118,118,118,,,,',
+'21,21,,,,,,,,,43,21,,,,26,,,,,,,21,,,,,,,21,43,,,26,,,,,,,,,39,39,39',
+'39,39,,,39,39,39,39,39,,,,,,,,,,,39,,,,,,43,,,,,21,,118,118,118,21,43',
+',,,21,,,,,,,,,,21,,39,39,,,,,,,21,39,,,,,,,,,,,,,,,,39,,39,26,,,26,39',
+',,,21,,,,,,,,,,,,,,,21,,,,21,,,,,,,,,,,,,,,,,39,39,,,,,,,,,21,,21,21',
+',,21,,,39,118,118,21,,118,118,,118,,,,,,,39,,,,,,,,,,,,21,,,118,118',
+'118,118,,118,,,21,,,,,,21,21,,,,,,,,,,,,,,,,,,,,,,,,,,,,,39,,,,,,,,',
+',,,,,,,,,,21,,,,118,118,118,118,,,,,,,,118,118,118,118,,,21,39,,,,,21',
+',21,,,,,,,39,,118,,118,,,,,39,,,,,,,,,,,,,,,,39,,,,,,,,,,,,,,,39,,,39',
+',,,,,39,,,,,,,,,,39,,,39,,,39,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,39,39,,',
+',39,39,,,,,,,,,,,,,,,39,,,,,,,,30,,,,,39,39,,30,30,30,,,,,,,,,,30,30',
+'30,,,,,,,,,,,,39,30,30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,39',
+',,,,39,,,,,39,,,,,,,,,,39,,,,,,,,,,39,,,,,,,,,,,,,,,,,,,,,,,,,,,,39',
+',,,,,,,,,,,,,,39,,,,,,,,,,,,,,,,,,,,,,,,,,30,30,30,30,,39,30,39,39,',
+',39,,,,,,39,,,30,,,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30',
+'30,30,30,30,30,30,30,30,30,,,,39,,30,30,,,39,39,,,,30,,,,,,,30,,30,',
+'30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,39,,,30,,,,,,,,,,,,,,,,,,39,,,,,',
+'39,,39,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,30,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,30,,30,30,30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,30,,,,,,30,,30,,30,,,,,,,,,,,,,30,,,,,,,,,,30,30,30,,,,,,30,,,,30',
+',,30,,,,,,,,,,,,,,30,30,,,,,,,,,,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(2681, 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, 169, 115, nil, 48, 119, 62, 62, -45, 224,
+ -291, -476, -493, nil, 12, 128, -10, 386, 7, 75,
+ 162, 772, -188, -363, 28, -123, 621, 289, 25, -15,
+ 1797, -12, nil, nil, -172, 78, -226, -334, -311, 1219,
+ 92, 1, 19, 608, nil, -26, 33, -275, 5, -259,
+ 70, -62, -8, nil, nil, 65, 26, -236, -21, 90,
+ -40, -52, -227, -46, 29, -319, -220, -353, -313, -105,
+ nil, -309, -451, nil, nil, nil, nil, nil, nil, 85,
+ 97, 98, nil, -165, -283, -621, -432, -308, 93, nil,
+ -185, 20, nil, -491, 92, -197, -151, 104, 103, -499,
+ 107, -540, -355, -688, -360, -512, -169, -178, -361, -619,
+ -741, 242, -537, -738, -407, 399, -515, -524, 726, -455,
+ nil, -464, -550, -625, -643, -329, -455, -135, -430, 165,
+ -571, -569, -56, nil, -64, -63, -662, -302, -435, nil,
+ nil, 127, 127, 43, 128, 131, -148, -266, 135, -328,
+ -326, -538, -652, -674, -678, nil, nil, -411 ]
+
+racc_goto_default = [
+ nil, nil, nil, 3, nil, 4, 328, 276, nil, 309,
+ nil, 780, nil, 275, nil, nil, nil, 215, 17, 12,
+ 216, 304, nil, nil, 214, nil, 269, 16, nil, 414,
+ 20, 21, 22, 23, 622, nil, nil, nil, nil, 292,
+ 393, 30, nil, nil, 32, 35, 34, nil, 212, 339,
+ nil, 121, 399, 120, 123, 72, 73, nil, 43, nil,
+ 630, 265, nil, 266, 404, 572, nil, 267, nil, nil,
+ 253, nil, nil, 44, 45, 46, 47, 48, 49, 50,
+ nil, 254, 56, nil, nil, nil, nil, nil, nil, 64,
+ nil, 513, 65, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 772, 652, nil, 773, nil, 641, nil, 643, nil, 840,
+ 586, nil, nil, nil, 649, nil, nil, nil, 689, nil,
+ nil, nil, nil, 403, nil, nil, nil, nil, nil, 71,
+ 74, 75, nil, nil, nil, nil, nil, 549, nil, nil,
+ nil, 642, 654, 655, 733, 658, 661, 271 ]
+
+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, 233, :_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,
+ 0, 234, :_reduce_300,
+ 3, 195, :_reduce_301,
+ 6, 195, :_reduce_302,
+ 6, 195, :_reduce_303,
+ 0, 235, :_reduce_304,
+ 0, 236, :_reduce_305,
+ 7, 195, :_reduce_306,
+ 0, 237, :_reduce_307,
+ 0, 238, :_reduce_308,
+ 7, 195, :_reduce_309,
+ 5, 195, :_reduce_310,
+ 4, 195, :_reduce_311,
+ 0, 239, :_reduce_312,
+ 0, 240, :_reduce_313,
+ 9, 195, :_reduce_314,
+ 0, 241, :_reduce_315,
+ 6, 195, :_reduce_316,
+ 0, 242, :_reduce_317,
+ 7, 195, :_reduce_318,
+ 0, 243, :_reduce_319,
+ 5, 195, :_reduce_320,
+ 0, 244, :_reduce_321,
+ 6, 195, :_reduce_322,
+ 0, 245, :_reduce_323,
+ 0, 246, :_reduce_324,
+ 9, 195, :_reduce_325,
+ 1, 195, :_reduce_326,
+ 1, 195, :_reduce_327,
+ 1, 195, :_reduce_328,
+ 1, 195, :_reduce_329,
+ 1, 158, :_reduce_none,
+ 1, 226, :_reduce_331,
+ 1, 229, :_reduce_332,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 2, 221, :_reduce_335,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 5, 222, :_reduce_339,
+ 1, 148, :_reduce_none,
+ 2, 148, :_reduce_341,
+ 1, 225, :_reduce_none,
+ 1, 225, :_reduce_none,
+ 1, 247, :_reduce_none,
+ 3, 247, :_reduce_345,
+ 1, 250, :_reduce_346,
+ 3, 250, :_reduce_347,
+ 1, 249, :_reduce_none,
+ 4, 249, :_reduce_349,
+ 6, 249, :_reduce_350,
+ 3, 249, :_reduce_351,
+ 5, 249, :_reduce_352,
+ 2, 249, :_reduce_353,
+ 4, 249, :_reduce_354,
+ 1, 249, :_reduce_355,
+ 3, 249, :_reduce_356,
+ 6, 251, :_reduce_357,
+ 8, 251, :_reduce_358,
+ 4, 251, :_reduce_359,
+ 6, 251, :_reduce_360,
+ 4, 251, :_reduce_361,
+ 2, 251, :_reduce_none,
+ 6, 251, :_reduce_363,
+ 2, 251, :_reduce_364,
+ 4, 251, :_reduce_365,
+ 6, 251, :_reduce_366,
+ 2, 251, :_reduce_367,
+ 4, 251, :_reduce_368,
+ 2, 251, :_reduce_369,
+ 4, 251, :_reduce_370,
+ 1, 251, :_reduce_371,
+ 0, 174, :_reduce_372,
+ 1, 174, :_reduce_373,
+ 3, 257, :_reduce_374,
+ 1, 257, :_reduce_375,
+ 4, 257, :_reduce_376,
+ 0, 258, :_reduce_377,
+ 2, 258, :_reduce_378,
+ 1, 259, :_reduce_379,
+ 3, 259, :_reduce_380,
+ 1, 260, :_reduce_381,
+ 1, 260, :_reduce_none,
+ 0, 264, :_reduce_383,
+ 3, 220, :_reduce_384,
+ 4, 262, :_reduce_385,
+ 1, 262, :_reduce_386,
+ 0, 267, :_reduce_387,
+ 4, 263, :_reduce_388,
+ 0, 268, :_reduce_389,
+ 4, 263, :_reduce_390,
+ 0, 269, :_reduce_391,
+ 5, 266, :_reduce_392,
+ 2, 170, :_reduce_393,
+ 4, 170, :_reduce_394,
+ 4, 170, :_reduce_395,
+ 2, 219, :_reduce_396,
+ 4, 219, :_reduce_397,
+ 4, 219, :_reduce_398,
+ 3, 219, :_reduce_399,
+ 3, 219, :_reduce_400,
+ 3, 219, :_reduce_401,
+ 2, 219, :_reduce_402,
+ 1, 219, :_reduce_403,
+ 4, 219, :_reduce_404,
+ 0, 271, :_reduce_405,
+ 5, 218, :_reduce_406,
+ 0, 272, :_reduce_407,
+ 5, 218, :_reduce_408,
+ 5, 224, :_reduce_409,
+ 1, 273, :_reduce_410,
+ 1, 273, :_reduce_none,
+ 6, 147, :_reduce_412,
+ 0, 147, :_reduce_413,
+ 1, 274, :_reduce_414,
+ 1, 274, :_reduce_none,
+ 1, 274, :_reduce_none,
+ 2, 275, :_reduce_417,
+ 1, 275, :_reduce_none,
+ 2, 149, :_reduce_419,
+ 1, 149, :_reduce_none,
+ 1, 210, :_reduce_none,
+ 1, 210, :_reduce_none,
+ 1, 210, :_reduce_none,
+ 1, 211, :_reduce_424,
+ 1, 277, :_reduce_425,
+ 2, 277, :_reduce_426,
+ 3, 278, :_reduce_427,
+ 1, 278, :_reduce_428,
+ 1, 278, :_reduce_429,
+ 3, 212, :_reduce_430,
+ 4, 213, :_reduce_431,
+ 3, 214, :_reduce_432,
+ 0, 282, :_reduce_433,
+ 3, 282, :_reduce_434,
+ 1, 283, :_reduce_435,
+ 2, 283, :_reduce_436,
+ 3, 215, :_reduce_437,
+ 0, 285, :_reduce_438,
+ 3, 285, :_reduce_439,
+ 0, 279, :_reduce_440,
+ 2, 279, :_reduce_441,
+ 0, 280, :_reduce_442,
+ 2, 280, :_reduce_443,
+ 0, 281, :_reduce_444,
+ 2, 281, :_reduce_445,
+ 1, 284, :_reduce_446,
+ 2, 284, :_reduce_447,
+ 0, 287, :_reduce_448,
+ 4, 284, :_reduce_449,
+ 1, 286, :_reduce_450,
+ 1, 286, :_reduce_451,
+ 1, 286, :_reduce_452,
+ 1, 286, :_reduce_none,
+ 1, 192, :_reduce_454,
+ 3, 193, :_reduce_455,
+ 1, 276, :_reduce_456,
+ 1, 276, :_reduce_457,
+ 2, 276, :_reduce_458,
+ 2, 276, :_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, 185, :_reduce_469,
+ 1, 185, :_reduce_470,
+ 1, 185, :_reduce_471,
+ 1, 216, :_reduce_472,
+ 1, 157, :_reduce_473,
+ 1, 161, :_reduce_474,
+ 1, 161, :_reduce_475,
+ 1, 227, :_reduce_476,
+ 3, 227, :_reduce_477,
+ 2, 227, :_reduce_478,
+ 3, 230, :_reduce_479,
+ 2, 230, :_reduce_480,
+ 6, 265, :_reduce_481,
+ 8, 265, :_reduce_482,
+ 4, 265, :_reduce_483,
+ 6, 265, :_reduce_484,
+ 4, 265, :_reduce_485,
+ 6, 265, :_reduce_486,
+ 2, 265, :_reduce_487,
+ 4, 265, :_reduce_488,
+ 6, 265, :_reduce_489,
+ 2, 265, :_reduce_490,
+ 4, 265, :_reduce_491,
+ 2, 265, :_reduce_492,
+ 4, 265, :_reduce_493,
+ 1, 265, :_reduce_494,
+ 0, 265, :_reduce_495,
+ 1, 261, :_reduce_496,
+ 1, 261, :_reduce_497,
+ 1, 261, :_reduce_498,
+ 1, 261, :_reduce_499,
+ 1, 248, :_reduce_none,
+ 1, 248, :_reduce_501,
+ 3, 248, :_reduce_502,
+ 2, 248, :_reduce_503,
+ 1, 289, :_reduce_none,
+ 3, 289, :_reduce_505,
+ 1, 252, :_reduce_506,
+ 3, 252, :_reduce_507,
+ 3, 290, :_reduce_508,
+ 3, 291, :_reduce_509,
+ 1, 253, :_reduce_510,
+ 3, 253, :_reduce_511,
+ 1, 288, :_reduce_512,
+ 3, 288, :_reduce_513,
+ 1, 292, :_reduce_none,
+ 1, 292, :_reduce_none,
+ 2, 254, :_reduce_516,
+ 1, 254, :_reduce_517,
+ 1, 293, :_reduce_none,
+ 1, 293, :_reduce_none,
+ 2, 256, :_reduce_520,
+ 2, 255, :_reduce_521,
+ 0, 255, :_reduce_522,
+ 1, 231, :_reduce_none,
+ 3, 231, :_reduce_524,
+ 0, 217, :_reduce_525,
+ 2, 217, :_reduce_none,
+ 1, 200, :_reduce_527,
+ 3, 200, :_reduce_528,
+ 3, 294, :_reduce_529,
+ 2, 294, :_reduce_530,
+ 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, 270, :_reduce_none,
+ 1, 270, :_reduce_none,
+ 1, 270, :_reduce_none,
+ 1, 232, :_reduce_none,
+ 1, 232, :_reduce_none,
+ 0, 141, :_reduce_none,
+ 1, 141, :_reduce_none,
+ 0, 166, :_reduce_none,
+ 1, 166, :_reduce_none,
+ 2, 180, :_reduce_547,
+ 2, 160, :_reduce_548,
+ 0, 199, :_reduce_none,
+ 1, 199, :_reduce_none,
+ 1, 199, :_reduce_none,
+ 1, 228, :_reduce_552,
+ 1, 228, :_reduce_none,
+ 1, 143, :_reduce_none,
+ 2, 143, :_reduce_none,
+ 0, 197, :_reduce_556 ]
+
+racc_reduce_n = 557
+
+racc_shift_n = 972
+
+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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "singleton",
+ "dot_or_colon",
+ "@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_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",
+ "@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",
+ "qword_list",
+ "string_dvar",
+ "@27",
+ "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
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_53(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ 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_internal(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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_301(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_302(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_303(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_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.loop(:while, val[0], val[2], val[3],
+ val[5], val[6])
+
+ 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(:until, val[0], val[2], val[3],
+ val[5], val[6])
+
+ result
+end
+
+def _reduce_310(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_311(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_312(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_313(val, _values, result)
+ @lexer.cond.pop
+
+ result
+end
+
+def _reduce_314(val, _values, result)
+ result = @builder.for(val[0], val[1],
+ val[2], val[4],
+ val[5], val[7], val[8])
+
+ result
+end
+
+def _reduce_315(val, _values, result)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_316(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_317(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_318(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ result = @builder.def_singleton(val[0], val[1], val[2],
+ val[4], val[6], val[7], val[8])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_328(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_329(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 330 omitted
+
+def _reduce_331(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_332(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+# 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
+
+# reduce 344 omitted
+
+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.objc_restarg(val[2], val[3]))
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ result = val[0].
+ push(@builder.objc_restarg(val[2], val[3])).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_351(val, _values, result)
+ result = val[0].
+ push(@builder.objc_restarg(val[2]))
+
+ result
+end
+
+def _reduce_352(val, _values, result)
+ result = val[0].
+ push(@builder.objc_restarg(val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_353(val, _values, result)
+ result = [ @builder.objc_restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_354(val, _values, result)
+ result = [ @builder.objc_restarg(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_355(val, _values, result)
+ result = [ @builder.objc_restarg(val[0]) ]
+
+ result
+end
+
+def _reduce_356(val, _values, result)
+ result = [ @builder.objc_restarg(val[0]),
+ *val[2] ]
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ 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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_361(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 362 omitted
+
+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)
+ 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_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[1])
+
+ result
+end
+
+def _reduce_368(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_369(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_370(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_371(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_372(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_373(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_374(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_375(val, _values, result)
+ result = @builder.args(val[0], [], val[0])
+
+ result
+end
+
+def _reduce_376(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_377(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_378(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_379(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_380(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_381(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 382 omitted
+
+def _reduce_383(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_384(val, _values, result)
+ result = [ val[1], val[2] ]
+
+ @static_env.unextend
+
+ result
+end
+
+def _reduce_385(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = @builder.args(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_391(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_392(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_393(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_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)
+ lparen_t, args, rparen_t = val[1]
+ result = @builder.call_method(nil, nil, val[0],
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_397(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_398(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_399(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_400(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_401(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_402(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_403(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_404(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_405(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_406(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_407(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_408(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_409(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_410(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 411 omitted
+
+def _reduce_412(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_413(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_414(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 415 omitted
+
+# reduce 416 omitted
+
+def _reduce_417(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 418 omitted
+
+def _reduce_419(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 420 omitted
+
+# reduce 421 omitted
+
+# reduce 422 omitted
+
+# reduce 423 omitted
+
+def _reduce_424(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ 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.string_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_428(val, _values, result)
+ result = @builder.string(val[0])
+
+ result
+end
+
+def _reduce_429(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_430(val, _values, result)
+ result = @builder.xstring_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_431(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_432(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_433(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_434(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_435(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_437(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_438(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_439(val, _values, result)
+ result = val[0] << @builder.string_internal(val[1])
+
+ result
+end
+
+def _reduce_440(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_441(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_442(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_443(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ result = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_448(val, _values, result)
+ @lexer.cond.push(false)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_449(val, _values, result)
+ @lexer.cond.lexpop
+ @lexer.cmdarg.lexpop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_450(val, _values, result)
+ result = @builder.gvar(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.cvar(val[0])
+
+ result
+end
+
+# reduce 453 omitted
+
+def _reduce_454(val, _values, result)
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_455(val, _values, result)
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_457(val, _values, result)
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_458(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_459(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_460(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_461(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_462(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_463(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_464(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_467(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_469(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_470(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_471(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_472(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_473(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_474(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_475(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_476(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_477(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+def _reduce_478(val, _values, result)
+ yyerrok
+ result = nil
+
+ result
+end
+
+def _reduce_479(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_480(val, _values, result)
+ result = @builder.args(nil, val[0], nil)
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ 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].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ 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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_490(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_491(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_492(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_493(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_497(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_498(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_499(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 500 omitted
+
+def _reduce_501(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_502(val, _values, result)
+ @static_env.declare val[2][0]
+
+ result = @builder.objc_kwarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_503(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.objc_kwarg(val[0], nil, val[1])
+
+ result
+end
+
+# reduce 504 omitted
+
+def _reduce_505(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_507(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_509(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_510(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_511(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_512(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_513(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 514 omitted
+
+# reduce 515 omitted
+
+def _reduce_516(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_517(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 518 omitted
+
+# reduce 519 omitted
+
+def _reduce_520(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+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[1]
+
+ result
+end
+
+def _reduce_525(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 526 omitted
+
+def _reduce_527(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_528(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_529(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_530(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+# 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
+
+# reduce 544 omitted
+
+# reduce 545 omitted
+
+# reduce 546 omitted
+
+def _reduce_547(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_548(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 549 omitted
+
+# reduce 550 omitted
+
+# reduce 551 omitted
+
+def _reduce_552(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 553 omitted
+
+# reduce 554 omitted
+
+# reduce 555 omitted
+
+def _reduce_556(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class MacRuby
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/max_numparam_stack.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/max_numparam_stack.rb
new file mode 100644
index 000000000..9a741c72a
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/max_numparam_stack.rb
@@ -0,0 +1,56 @@
+# frozen_string_literal: true
+
+module Parser
+
+ # Holds p->max_numparam from parse.y
+ #
+ # @api private
+ class MaxNumparamStack
+ attr_reader :stack
+
+ ORDINARY_PARAMS = -1
+
+ def initialize
+ @stack = []
+ end
+
+ def empty?
+ @stack.size == 0
+ end
+
+ def has_ordinary_params!
+ set(ORDINARY_PARAMS)
+ end
+
+ def has_ordinary_params?
+ top == ORDINARY_PARAMS
+ end
+
+ def has_numparams?
+ top && top > 0
+ end
+
+ def register(numparam)
+ set( [top, numparam].max )
+ end
+
+ def top
+ @stack.last[:value]
+ end
+
+ def push(static:)
+ @stack.push(value: 0, static: static)
+ end
+
+ def pop
+ @stack.pop[:value]
+ end
+
+ private
+
+ def set(value)
+ @stack.last[:value] = value
+ end
+ end
+
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/messages.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/messages.rb
new file mode 100644
index 000000000..7d59d8a3b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/messages.rb
@@ -0,0 +1,118 @@
+# 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_regexp => "ambiguity between regexp and two divisions: wrap regexp in parentheses or add a space after `/' 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}',
+ :reserved_for_numparam => '%{name} is reserved for numbered parameter',
+ :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",
+ :undefined_lvar => "no such local variable: `%{name}'",
+ :duplicate_variable_name => 'duplicate variable name %{name}',
+ :duplicate_pattern_key => 'duplicate hash pattern key %{name}',
+ :endless_setter => 'setter method cannot be defined in an endless method definition',
+ :invalid_id_to_get => 'identifier %{identifier} is not valid to get',
+ :forward_arg_after_restarg => '... after rest argument',
+ :no_anonymous_blockarg => 'no anonymous block parameter',
+
+ # Parser warnings
+ :useless_else => 'else without rescue is useless',
+ :duplicate_hash_key => 'key is duplicated and overwritten',
+
+ # 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
+
+ # @api private
+ module Messages
+ # Formats the message, returns a raw template if there's nothing to interpolate
+ #
+ # Code like `format("", {})` gives a warning, and so this method tries interpolating
+ # only if `arguments` hash is not empty.
+ #
+ # @api private
+ def self.compile(reason, arguments)
+ template = MESSAGES[reason]
+ return template if Hash === arguments && arguments.empty?
+ format(template, arguments)
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/meta.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/meta.rb
new file mode 100644
index 000000000..b2c18b5bb
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/meta.rb
@@ -0,0 +1,39 @@
+# 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 =
+ %i(
+ 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 lambda indexasgn index procarg0
+ restarg_expr blockarg_expr
+ objc_kwarg objc_restarg objc_varargs
+ numargs numblock forward_args forwarded_args forward_arg
+ 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
+ empty_else find_pattern kwargs
+ match_pattern_p match_pattern
+ ).to_set.freeze
+
+ end # Meta
+end # Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/rewriter.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/rewriter.rb
new file mode 100644
index 000000000..f81ebb18a
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/rewriter.rb
@@ -0,0 +1,105 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby18.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby18.rb
new file mode 100644
index 000000000..7130db531
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby18.rb
@@ -0,0 +1,5708 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-277,197,198,197,198,491,-87,-277,-277,-277,513,544,580,-277,-277,-85',
+'-277,-61,74,581,533,560,491,491,523,-80,75,-427,-84,504,-428,736,608',
+'505,-427,-277,-277,-428,-277,-277,-277,-277,-277,491,491,570,692,-82',
+'-83,-81,-86,-429,693,537,-76,559,-69,-84,-429,197,198,293,-74,-277,-277',
+'-277,-277,-277,-277,-277,-277,-277,-277,-277,-277,-277,-277,-479,261',
+'-277,-277,-277,532,551,525,524,528,-277,538,101,-277,293,-82,623,100',
+'-277,540,-277,-84,-277,-277,-277,-277,-277,-277,-277,-482,-277,-79,-277',
+'-478,724,512,-482,-482,-482,101,-77,490,-482,-482,100,-482,-277,-277',
+'-74,-77,-72,-277,-85,-76,-482,101,101,101,490,490,100,100,100,623,-482',
+'-482,-74,-482,-482,-482,-482,-482,-74,-75,-73,-78,397,101,101,490,490',
+'623,100,100,260,261,497,-74,498,560,-74,-76,-482,-482,-482,-482,-482',
+'-482,-482,-482,-482,-482,-482,-482,-482,-482,261,580,-482,-482,-482',
+'-259,548,101,581,622,-482,-431,100,-482,465,523,-87,559,-482,523,-482',
+'542,-482,-482,-482,-482,-482,-482,-482,-226,-482,-482,-482,608,256,498',
+'-226,-226,-226,-479,256,-226,-226,-226,433,-226,-482,-482,-76,-75,293',
+'-482,-83,363,101,-226,622,-80,560,100,-86,256,260,523,-226,-226,-76',
+'-226,-226,-226,-226,-226,101,523,622,525,524,100,827,525,524,529,816',
+'260,217,675,715,-76,-479,523,-76,770,559,465,-423,-479,197,198,217,-482',
+'-479,-423,-419,-226,-479,-272,101,217,560,-419,-226,100,-272,-272,-272',
+'256,-226,-272,-272,-272,196,-272,-479,525,524,526,217,661,660,664,663',
+'-272,-272,525,524,521,-78,-81,-226,-86,-272,-272,559,-272,-272,-272',
+'-272,-272,-482,525,524,534,-226,828,-226,-482,101,-226,-424,829,-478',
+'100,101,-79,-482,-424,-87,100,-272,-272,-272,-272,-272,-272,-272,-272',
+'-272,-272,-272,-272,-272,-272,-482,-482,-272,-272,-272,-271,101,-272',
+'286,287,-272,100,-271,-272,-272,-431,-272,570,-272,570,-272,-271,-272',
+'-272,-272,-272,-272,-272,-272,-226,-272,-475,-272,682,-476,543,-226',
+'-226,-226,736,608,-226,-226,-226,-478,-226,-272,-272,-272,-272,-482',
+'-272,253,518,577,-226,293,-482,-72,254,519,-80,-478,-482,-226,-226,-482',
+'-226,-226,-226,-226,-226,101,463,464,816,-73,100,-74,-81,-419,-82,-278',
+'-423,-482,479,582,-419,478,-278,-423,236,-475,-478,217,-476,-419,-279',
+'-278,-423,-478,-426,360,-226,-279,-478,362,361,-426,-478,-226,831,-482',
+'-279,-475,256,-226,-476,194,-482,661,660,664,663,-478,195,214,-478,-482',
+'-319,216,215,212,213,193,592,-319,657,-226,655,654,653,656,-430,593',
+'-319,-482,-479,-479,-479,-430,-479,-226,-69,-226,-479,-479,-226,479',
+'-430,-479,481,-479,-479,-479,-479,-479,-479,-479,479,664,663,484,-479',
+'-479,-479,-479,-479,-479,-479,217,594,661,660,664,663,832,479,217,-479',
+'481,471,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,-425,-479',
+'-479,-479,-479,-479,834,-425,669,670,214,671,95,96,216,215,212,213,214',
+'197,198,882,216,215,837,-479,551,570,-479,-479,608,-479,-479,197,198',
+'-479,-277,-479,189,-479,293,-479,657,-277,655,654,653,656,-479,-479',
+'841,842,-277,351,-479,-479,-479,-479,-479,-479,618,498,626,-479,-479',
+'-478,-478,-478,217,-478,848,849,-85,-478,-478,674,677,850,-478,760,-478',
+'-478,-478,-478,-478,-478,-478,661,660,664,663,-478,-478,-478,-478,-478',
+'-478,-478,760,761,214,438,885,438,216,215,188,-478,293,695,-478,-478',
+'-478,-478,-478,-478,-478,-478,-478,-478,-277,-478,-478,-478,-478,-478',
+'459,-277,-271,760,706,-279,-479,460,468,-271,-277,433,-279,433,245,469',
+'458,709,-271,-478,694,-279,-478,-478,395,-478,-478,710,863,-478,-278',
+'-478,717,-478,887,-478,657,-278,655,654,653,656,719,-478,285,723,-278',
+'256,-478,-478,-478,-478,-478,-478,256,500,217,-478,-478,67,68,64,501',
+'51,217,726,-83,56,57,284,-259,499,60,647,58,59,61,23,24,65,66,661,660',
+'664,663,22,28,27,90,89,91,92,730,732,17,608,740,741,742,539,888,41,745',
+'570,94,93,84,50,86,85,88,87,95,96,747,82,83,38,39,37,217,221,226,227',
+'228,223,225,233,234,229,230,-430,210,211,509,751,231,232,-430,202,755',
+'507,206,757,760,52,53,-430,761,54,508,762,214,763,220,40,216,215,212',
+'213,224,222,218,18,219,765,236,-260,81,74,76,77,78,79,820,393,570,75',
+'80,473,101,235,394,-215,771,100,67,68,64,7,51,395,398,825,56,57,399',
+'779,780,60,826,58,59,61,23,24,65,66,570,824,97,570,22,28,27,90,89,91',
+'92,256,256,17,103,104,105,106,107,6,41,8,9,94,93,84,50,86,85,88,87,95',
+'96,-277,82,83,38,39,37,-278,-277,236,876,877,570,-479,-278,792,793,-277',
+'103,104,105,106,107,-278,794,878,36,799,801,30,192,428,52,53,430,191',
+'54,433,32,438,807,-60,40,657,396,655,654,653,656,453,18,454,455,190',
+'461,81,74,76,77,78,79,265,293,256,75,80,67,68,64,466,51,467,353,217',
+'56,57,809,473,474,60,647,58,59,61,248,249,65,66,661,660,664,663,247',
+'277,281,90,89,91,92,103,104,105,106,107,293,293,483,486,278,353,502',
+'94,93,84,50,86,85,88,87,95,96,503,82,83,,,282,217,221,226,227,228,223',
+'225,233,,229,230,,,,,,231,232,,774,,,206,,,52,53,,,54,,,214,,220,,216',
+'215,212,213,224,222,218,,219,,,,81,74,76,77,78,79,,,,75,80,,67,68,64',
+'857,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89',
+'91,92,,,,,,,,539,,278,,,94,93,84,50,86,85,88,87,95,96,,82,83,,,282,217',
+'221,226,227,228,223,225,233,234,229,230,,210,211,,,231,232,,774,,,206',
+',,52,53,,,54,,,214,,220,,216,215,212,213,224,222,218,,219,,,,81,74,76',
+'77,78,79,,,,75,80,,,235,,777,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61',
+'23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50',
+'86,85,88,87,95,96,,82,83,38,39,37,217,-499,-499,-499,-499,223,225,,',
+'-499,-499,,,,,,231,232,,36,,,267,,,52,53,,,54,,32,214,,220,40,216,215',
+'212,213,224,222,218,18,219,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64',
+'7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,',
+',17,,,,,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,217',
+'-499,-499,-499,-499,223,225,,,-499,-499,,,,,,231,232,,36,,,30,,,52,53',
+',,54,,32,214,,220,40,216,215,212,213,224,222,218,18,219,,,,81,74,76',
+'77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65',
+'66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50,86,85,88',
+'87,95,96,,82,83,38,39,37,217,-499,-499,-499,-499,223,225,,,-499,-499',
+',,,,,231,232,,36,,,30,,,52,53,,,54,,32,214,,220,40,216,215,212,213,224',
+'222,218,18,219,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57',
+',,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41',
+'8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,217,221,226,227,228',
+'223,225,233,234,229,230,,-499,-499,,,231,232,,36,,,30,,,52,53,,,54,',
+'32,214,,220,40,216,215,212,213,224,222,218,18,219,,,,81,74,76,77,78',
+'79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,',
+',22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,217,-499,-499,-499,-499,223,225,,,-499,-499,,,,,',
+'231,232,,36,,,30,,,52,53,,,54,,32,214,,220,40,216,215,212,213,224,222',
+'218,18,219,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,',
+',60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8',
+'9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,217,,,,,,,,,,,,,,,,231',
+'232,,36,,,30,,,52,53,,,54,,32,214,,220,40,216,215,212,213,,,218,18,219',
+',,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59',
+'61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84',
+'50,86,85,88,87,95,96,,82,83,38,39,37,217,-499,-499,-499,-499,223,225',
+',,-499,-499,,,,,,231,232,,36,,,30,,,52,53,,,54,,32,214,,220,40,216,215',
+'212,213,224,222,218,18,219,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64',
+'7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,',
+',17,,,,,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,217',
+'221,226,227,228,223,225,233,234,229,230,,-499,-499,,,231,232,,36,,,30',
+',,52,53,,,54,,32,214,,220,40,216,215,212,213,224,222,218,18,219,,,,81',
+'74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61,23',
+'24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50,86',
+'85,88,87,95,96,,82,83,38,39,37,217,,,,,,,,,,,,,,,,231,232,,36,,,30,',
+',52,53,,,54,,32,214,,220,40,216,215,212,213,,,218,18,219,,,,81,74,76',
+'77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65',
+'66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50,86,85,88',
+'87,95,96,,82,83,38,39,37,217,221,226,227,228,223,225,,,229,230,,,,,',
+'231,232,,36,,,30,,,52,53,,,54,,32,214,,220,40,216,215,212,213,224,222',
+'218,18,219,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,',
+',60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8',
+'9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,217,,,,,,,,,,,,,,,,231',
+'232,,36,,,30,,,52,53,,,54,,32,214,,220,40,216,215,212,213,,,218,18,219',
+',,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59',
+'61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84',
+'50,86,85,88,87,95,96,,82,83,38,39,37,217,-499,-499,-499,-499,223,225',
+',,-499,-499,,,,,,231,232,,36,,,30,,,52,53,,,54,,32,214,,220,40,216,215',
+'212,213,224,222,218,18,219,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64',
+'7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,',
+',17,,,,,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,217',
+',,,,,,,,,,,,,,,231,232,,36,,,30,,,52,53,,,54,,32,214,,220,40,216,215',
+'212,213,,,218,18,219,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,',
+',,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,',
+',,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,217,,,,,,',
+',,,,,,,,,231,232,,36,,,267,,,52,53,,,54,,32,214,,220,40,216,215,212',
+'213,,,,18,,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,',
+',60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8',
+'9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,217,,,,,,,,,,,,,,,,231',
+'232,,36,,,267,,,52,53,,,54,,32,214,,220,40,216,215,212,213,,,,18,,,',
+',81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61',
+'23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50',
+'86,85,88,87,95,96,,82,83,38,39,37,217,,,,,,,,,,,,,,,,231,232,,36,,,30',
+',,52,53,,,54,,32,214,,,40,216,215,212,213,,,,18,,,,,81,74,76,77,78,79',
+',,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22',
+'28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,',
+'82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,',
+',,,,18,,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60',
+',58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94',
+'93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30',
+',,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,5,67',
+'68,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91',
+'92,,,17,,,,,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37',
+',,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,74',
+'76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61,23,24',
+'65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50,86,85',
+'88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54',
+',32,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,',
+',,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,',
+',,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,',
+',,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,74,76,77,78',
+'79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,',
+',22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40',
+',,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,',
+',60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8',
+'9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36',
+',,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80',
+'5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90',
+'89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38',
+'39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,',
+',,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61',
+'23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50',
+'86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53',
+',,54,,32,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7',
+'51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17',
+',,,,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,',
+',,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,74,76,77',
+'78,79,,,,75,80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66',
+',,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50,86,85,88,87',
+'95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,',
+',40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,5,67,68,64,7,51,,,,56,57',
+',,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41',
+'8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,',
+',36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75',
+'80,5,67,68,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27',
+'90,89,91,92,,,17,,,,,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,,82,83',
+'38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18',
+',,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61',
+'248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50',
+'86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52',
+'53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,7',
+'51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17',
+',,,,,6,41,8,9,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,',
+',,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,74,76,77',
+'78,79,,,,75,80,155,166,156,179,152,172,162,161,182,183,177,160,159,154',
+'180,184,185,164,153,167,171,173,165,158,,,174,181,176,175,168,178,163',
+'151,170,169,,,,,,150,157,148,149,146,147,111,113,110,,112,,,,,,,141',
+'142,,139,123,124,125,,128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,',
+',136,135,,122,140,138,137,133,134,129,127,120,,121,,,145,81,,,,,,,,',
+',80,155,166,156,179,152,172,162,161,182,183,177,160,159,154,180,184',
+'185,164,153,167,171,173,165,158,,,174,181,176,175,168,178,163,151,170',
+'169,,,,,,150,157,148,149,146,147,111,113,,,112,,,,,,,141,142,,139,123',
+'124,125,,128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122',
+'140,138,137,133,134,129,127,120,,121,,,145,81,,,67,68,64,,51,,,80,56',
+'57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41',
+',,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202',
+',,206,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80',
+'67,68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89',
+'91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,',
+',,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74',
+'76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65',
+'66,,,,,247,28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,243,,245',
+',40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57',
+',,,60,,58,59,61,248,249,65,66,,,,,247,28,27,90,89,91,92,,,,,,,,,,41',
+',,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202',
+',,206,,,52,53,,,54,,243,,245,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,',
+',75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,28',
+'27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38',
+'39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,243,,245,,40,,,,,,',
+',209,,,,,81,74,76,77,78,79,,,,75,80,-249,-249,-249,,-249,,,,-249,-249',
+',,,-249,,-249,-249,-249,-249,-249,-249,-249,,,,,-249,-249,-249,-249',
+'-249,-249,-249,,,,,,,,,,-249,,,-249,-249,-249,-249,-249,-249,-249,-249',
+'-249,-249,,-249,-249,-249,-249,-249,,,,,,,,,,,,,,,,,,,,-249,,,-249,256',
+',-249,-249,,,-249,,-249,,-249,,-249,,,,,,,,-249,,,,,-249,-249,-249,-249',
+'-249,-249,,,,-249,-249,-249,-249,-249,,-249,,,,-249,-249,,,,-249,,-249',
+'-249,-249,-249,-249,-249,-249,,,,,-249,-249,-249,-249,-249,-249,-249',
+',,,,,,,,,-249,,,-249,-249,-249,-249,-249,-249,-249,-249,-249,-249,,-249',
+'-249,-249,-249,-249,,,,,,,,,,,,,,,,,,,,-249,,,-249,265,,-249,-249,,',
+'-249,,-249,,-249,,-249,,,,,,,,-249,,,,,-249,-249,-249,-249,-249,-249',
+',,,-249,-249,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,',
+',247,277,281,90,89,91,92,,,,,,,,,,278,,,94,93,84,50,86,85,88,87,95,96',
+',82,83,,,282,,217,221,226,227,228,223,225,233,234,229,230,,210,211,',
+',231,232,275,,,272,,,52,53,,,54,,271,,214,,220,,216,215,212,213,224',
+'222,218,,219,,,81,74,76,77,78,79,,,,75,80,67,68,64,235,51,570,,,56,57',
+',,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,278',
+',,94,93,84,50,86,85,88,87,95,96,,82,83,,,282,,217,221,226,227,228,223',
+'225,233,234,229,230,,210,211,,,231,232,275,,,206,,,52,53,,,54,,,,214',
+',220,,216,215,212,213,224,222,218,,219,,,81,74,76,77,78,79,,,,75,80',
+'67,68,64,235,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281',
+'90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39',
+'37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,',
+'81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248',
+'249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85',
+'88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54',
+',,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56',
+'57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,',
+',,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,',
+',,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79',
+',,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28',
+'27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83',
+'38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,18',
+',,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61',
+'248,249,65,66,,,,,247,28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86',
+'85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53',
+',,54,,301,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,',
+'51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92',
+',,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,',
+',,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77',
+'78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,',
+',22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96',
+',82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,',
+',,,,,18,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,',
+'58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93',
+'84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206',
+',,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,67,68',
+'64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89',
+'91,92,,,,,,,,,,278,,,94,93,84,50,86,85,88,87,95,96,,82,83,,,282,,217',
+'221,226,227,228,223,225,233,234,229,230,,210,211,,,231,232,317,,,30',
+',,52,53,,,54,,32,,214,,220,,216,215,212,213,224,222,218,,219,,,81,74',
+'76,77,78,79,,,,75,80,67,68,64,235,51,,,,56,57,,,,60,,58,59,61,248,249',
+'65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,278,,,94,93,322,50,86,85',
+'323,87,95,96,,82,83,,,282,,217,221,226,227,228,223,225,233,234,229,230',
+',210,211,,329,231,232,324,,,206,,,52,53,,,54,,,,214,,220,,216,215,212',
+'213,224,222,218,,219,,,81,74,76,77,78,79,,,,75,80,67,68,64,235,51,,',
+',56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,',
+',,,,,,278,,,94,93,322,50,86,85,323,87,95,96,,82,83,,,282,,217,221,226',
+'227,228,223,225,233,234,229,230,,210,211,,,231,232,324,,,206,,,52,53',
+',,54,,,,214,,220,,216,215,212,213,224,222,218,,219,,,81,74,76,77,78',
+'79,,,,75,80,-475,-475,-475,235,-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,-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,-476',
+'-476,,,,-476,-476,67,68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66',
+',,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40',
+',,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93',
+'84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206',
+',,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,67,68',
+'64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92',
+',,17,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,',
+',,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77',
+'78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,',
+',22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96',
+',82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,',
+',,,,,18,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,7,51,,,,56,57,,,,60',
+',58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94',
+'93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30',
+',,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,67,68',
+'64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92',
+',,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,',
+',,,,,,,,,,,202,,,206,,,52,53,,,54,,371,,,,40,,,,,,,,209,,,,,81,74,76',
+'77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66',
+',,,,22,28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96',
+',82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,371,,,,40',
+',,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84',
+'50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,',
+'52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64',
+',51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,28,27,90,89,91,92',
+',,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,',
+',,,,,,,,,,,202,,,206,,,52,53,,,54,,301,,,,40,,,,,,,,209,,,,,81,74,76',
+'77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66',
+',,,,22,28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96',
+',82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,',
+',,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93',
+'84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206',
+',,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,67,68',
+'64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92',
+',,17,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,',
+',,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77',
+'78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,',
+',,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40',
+',,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94',
+'93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,',
+'206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67',
+'68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90',
+'89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37',
+',,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81',
+'74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249',
+'65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88',
+'87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,',
+',,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56',
+'57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,',
+',,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,',
+',,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79',
+',,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247',
+'277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82',
+'83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,',
+',209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58',
+'59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93',
+'84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206',
+',,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68',
+'64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89',
+'91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,',
+',,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74',
+'76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65',
+'66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87',
+'95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,',
+',40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57',
+',,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41',
+',,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202',
+',,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80',
+'67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281',
+'90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39',
+'37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,',
+'81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248',
+'249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85',
+'88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54',
+',,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56',
+'57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,',
+',,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,',
+',,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79',
+',,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247',
+'277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82',
+'83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,',
+',209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58',
+'59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93',
+'84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206',
+',,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68',
+'64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89',
+'91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,',
+',,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74',
+'76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65',
+'66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87',
+'95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,',
+',40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57',
+',,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41',
+',,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202',
+',,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80',
+'67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281',
+'90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39',
+'37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,',
+'81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248',
+'249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85',
+'88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54',
+',,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56',
+'57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,',
+',,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,',
+',,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79',
+',,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247',
+'277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82',
+'83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,',
+',209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58',
+'59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93',
+'84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206',
+',,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68',
+'64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89',
+'91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,',
+',,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74',
+'76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65',
+'66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87',
+'95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,',
+',40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57',
+',,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41',
+',,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202',
+',,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80',
+'67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281',
+'90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39',
+'37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,',
+'81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248',
+'249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85',
+'88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54',
+',,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56',
+'57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,',
+',,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,',
+',,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79',
+',,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247',
+'28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83',
+'38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,243,,245,,40,,,',
+',,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,',
+'58,59,61,248,249,65,66,,,,,247,28,27,90,89,91,92,,,,,,,,,,41,,,94,93',
+'84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206',
+',,447,53,,,54,,243,,245,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80',
+'67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,28,27,90',
+'89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37',
+',,,,,,,,,,,,,,,,,,,202,,,206,,451,52,53,,,54,,243,,245,,40,,,,,,,,209',
+',,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61',
+'248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,278,,,94,93,84,50',
+'86,85,88,87,95,96,,82,83,,,282,,217,221,226,227,228,223,225,233,234',
+'229,230,,210,211,,,231,232,275,,,206,,,52,53,,,54,,,,214,,220,,216,215',
+'212,213,224,222,218,,219,,,81,74,76,77,78,79,,,,75,80,67,68,64,235,51',
+',,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,',
+',,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,',
+',,,,,,,,,,202,,,206,471,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76',
+'77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66',
+',,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40',
+',,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93',
+'84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206',
+',,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,67,68',
+'64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92',
+',,17,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,',
+',,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77',
+'78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,',
+',22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96',
+',82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,',
+',,,,,18,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,',
+'58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93',
+'84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206',
+',,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,155,166',
+'156,179,152,172,162,161,182,183,177,160,159,154,180,184,185,164,153',
+'167,171,173,165,158,,,174,181,176,175,168,178,163,151,170,169,,,,,,150',
+'157,148,149,146,147,111,113,,,112,,,,,,,141,142,,139,123,124,125,,128',
+'130,,,126,,,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122,140,138,137',
+'133,134,129,127,120,,121,,,145,81,,,-249,-249,-249,,-249,,,80,-249,-249',
+',,,-249,,-249,-249,-249,-249,-249,-249,-249,,,,,-249,-249,-249,-249',
+'-249,-249,-249,,,,,,,,,,-249,,,-249,-249,-249,-249,-249,-249,-249,-249',
+'-249,-249,,-249,-249,-249,-249,-249,,,,,,,,,,,,,,,,,,,,-249,,,-249,256',
+',-249,-249,,,-249,,-249,,-249,,-249,,,,,,,,-249,,,,,-249,-249,-249,-249',
+'-249,-249,,,,-249,-249,-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',
+',,,-480,-480,-481,-481,-481,,-481,,,,-481,-481,,,,-481,,-481,-481,-481',
+'-481,-481,-481,-481,,,,,-481,-481,-481,-481,-481,-481,-481,,,,,,,,,',
+'-481,,,-481,-481,-481,-481,-481,-481,-481,-481,-481,-481,,-481,-481',
+'-481,-481,-481,,,,,,,,,,,,,,,,,,,,-481,,,-481,-481,,-481,-481,,,-481',
+',-481,,-481,,-481,,,,,,,,-481,,,,,-481,-481,-481,-481,-481,-481,,,,-481',
+'-481,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,28',
+'27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38',
+'39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,301,,,,40,,,,,,,,209',
+',,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61',
+'248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50',
+'86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52',
+'53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,',
+'51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92',
+',,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,',
+',,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77',
+'78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,',
+',,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40',
+',,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94',
+'93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,',
+'206,,,52,53,,,54,,562,,245,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75',
+'80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281',
+'90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39',
+'37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,566,,245,,40,,,,,,,,209',
+',,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61',
+'248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50',
+'86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52',
+'53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,',
+'51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17',
+',,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,',
+',,,,,,,,202,,,206,,,52,53,,,54,,586,,245,,40,,,,,,,,18,,,,,81,74,76',
+'77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66',
+',,,,247,28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96',
+',82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,301,,,,40',
+',,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94',
+'93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,',
+'206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67',
+'68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90',
+'89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37',
+',,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81',
+'74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249',
+'65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88',
+'87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,',
+',,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56',
+'57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41',
+',,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202',
+',,206,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80',
+'67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281',
+'90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39',
+'37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,371,,,,40,,,,,,,,209,',
+',,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61',
+'248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50',
+'86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52',
+'53,,,54,,614,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64',
+',51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91',
+'92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,',
+',,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76',
+'77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66',
+',,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40',
+',,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94',
+'93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,',
+'206,,,52,53,,,54,,630,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80',
+'67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,28,27,90',
+'89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37',
+',,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,301,,,,40,,,,,,,,209,,,,',
+'81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248',
+'249,65,66,,,,,247,28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85',
+'88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54',
+',301,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,',
+',56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,',
+',,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,',
+',,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79',
+',,,75,80,155,166,156,179,152,172,162,161,182,183,177,160,159,154,180',
+'184,185,164,153,167,171,173,165,158,,,174,181,176,175,168,178,163,151',
+'170,169,,,,,,150,157,148,149,146,147,111,113,,,112,,,,,,,141,142,,139',
+'123,124,125,,128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,,,136,135',
+',122,140,138,137,133,134,129,127,120,,121,,,145,81,,,67,68,64,,51,,',
+'80,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,',
+',,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,',
+',,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77',
+'78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,',
+',,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,681,,',
+',40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57',
+',,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,,,,,,,,41,,,94',
+'93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,',
+'206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67',
+'68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91',
+'92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,',
+',,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76',
+'77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66',
+',,,,22,28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96',
+',82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,',
+',,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94',
+'93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,',
+'206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67',
+'68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90',
+'89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37',
+',,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81',
+'74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249',
+'65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,278,,,94,93,84,50,86,85,88',
+'87,95,96,,82,83,,,282,,,,,,,,,,,,,,,,,,,,275,,,272,,,52,53,,,54,,699',
+',700,,,,,,,,,701,,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56',
+'57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,',
+',,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,',
+',,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79',
+',,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247',
+'277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82',
+'83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,',
+',209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58',
+'59,61,248,249,65,66,,,,,247,28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84',
+'50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,',
+'52,53,,,54,,562,,245,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67',
+'68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90',
+'89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37',
+',,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81',
+'74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249',
+'65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88',
+'87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,',
+',,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56',
+'57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,',
+',,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,',
+',,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79',
+',,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28',
+'27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83',
+'38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,18',
+',,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61',
+'248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50',
+'86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52',
+'53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,',
+'51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,90,89,91,92,,,',
+',,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,',
+',,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78',
+'79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,',
+'247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96',
+',82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,',
+',,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94',
+'93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,',
+'206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67',
+'68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90',
+'89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37',
+',,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81',
+'74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249',
+'65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,278,,,94,93,84,50,86,85,88',
+'87,95,96,,82,83,,,282,,217,221,226,227,228,223,225,233,234,229,230,',
+'210,211,,,231,232,774,,,206,,,52,53,,,54,,,,214,,220,,216,215,212,213',
+'224,222,218,,219,,,81,74,76,77,78,79,,,,75,80,67,68,64,235,51,,,,56',
+'57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,',
+',,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,',
+',,,,202,,,206,,,52,53,,,54,,782,,245,,40,,,,,,,,209,,,,,81,74,76,77',
+'78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,',
+',,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,788,,245',
+',40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57',
+',,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41',
+',,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202',
+',,206,,,52,53,,,54,,790,,245,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,',
+',75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277',
+'281,90,89,91,92,,,,,,,,,,278,,,94,93,84,50,86,85,88,87,95,96,,82,83',
+',,282,,217,221,226,227,228,223,225,233,234,229,230,,210,211,,,231,232',
+'774,,,206,,,52,53,,,54,,,,214,,220,,216,215,212,213,224,222,218,,219',
+',,81,74,76,77,78,79,,,,75,80,67,68,64,235,51,,,,56,57,,,,60,,58,59,61',
+'23,24,65,66,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,84,50,86',
+'85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53',
+',,54,,,,,,40,,,,,,,,18,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,',
+',,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,',
+',,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,',
+',,,,,,,,,202,,,206,,,52,53,,,54,,804,,,,40,,,,,,,,209,,,,,81,74,76,77',
+'78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,',
+',,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40',
+',,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60',
+',58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94',
+'93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,',
+'206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67',
+'68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90',
+'89,91,92,,,,,,,,,,278,,,94,93,84,50,86,85,88,87,95,96,,82,83,,,282,',
+',,,,,,,,,,,,,,,,,,275,,,272,,,52,53,,,54,,823,,822,,,,,,,,,,,,,,,81',
+'74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249',
+'65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88',
+'87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,',
+',,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56',
+'57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,',
+',,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,',
+',,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79',
+',,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247',
+'277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82',
+'83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40,,,,,,',
+',209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58',
+'59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93',
+'84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206',
+',,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68',
+'64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89',
+'91,92,,,,,,,,,,278,,,94,93,84,50,86,85,88,87,95,96,,82,83,,,282,,217',
+'221,226,227,228,223,225,233,234,229,230,,210,211,,,231,232,774,,,206',
+',,52,53,,,54,,,,214,,220,,216,215,212,213,224,222,218,,219,,,81,74,76',
+'77,78,79,,,,75,80,67,68,64,235,51,,,,56,57,,,,60,,58,59,61,248,249,65',
+'66,,,,,247,28,27,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,301,,',
+',40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57',
+',,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,278',
+',,94,93,84,50,86,85,88,87,95,96,,82,83,,,282,,217,221,226,227,228,223',
+'225,233,234,229,230,,210,211,,,231,232,774,,,206,,,52,53,,,54,,,,214',
+',220,,216,215,212,213,224,222,218,,219,,,81,74,76,77,78,79,,,,75,80',
+'67,68,64,235,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281',
+'90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95,96,,82,83,38,39',
+'37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,866,,245,,40,,,,,,,,209',
+',,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57,,,,60,,58,59,61',
+'248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50',
+'86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52',
+'53,,,54,,869,,245,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68',
+'64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89',
+'91,92,,,,,,,,,,278,,,94,93,84,50,86,85,88,87,95,96,,82,83,,,282,,217',
+'221,226,227,228,223,225,233,234,229,230,,210,211,,,231,232,774,,,206',
+',,52,53,,,54,,,,214,,220,,216,215,212,213,224,222,218,,219,,,81,74,76',
+'77,78,79,,,,75,80,67,68,64,235,51,,,,56,57,,,,60,,58,59,61,248,249,65',
+'66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87',
+'95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,',
+',40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51,,,,56,57',
+',,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41',
+',,94,93,84,50,86,85,88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202',
+',,206,,,52,53,,,54,,,,,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80',
+'67,68,64,,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281',
+'90,89,91,92,,,,,,,,,,278,,,94,93,84,50,86,85,88,87,95,96,,82,83,,,282',
+',217,221,226,227,228,223,225,233,234,229,230,,210,211,,,231,232,774',
+',,206,,,52,53,,,54,,,,214,,220,,216,215,212,213,224,222,218,,219,,,81',
+'74,76,77,78,79,,,,75,80,67,68,64,235,51,,,,56,57,,,,60,,58,59,61,248',
+'249,65,66,,,,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85',
+'88,87,95,96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54',
+',891,,245,,40,,,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,67,68,64,,51',
+',,,56,57,,,,60,,58,59,61,248,249,65,66,,,,,247,277,281,90,89,91,92,',
+',,,,,,,,278,,,94,93,84,50,86,85,88,87,95,96,,82,83,,,282,,217,221,226',
+'227,228,223,225,233,234,229,230,,210,211,,,231,232,774,,,206,,,52,53',
+',,54,,,,214,,220,,216,215,212,213,224,222,218,,219,,,81,74,76,77,78',
+'79,,,,75,80,67,68,64,235,51,,,,56,57,,,,60,,58,59,61,248,249,65,66,',
+',,,247,277,281,90,89,91,92,,,,,,,,,,41,,,94,93,84,50,86,85,88,87,95',
+'96,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,202,,,206,,,52,53,,,54,,,,,,40',
+',,,,,,,209,,,,,81,74,76,77,78,79,,,,75,80,155,166,156,179,152,172,162',
+'161,182,183,177,160,159,154,180,184,185,164,153,167,171,173,165,158',
+',,174,181,176,338,337,339,336,151,170,169,,,,,,150,157,148,149,334,335',
+'332,113,86,85,333,87,,,,,,141,142,,139,123,124,125,,128,130,,,126,,',
+',,143,144,131,132,,,,,,343,,,,,,,,136,135,,122,140,138,137,133,134,129',
+'127,120,,121,,,145,155,166,156,179,152,172,162,161,182,183,177,160,159',
+'154,180,184,185,164,153,167,171,173,165,158,,,174,181,176,175,168,178',
+'163,151,170,169,,,,,,150,157,148,149,146,147,111,113,,,112,,,,,,,141',
+'142,,139,123,124,125,,128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,',
+',136,135,,122,140,138,137,133,134,129,127,120,,121,,,145,217,221,226',
+'227,228,223,225,233,234,229,230,,210,211,,,231,232,,,,-215,,,,,,,,,',
+',214,,220,,216,215,212,213,224,222,218,,219,,,,,,,,,,,,,,,,,235,,-215',
+'217,221,226,227,228,223,225,233,234,229,230,,210,211,,,231,232,,,,,',
+',,,,,,,,,214,,220,,216,215,212,213,224,222,218,,219,,,,,,,,552,381,',
+',553,,,,,235,558,141,142,,139,123,124,125,,128,130,,,126,,,,,143,144',
+'131,132,,,,,,,,,,,,,,136,135,,122,140,138,137,133,134,129,127,120,,121',
+'634,387,145,,635,,,,,,,141,142,,139,123,124,125,,128,130,,,126,,,,,143',
+'144,131,132,,,,,,,,,,,,,,136,135,,122,140,138,137,133,134,129,127,120',
+',121,637,387,145,,638,,,,,,,141,142,,139,123,124,125,,128,130,,,126',
+',,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122,140,138,137,133,134,129',
+'127,120,,121,435,381,145,,436,,,,,,,141,142,,139,123,124,125,,128,130',
+',,126,,,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122,140,138,137,133',
+'134,129,127,120,,121,552,381,145,,553,,,,,,,141,142,,139,123,124,125',
+',128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122,140,138',
+'137,133,134,129,127,120,,121,554,387,145,,555,,,,,,,141,142,,139,123',
+'124,125,,128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122',
+'140,138,137,133,134,129,127,120,,121,,,145,217,221,226,227,228,223,225',
+'233,234,229,230,,210,211,,,231,232,,,,,,,,,,,,,,,214,,220,,216,215,212',
+'213,224,222,218,,219,,,,,,,435,381,,,436,,,,,293,235,141,142,,139,123',
+'124,125,,128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122',
+'140,138,137,133,134,129,127,120,,121,435,381,145,,436,,,,,,,141,142',
+',139,123,124,125,,128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,,,136',
+'135,,122,140,138,137,133,134,129,127,120,,121,378,381,145,,379,,,,,',
+',141,142,,139,123,124,125,,128,130,,,126,,,,,143,144,131,132,,,,,,,',
+',,,,,,136,135,,122,140,138,137,133,134,129,127,120,,121,859,381,145',
+',860,,,,,,,141,142,,139,123,124,125,,128,130,,,126,,,,,143,144,131,132',
+',,,,,,,,,,,,,136,135,,122,140,138,137,133,134,129,127,120,,121,599,387',
+'145,,600,,,,,,,141,142,,139,123,124,125,,128,130,,,126,,,,,143,144,131',
+'132,,,,,,,,,,,,,,136,135,,122,140,138,137,133,134,129,127,120,,121,861',
+'387,145,,862,,,,,,,141,142,,139,123,124,125,,128,130,,,126,,,,,143,144',
+'131,132,,,,,,,,,,,,,,136,135,,122,140,138,137,133,134,129,127,120,,121',
+'596,381,145,,597,,,,,,,141,142,,139,123,124,125,,128,130,,,126,,,,,143',
+'144,131,132,,,,,,,,,,,,,,136,135,,122,140,138,137,133,134,129,127,120',
+',121,632,381,145,,633,,,,,,,141,142,,139,123,124,125,,128,130,,,126',
+',,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122,140,138,137,133,134,129',
+'127,120,,121,554,387,145,,555,,,,,,,141,142,,139,123,124,125,,128,130',
+',,126,,,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122,140,138,137,133',
+'134,129,127,120,,121,435,381,145,,436,,,,,,,141,142,,139,123,124,125',
+',128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122,140,138',
+'137,133,134,129,127,120,,121,383,387,145,,385,,,,,,,141,142,,139,123',
+'124,125,,128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,,,136,135,,122',
+'140,138,137,133,134,129,127,120,,121,435,381,145,,436,,,,,,,141,142',
+',139,123,124,125,,128,130,,,126,,,,,143,144,131,132,,,,,,,,,,,,,,136',
+'135,,122,140,138,137,133,134,129,127,120,,121,,,145,217,221,226,227',
+'228,223,225,233,234,229,230,,210,211,,,231,232,,,,,,,,,,,,,,,214,,220',
+',216,215,212,213,224,222,218,,219,,217,221,226,227,228,223,225,233,234',
+'229,230,,210,211,293,235,231,232,,,,,,,,,,,,,,,214,,220,,216,215,212',
+'213,224,222,218,,219,,,,,,,,,,,,,,,,,235' ]
+ 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 = [
+'385,514,514,520,520,308,318,385,385,385,328,379,442,385,385,635,385',
+'593,72,442,349,576,309,629,347,315,72,336,633,324,335,617,617,324,336',
+'385,385,335,385,385,385,385,385,800,729,883,552,632,634,745,502,334',
+'553,364,379,576,593,379,334,605,605,442,596,385,385,385,385,385,385',
+'385,385,385,385,385,385,385,385,635,55,385,385,385,349,385,347,347,347',
+'385,365,514,385,520,552,493,514,385,370,385,553,385,385,385,385,385',
+'385,385,383,385,318,385,634,605,328,383,383,383,308,635,308,383,383',
+'308,383,385,385,596,385,315,385,385,633,383,328,309,629,309,629,328',
+'309,629,494,383,383,596,383,383,383,383,383,632,634,745,502,203,800',
+'729,800,729,746,800,729,55,279,313,596,313,448,596,597,383,383,383,383',
+'383,383,383,383,383,383,383,383,383,383,26,713,383,383,383,373,383,493',
+'713,493,383,201,493,383,396,530,203,448,383,348,383,377,383,383,383',
+'383,383,383,383,434,383,383,383,805,384,805,434,434,434,860,279,434',
+'434,434,584,434,383,383,597,383,713,383,383,186,494,434,494,201,449',
+'494,396,26,279,346,434,434,597,434,434,434,434,434,746,345,746,530,530',
+'746,774,348,348,348,757,26,404,530,584,597,860,350,597,695,449,285,333',
+'860,15,15,405,637,860,333,332,434,860,50,3,406,426,332,434,3,50,50,50',
+'434,434,50,50,50,14,50,860,346,346,346,407,757,757,757,757,50,50,345',
+'345,345,285,695,434,285,50,50,426,50,50,50,50,50,637,350,350,350,434',
+'776,434,637,312,434,337,777,637,312,648,14,637,337,14,648,50,50,50,50',
+'50,50,50,50,50,50,50,50,50,50,637,599,50,50,50,775,642,50,37,37,50,642',
+'775,50,50,35,50,431,50,880,50,775,50,50,50,50,50,50,50,437,50,322,50',
+'542,323,378,437,437,437,872,872,437,437,437,859,437,50,50,50,50,599',
+'50,25,341,440,437,441,599,35,25,341,35,599,861,437,437,599,437,437,437',
+'437,437,513,282,282,850,542,513,378,542,322,378,505,323,599,299,443',
+'322,299,505,323,444,322,859,421,323,322,723,505,323,859,339,110,437',
+'723,859,110,110,339,859,437,784,861,723,322,437,437,323,13,861,850,850',
+'850,850,861,13,421,859,861,42,421,421,421,421,13,450,42,755,437,755',
+'755,755,755,273,452,42,861,555,555,555,273,555,437,453,437,555,555,437',
+'305,273,555,305,555,555,555,555,555,555,555,303,760,760,303,555,555',
+'555,555,555,555,555,422,457,755,755,755,755,785,300,403,555,300,462',
+'555,555,555,555,555,555,555,555,555,555,338,555,555,555,555,555,786',
+'338,524,524,422,524,524,524,422,422,422,422,403,296,296,867,403,403',
+'789,555,555,894,555,555,472,555,555,307,307,555,638,555,9,555,475,555',
+'647,638,647,647,647,647,638,555,802,803,638,97,555,555,555,555,555,555',
+'489,495,496,555,555,554,554,554,402,554,808,810,555,554,554,528,533',
+'811,554,812,554,554,554,554,554,554,554,647,647,647,647,554,554,554',
+'554,554,554,554,815,816,402,545,873,549,402,402,8,554,41,556,554,554',
+'554,554,554,554,554,554,554,554,862,554,554,554,554,554,274,862,276',
+'874,563,878,862,274,288,276,862,565,878,568,570,288,274,578,276,554',
+'554,878,554,554,288,554,554,579,828,554,827,554,585,554,875,554,819',
+'827,819,819,819,819,588,554,36,595,827,598,554,554,554,554,554,554,601',
+'316,603,554,554,60,60,60,316,60,604,606,554,60,60,34,609,316,60,819',
+'60,60,60,60,60,60,60,819,819,819,819,60,60,60,60,60,60,60,610,613,60',
+'619,625,627,628,368,876,60,631,835,60,60,60,60,60,60,60,60,60,60,640',
+'60,60,60,60,60,368,368,368,368,368,368,368,368,368,368,368,772,368,368',
+'326,645,368,368,772,60,649,326,60,650,651,60,60,772,657,60,326,662,368',
+'665,368,60,368,368,368,368,368,368,368,60,368,667,20,680,60,60,60,60',
+'60,60,766,200,838,60,60,839,60,368,200,368,698,60,99,99,99,99,99,200',
+'204,773,99,99,205,702,703,99,773,99,99,99,99,99,99,99,704,773,1,707',
+'99,99,99,99,99,99,99,711,712,99,4,4,4,4,4,99,99,99,99,99,99,99,99,99',
+'99,99,99,99,99,600,99,99,99,99,99,461,600,714,856,857,718,600,461,720',
+'721,600,352,352,352,352,352,461,722,858,99,734,737,99,12,241,99,99,242',
+'11,99,246,99,255,748,266,99,516,202,516,516,516,516,268,99,269,270,10',
+'275,99,99,99,99,99,99,277,278,281,99,99,823,823,823,286,823,287,99,290',
+'823,823,752,294,295,823,516,823,823,823,823,823,823,823,516,516,516',
+'516,823,823,823,823,823,823,823,108,108,108,108,108,298,753,302,304',
+'823,314,317,823,823,823,823,823,823,823,823,823,823,319,823,823,,,823',
+'424,424,424,424,424,424,424,424,,424,424,,,,,,424,424,,823,,,823,,,823',
+'823,,,823,,,424,,424,,424,424,424,424,424,424,424,,424,,,,823,823,823',
+'823,823,823,,,,823,823,,699,699,699,823,699,,,,699,699,,,,699,,699,699',
+'699,699,699,699,699,,,,,699,699,699,699,699,699,699,,,,,,,,557,,699',
+',,699,699,699,699,699,699,699,699,699,699,,699,699,,,699,557,557,557',
+'557,557,557,557,557,557,557,557,,557,557,,,557,557,,699,,,699,,,699',
+'699,,,699,,,557,,557,,557,557,557,557,557,557,557,,557,,,,699,699,699',
+'699,699,699,,,,699,699,,,557,,699,30,30,30,30,30,30,,,,30,30,,,,30,',
+'30,30,30,30,30,30,30,,,,,30,30,30,30,30,30,30,,,30,,,,,,30,30,30,30',
+'30,30,30,30,30,30,30,30,30,30,,30,30,30,30,30,416,416,416,416,416,416',
+'416,,,416,416,,,,,,416,416,,30,,,30,,,30,30,,,30,,30,416,,416,30,416',
+'416,416,416,416,416,416,30,416,,,,30,30,30,30,30,30,,,,30,30,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,417,417,417,417,417,417,417',
+',,417,417,,,,,,417,417,,739,,,739,,,739,739,,,739,,739,417,,417,739',
+'417,417,417,417,417,417,417,739,417,,,,739,739,739,739,739,739,,,,739',
+'739,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,418,418,418,418',
+'418,418,418,,,418,418,,,,,,418,418,,738,,,738,,,738,738,,,738,,738,418',
+',418,738,418,418,418,418,418,418,418,738,418,,,,738,738,738,738,738',
+'738,,,,738,738,608,608,608,608,608,608,,,,608,608,,,,608,,608,608,608',
+'608,608,608,608,,,,,608,608,608,608,608,608,608,,,608,,,,,,608,608,608',
+'608,608,608,608,608,608,608,608,608,608,608,,608,608,608,608,608,400',
+'400,400,400,400,400,400,400,400,400,400,,400,400,,,400,400,,608,,,608',
+',,608,608,,,608,,608,400,,400,608,400,400,400,400,400,400,400,608,400',
+',,,608,608,608,608,608,608,,,,608,608,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,419,419,419,419,419,419,419,,,419,419,,,,,,419',
+'419,,591,,,591,,,591,591,,,591,,591,419,,419,591,419,419,419,419,419',
+'419,419,591,419,,,,591,591,591,591,591,591,,,,591,591,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,413,,,,,,,,,,,,,,,,413,413,,188,,,188',
+',,188,188,,,188,,188,413,,413,188,413,413,413,413,,,413,188,413,,,,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,420,420,420,420,420,420,420,,,420,420,,,,,,420,420,',
+'189,,,189,,,189,189,,,189,,189,420,,420,189,420,420,420,420,420,420',
+'420,189,420,,,,189,189,189,189,189,189,,,,189,189,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,401,401,401,401,401,401,401,401,401,401',
+'401,,401,401,,,401,401,,590,,,590,,,590,590,,,590,,590,401,,401,590',
+'401,401,401,401,401,401,401,590,401,,,,590,590,590,590,590,590,,,,590',
+'590,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,415,,,,,,,,,,,',
+',,,,415,415,,561,,,561,,,561,561,,,561,,561,415,,415,561,415,415,415',
+'415,,,415,561,415,,,,561,561,561,561,561,561,,,,561,561,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,423,423,423,423,423,423,423,,,423',
+'423,,,,,,423,423,,726,,,726,,,726,726,,,726,,726,423,,423,726,423,423',
+'423,423,423,423,423,726,423,,,,726,726,726,726,726,726,,,,726,726,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,412,,,,,,,,,,,,,,,',
+'412,412,,708,,,708,,,708,708,,,708,,708,412,,412,708,412,412,412,412',
+',,412,708,412,,,,708,708,708,708,708,708,,,,708,708,0,0,0,0,0,0,,,,0',
+'0,,,,0,,0,0,0,0,0,0,0,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0',
+'0,0,0,0,,0,0,0,0,0,411,411,411,411,411,411,411,,,411,411,,,,,,411,411',
+',0,,,0,,,0,0,,,0,,0,411,,411,0,411,411,411,411,411,411,411,0,411,,,',
+'0,0,0,0,0,0,,,,0,0,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',
+'414,,,,,,,,,,,,,,,,414,414,,854,,,854,,,854,854,,,854,,854,414,,414',
+'854,414,414,414,414,,,414,854,414,,,,854,854,854,854,854,854,,,,854',
+'854,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,408,,,,,,,,,,,',
+',,,,408,408,,272,,,272,,,272,272,,,272,,272,408,,408,272,408,408,408',
+'408,,,,272,,,,,272,272,272,272,272,272,,,,272,272,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,409,,,,,,,,,,,,,,,,409,409,,267,,,267,',
+',267,267,,,267,,267,409,,409,267,409,409,409,409,,,,267,,,,,267,267',
+'267,267,267,267,,,,267,267,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,410,,,,,,,,,,,,,,,,410,410,,206,,,206,,,206,206,,,206,,206',
+'410,,,206,410,410,410,410,,,,206,,,,,206,206,206,206,206,206,,,,206',
+'206,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,847,847,847,847,847,847,,,,847',
+'847,,,,847,,847,847,847,847,847,847,847,,,,,847,847,847,847,847,847',
+'847,,,847,,,,,,847,847,847,847,847,847,847,847,847,847,847,847,847,847',
+',847,847,847,847,847,,,,,,,,,,,,,,,,,,,,847,,,847,,,847,847,,,847,,847',
+',,,847,,,,,,,,847,,,,,847,847,847,847,847,847,,,,847,847,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,673,673,673,673,673,,,',
+'673,673,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,515,515,515,,515,515,515,515,515,,,,,,,,,,,',
+',,,,,,,,515,,,515,,,515,515,,,515,,515,,,,515,,,,,,,,515,,,,,515,515',
+'515,515,515,515,,,,515,515,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,,,840,,,840,840,,,840,,840,,,,840',
+',,,,,,,840,,,,,840,840,840,840,840,840,,,,840,840,796,796,796,796,796',
+'796,,,,796,796,,,,796,,796,796,796,796,796,796,796,,,,,796,796,796,796',
+'796,796,796,,,796,,,,,,796,796,796,796,796,796,796,796,796,796,796,796',
+'796,796,,796,796,796,796,796,,,,,,,,,,,,,,,,,,,,796,,,796,,,796,796',
+',,796,,796,,,,796,,,,,,,,796,,,,,796,796,796,796,796,796,,,,796,796',
+'646,646,646,646,646,646,,,,646,646,,,,646,,646,646,646,646,646,646,646',
+',,,,646,646,646,646,646,646,646,,,646,,,,,,646,646,646,646,646,646,646',
+'646,646,646,646,646,646,646,,646,646,646,646,646,,,,,,,,,,,,,,,,,,,',
+'646,,,646,,,646,646,,,646,,646,,,,646,,,,,,,,646,,,,,646,646,646,646',
+'646,646,,,,646,646,641,641,641,641,641,641,,,,641,641,,,,641,,641,641',
+'641,641,641,641,641,,,,,641,641,641,641,641,641,641,,,641,,,,,,641,641',
+'641,641,641,641,641,641,641,641,641,641,641,641,,641,641,641,641,641',
+',,,,,,,,,,,,,,,,,,,641,,,641,,,641,641,,,641,,641,,,,641,,,,,,,,641',
+',,,,641,641,641,641,641,641,,,,641,641,497,497,497,497,497,497,,,,497',
+'497,,,,497,,497,497,497,497,497,497,497,,,,,497,497,497,497,497,497',
+'497,,,497,,,,,,497,497,497,497,497,497,497,497,497,497,497,497,497,497',
+',497,497,497,497,497,,,,,,,,,,,,,,,,,,,,497,,,497,,,497,497,,,497,,497',
+',,,497,,,,,,,,497,,,,,497,497,497,497,497,497,,,,497,497,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,492,,,',
+'492,492,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,750',
+'750,750,750,750,,,,750,750,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,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',
+'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',
+'5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,5,5,5,5,5,5,5,,,5,,,,,,5,5',
+'5,5,5,5,5,5,5,5,5,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,,830,830,830,830,830,830,830,830,830,830,830,,830',
+'830,,,830,830,31,,,31,,,31,31,,,31,,31,,830,,830,,830,830,830,830,830',
+'830,830,,830,,,31,31,31,31,31,31,,,,31,31,32,32,32,830,32,830,,,32,32',
+',,,32,,32,32,32,32,32,32,32,,,,,32,32,32,32,32,32,32,,,,,,,,,,32,,,32',
+'32,32,32,32,32,32,32,32,32,,32,32,,,32,,696,696,696,696,696,696,696',
+'696,696,696,696,,696,696,,,696,696,32,,,32,,,32,32,,,32,,,,696,,696',
+',696,696,696,696,696,696,696,,696,,,32,32,32,32,32,32,,,,32,32,38,38',
+'38,696,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,,470,470,470,470,470,470,470,470,470,470,470,,470,470,,,470,470,61',
+',,61,,,61,61,,,61,,61,,470,,470,,470,470,470,470,470,470,470,,470,,',
+'61,61,61,61,61,61,,,,61,61,62,62,62,470,62,,,,62,62,,,,62,,62,62,62',
+'62,62,62,62,,,,,62,62,62,62,62,62,62,,,,,,,,,,62,,,62,62,62,62,62,62',
+'62,62,62,62,,62,62,,,62,,691,691,691,691,691,691,691,691,691,691,691',
+',691,691,,62,691,691,62,,,62,,,62,62,,,62,,,,691,,691,,691,691,691,691',
+'691,691,691,,691,,,62,62,62,62,62,62,,,,62,62,63,63,63,691,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,,689,689,689,689,689,689',
+'689,689,689,689,689,,689,689,,,689,689,63,,,63,,,63,63,,,63,,,,689,',
+'689,,689,689,689,689,689,689,689,,689,,,63,63,63,63,63,63,,,,63,63,84',
+'84,84,689,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,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,,,,84,84,88,88,88,,88,,,,88,88,,,,88,,88,88,88,88',
+'88,88,88,,88,,,88,88,88,88,88,88,88,,,,,,,,,,88,,,88,88,88,88,88,88',
+'88,88,88,88,,88,88,88,88,88,,,,,,,,,,,,,,,,,,,,88,,,88,88,,88,88,,,88',
+',88,,88,,88,,,,,,,,88,,88,,,88,88,88,88,88,88,,,,88,88,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,106,106,106',
+',106,,,,106,106,,,,106,,106,106,106,106,106,106,106,,,,,106,106,106',
+'106,106,106,106,,,106,,,,,,,106,,,106,106,106,106,106,106,106,106,106',
+'106,,106,106,106,106,106,,,,,,,,,,,,,,,,,,,,106,,,106,,,106,106,,,106',
+',,,,,106,,,,,,,,106,,,,,106,106,106,106,106,106,,,,106,106,107,107,107',
+'107,107,,,,107,107,,,,107,,107,107,107,107,107,107,107,,,,,107,107,107',
+'107,107,107,107,,,107,,,,,,107,107,107,107,107,107,107,107,107,107,107',
+'107,107,107,,107,107,107,107,107,,,,,,,,,,,,,,,,,,,,107,,,107,,,107',
+'107,,,107,,107,,,,107,,,,,,,,107,,,,,107,107,107,107,107,107,,,,107',
+'107,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,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,192,192,192,,192,,,,192,192,,,,192,,192,192,192,192,192,192',
+'192,,,,,192,192,192,192,192,192,192,,,,,,,,,,192,,,192,192,192,192,192',
+'192,192,192,192,192,,192,192,192,192,192,,,,,,,,,,,,,,,,,,,,192,,,192',
+',,192,192,,,192,,,,,,192,,,,,,,,192,,,,,192,192,192,192,192,192,,,,192',
+'192,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,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,197,197,197,,197,,,,197,197,,,,197,,197,197,197,197,197,197,197',
+',,,,197,197,197,197,197,197,197,,,197,,,,,,,197,,,197,197,197,197,197',
+'197,197,197,197,197,,197,197,197,197,197,,,,,,,,,,,,,,,,,,,,197,,,197',
+',,197,197,,,197,,,,,,197,,,,,,,,197,,,,,197,197,197,197,197,197,,,,197',
+'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,198,,,,198',
+'198,209,209,209,,209,,,,209,209,,,,209,,209,209,209,209,209,209,209',
+',,,,209,209,209,209,209,209,209,,,,,,,,,,209,,,209,209,209,209,209,209',
+'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,234,234,234,,234,,,,234,234,,,,234,,234,234,234,234,234,234,234',
+',,,,234,234,234,234,234,234,234,,,,,,,,,,234,,,234,234,234,234,234,234',
+'234,234,234,234,,234,234,234,234,234,,,,,,,,,,,,,,,,,,,,234,,,234,,',
+'234,234,,,234,,,,,,234,,,,,,,,234,,,,,234,234,234,234,234,234,,,,234',
+'234,235,235,235,,235,,,,235,235,,,,235,,235,235,235,235,235,235,235',
+',,,,235,235,235,235,235,235,235,,,,,,,,,,235,,,235,235,235,235,235,235',
+'235,235,235,235,,235,235,235,235,235,,,,,,,,,,,,,,,,,,,,235,,,235,,',
+'235,235,,,235,,,,,,235,,,,,,,,235,,,,,235,235,235,235,235,235,,,,235',
+'235,243,243,243,,243,,,,243,243,,,,243,,243,243,243,243,243,243,243',
+',,,,243,243,243,243,243,243,243,,,,,,,,,,243,,,243,243,243,243,243,243',
+'243,243,243,243,,243,243,243,243,243,,,,,,,,,,,,,,,,,,,,243,,,243,,',
+'243,243,,,243,,,,,,243,,,,,,,,243,,,,,243,243,243,243,243,243,,,,243',
+'243,245,245,245,,245,,,,245,245,,,,245,,245,245,245,245,245,245,245',
+',,,,245,245,245,245,245,245,245,,,,,,,,,,245,,,245,245,245,245,245,245',
+'245,245,245,245,,245,245,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,',
+'245,245,,,245,,,,,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245',
+'245,256,256,256,,256,,,,256,256,,,,256,,256,256,256,256,256,256,256',
+',,,,256,256,256,256,256,256,256,,,,,,,,,,256,,,256,256,256,256,256,256',
+'256,256,256,256,,256,256,256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,',
+'256,256,,,256,,256,,256,,256,,,,,,,,256,,,,,256,256,256,256,256,256',
+',,,256,256,257,257,257,,257,,,,257,257,,,,257,,257,257,257,257,257,257',
+'257,,,,,257,257,257,257,257,257,257,,,,,,,,,,257,,,257,257,257,257,257',
+'257,257,257,257,257,,257,257,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257',
+',,257,257,,,257,,257,,257,,257,,,,,,,,257,,,,,257,257,257,257,257,257',
+',,,257,257,265,265,265,,265,,,,265,265,,,,265,,265,265,265,265,265,265',
+'265,,,,,265,265,265,265,265,265,265,,,,,,,,,,265,,,265,265,265,265,265',
+'265,265,265,265,265,,265,265,265,265,265,,,,,,,,,,,,,,,,,,,,265,,,265',
+',265,265,265,,,265,,265,,265,,265,,,,,,,,265,,,,,265,265,265,265,265',
+'265,,,,265,265,271,271,271,,271,,,,271,271,,,,271,,271,271,271,271,271',
+'271,271,,,,,271,271,271,271,271,271,271,,,,,,,,,,271,,,271,271,271,271',
+'271,271,271,271,271,271,,271,271,,,271,,686,686,686,686,686,686,686',
+'686,686,686,686,,686,686,,,686,686,271,,,271,,,271,271,,,271,,,,686',
+',686,,686,686,686,686,686,686,686,,686,,,271,271,271,271,271,271,,,',
+'271,271,292,292,292,686,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,301,301,301,,301,,,,301,301,,,,301,,301,301,301,301,301,301',
+'301,,,,,301,301,301,301,301,301,301,,,,,,,,,,301,,,301,301,301,301,301',
+'301,301,301,301,301,,301,301,301,301,301,,,,,,,,,,,,,,,,,,,,301,,,301',
+',,301,301,,,301,,,,,,301,,,,,,,,301,,,,,301,301,301,301,301,301,,,,301',
+'301,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,,,,310',
+'310,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',
+'311,329,329,329,,329,,,,329,329,,,,329,,329,329,329,329,329,329,329',
+',,,,329,329,329,329,329,329,329,,,329,,,,,,,329,,,329,329,329,329,329',
+'329,329,329,329,329,,329,329,329,329,329,,,,,,,,,,,,,,,,,,,,329,,,329',
+',,329,329,,,329,,,,,,329,,,,,,,,329,,,,,329,329,329,329,329,329,,,,329',
+'329,343,343,343,,343,,,,343,343,,,,343,,343,343,343,343,343,343,343',
+',,,,343,343,343,343,343,343,343,,,343,,,,,,,343,,,343,343,343,343,343',
+'343,343,343,343,343,,343,343,343,343,343,,,,,,,,,,,,,,,,,,,,343,,,343',
+',,343,343,,,343,,,,,,343,,,,,,,,343,,,,,343,343,343,343,343,343,,,,343',
+'343,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359',
+'359,359,359,359,359,359,359,359,,,359,359,359,359,359,359,359,359,359',
+'359,,,,,,359,359,359,359,359,359,359,359,,,359,,,,,,,359,359,,359,359',
+'359,359,,359,359,,,359,,,,,359,359,359,359,,,,,,,,,,,,,,359,359,,359',
+'359,359,359,359,359,359,359,359,,359,,,359,359,,,380,380,380,,380,,',
+'359,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,387',
+'387,387,,387,,,,387,387,,,,387,,387,387,387,387,387,387,387,,,,,387',
+'387,387,387,387,387,387,,,,,,,,,,387,,,387,387,387,387,387,387,387,387',
+'387,387,,387,387,387,387,387,,,,,,,,,,,,,,,,,,,,387,,,387,387,,387,387',
+',,387,,387,,387,,387,,,,,,,,387,,,,,387,387,387,387,387,387,,,,387,387',
+'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,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,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,398,398,398,,398,,,,398,398,,,,398,,398,398,398,398,398,398,398',
+',,,,398,398,398,398,398,398,398,,,,,,,,,,398,,,398,398,398,398,398,398',
+'398,398,398,398,,398,398,398,398,398,,,,,,,,,,,,,,,,,,,,398,,,398,,',
+'398,398,,,398,,,,,,398,,,,,,,,398,,,,,398,398,398,398,398,398,,,,398',
+'398,399,399,399,,399,,,,399,399,,,,399,,399,399,399,399,399,399,399',
+',,,,399,399,399,399,399,399,399,,,,,,,,,,399,,,399,399,399,399,399,399',
+'399,399,399,399,,399,399,399,399,399,,,,,,,,,,,,,,,,,,,,399,,,399,,',
+'399,399,,,399,,,,,,399,,,,,,,,399,,,,,399,399,399,399,399,399,,,,399',
+'399,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,430,430,430,,430,,,,430,430,,,,430,,430,430,430,430,430,430',
+'430,,,,,430,430,430,430,430,430,430,,,,,,,,,,430,,,430,430,430,430,430',
+'430,430,430,430,430,,430,430,430,430,430,,,,,,,,,,,,,,,,,,,,430,,,430',
+',,430,430,,,430,,430,,430,,430,,,,,,,,430,,,,,430,430,430,430,430,430',
+',,,430,430,433,433,433,,433,,,,433,433,,,,433,,433,433,433,433,433,433',
+'433,,,,,433,433,433,433,433,433,433,,,,,,,,,,433,,,433,433,433,433,433',
+'433,433,433,433,433,,433,433,433,433,433,,,,,,,,,,,,,,,,,,,,433,,,433',
+',,433,433,,,433,,,,,,433,,,,,,,,433,,,,,433,433,433,433,433,433,,,,433',
+'433,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',
+',,,447,447,458,458,458,,458,,,,458,458,,,,458,,458,458,458,458,458,458',
+'458,,,,,458,458,458,458,458,458,458,,,,,,,,,,458,,,458,458,458,458,458',
+'458,458,458,458,458,,458,458,458,458,458,,,,,,,,,,,,,,,,,,,,458,,,458',
+',,458,458,,,458,,458,,,,458,,,,,,,,458,,,,,458,458,458,458,458,458,',
+',,458,458,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,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,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,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,,,,,,,,,,,,,,,,,,,,467,,,467,,',
+'467,467,,,467,,,,,,467,,,,,,,,467,,,,,467,467,467,467,467,467,,,,467',
+'467,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,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,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,481,481,481,,481,,,,481,481,,,,481,,481,481,481,481,481,481',
+'481,,,,,481,481,481,481,481,481,481,,,,,,,,,,481,,,481,481,481,481,481',
+'481,481,481,481,481,,481,481,481,481,481,,,,,,,,,,,,,,,,,,,,481,,,481',
+',,481,481,,,481,,,,,,481,,,,,,,,481,,,,,481,481,481,481,481,481,,,,481',
+'481,484,484,484,,484,,,,484,484,,,,484,,484,484,484,484,484,484,484',
+',,,,484,484,484,484,484,484,484,,,,,,,,,,484,,,484,484,484,484,484,484',
+'484,484,484,484,,484,484,484,484,484,,,,,,,,,,,,,,,,,,,,484,,,484,,',
+'484,484,,,484,,,,,,484,,,,,,,,484,,,,,484,484,484,484,484,484,,,,484',
+'484,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,499,499,499,,499,,,,499,499,,,,499,,499,499,499,499,499,499',
+'499,,,,,499,499,499,499,499,499,499,,,,,,,,,,499,,,499,499,499,499,499',
+'499,499,499,499,499,,499,499,499,499,499,,,,,,,,,,,,,,,,,,,,499,,,499',
+',,499,499,,,499,,499,,,,499,,,,,,,,499,,,,,499,499,499,499,499,499,',
+',,499,499,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,512,512,512,,512,,,,512,512,,,,512,,512,512,512,512,512,512',
+'512,,,,,512,512,512,512,512,512,512,,,512,,,,,,,512,,,512,512,512,512',
+'512,512,512,512,512,512,,512,512,512,512,512,,,,,,,,,,,,,,,,,,,,512',
+',,512,,,512,512,,,512,,,,,,512,,,,,,,,512,,,,,512,512,512,512,512,512',
+',,,512,512,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536',
+'536,536,536,536,536,536,536,536,536,,,536,536,536,536,536,536,536,536',
+'536,536,,,,,,536,536,536,536,536,536,536,536,,,536,,,,,,,536,536,,536',
+'536,536,536,,536,536,,,536,,,,,536,536,536,536,,,,,,,,,,,,,,536,536',
+',536,536,536,536,536,536,536,536,536,,536,,,536,536,,,539,539,539,,539',
+',,536,539,539,,,,539,,539,539,539,539,539,539,539,,,,,539,539,539,539',
+'539,539,539,,,,,,,,,,539,,,539,539,539,539,539,539,539,539,539,539,',
+'539,539,539,539,539,,,,,,,,,,,,,,,,,,,,539,,,539,,,539,539,,,539,,,',
+',,539,,,,,,,,539,,,,,539,539,539,539,539,539,,,,539,539,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,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,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,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,548,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,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,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,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,,,,562,562,566,566,566,,566,',
+',,566,566,,,,566,,566,566,566,566,566,566,566,,,,,566,566,566,566,566',
+'566,566,,,,,,,,,,566,,,566,566,566,566,566,566,566,566,566,566,,566',
+'566,566,566,566,,,,,,,,,,,,,,,,,,,,566,,,566,,,566,566,,,566,,,,,,566',
+',,,,,,,566,,,,,566,566,566,566,566,566,,,,566,566,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,586,586,586,',
+'586,,,,586,586,,,,586,,586,586,586,586,586,586,586,,,,,586,586,586,586',
+'586,586,586,,,,,,,,,,586,,,586,586,586,586,586,586,586,586,586,586,',
+'586,586,586,586,586,,,,,,,,,,,,,,,,,,,,586,,,586,,,586,586,,,586,,,',
+',,586,,,,,,,,586,,,,,586,586,586,586,586,586,,,,586,586,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,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,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,681,681,681',
+',681,,,,681,681,,,,681,,681,681,681,681,681,681,681,,,,,681,681,681',
+'681,681,681,681,,,,,,,,,,681,,,681,681,681,681,681,681,681,681,681,681',
+',681,681,681,681,681,,,,,,,,,,,,,,,,,,,,681,,,681,,,681,681,,,681,,',
+',,,681,,,,,,,,681,,,,,681,681,681,681,681,681,,,,681,681,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,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,693,693,693',
+',693,,,,693,693,,,,693,,693,693,693,693,693,693,693,,,,,693,693,693',
+'693,693,693,693,,,,,,,,,,693,,,693,693,693,693,693,693,693,693,693,693',
+',693,693,693,693,693,,,,,,,,,,,,,,,,,,,,693,,,693,,,693,693,,,693,,',
+',,,693,,,,,,,,693,,,,,693,693,693,693,693,693,,,,693,693,694,694,694',
+',694,,,,694,694,,,,694,,694,694,694,694,694,694,694,,,,,694,694,694',
+'694,694,694,694,,,,,,,,,,694,,,694,694,694,694,694,694,694,694,694,694',
+',694,694,694,694,694,,,,,,,,,,,,,,,,,,,,694,,,694,,,694,694,,,694,,',
+',,,694,,,,,,,,694,,,,,694,694,694,694,694,694,,,,694,694,700,700,700',
+',700,,,,700,700,,,,700,,700,700,700,700,700,700,700,,,,,700,700,700',
+'700,700,700,700,,,,,,,,,,700,,,700,700,700,700,700,700,700,700,700,700',
+',700,700,,,700,,239,239,239,239,239,239,239,239,239,239,239,,239,239',
+',,239,239,700,,,700,,,700,700,,,700,,,,239,,239,,239,239,239,239,239',
+'239,239,,239,,,700,700,700,700,700,700,,,,700,700,706,706,706,239,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,,,,,706,706,706,706,706,706,,,,706,706,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,717,717',
+'717,,717,,,,717,717,,,,717,,717,717,717,717,717,717,717,,,,,717,717',
+'717,717,717,717,717,,,,,,,,,,717,,,717,717,717,717,717,717,717,717,717',
+'717,,717,717,717,717,717,,,,,,,,,,,,,,,,,,,,717,,,717,,,717,717,,,717',
+',717,,717,,717,,,,,,,,717,,,,,717,717,717,717,717,717,,,,717,717,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,,684,684,684,684,684,684,684,684,684,684,684',
+',684,684,,,684,684,730,,,730,,,730,730,,,730,,,,684,,684,,684,684,684',
+'684,684,684,684,,684,,,730,730,730,730,730,730,,,,730,730,736,736,736',
+'684,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,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,742,761,761,761',
+',761,,,,761,761,,,,761,,761,761,761,761,761,761,761,,,,,761,761,761',
+'761,761,761,761,,,,,,,,,,761,,,761,761,761,761,761,761,761,761,761,761',
+',761,761,761,761,761,,,,,,,,,,,,,,,,,,,,761,,,761,,,761,761,,,761,,',
+',,,761,,,,,,,,761,,,,,761,761,761,761,761,761,,,,761,761,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,,,,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,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,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,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,804,804,804,,804,',
+',,804,804,,,,804,,804,804,804,804,804,804,804,,,,,804,804,804,804,804',
+'804,804,,,,,,,,,,804,,,804,804,804,804,804,804,804,804,804,804,,804',
+'804,804,804,804,,,,,,,,,,,,,,,,,,,,804,,,804,,,804,804,,,804,,,,,,804',
+',,,,,,,804,,,,,804,804,804,804,804,804,,,,804,804,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,,679,679,679,679,679,679,679,679,679,679,679,,679,679,,,679',
+'679,822,,,822,,,822,822,,,822,,,,679,,679,,679,679,679,679,679,679,679',
+',679,,,822,822,822,822,822,822,,,,822,822,824,824,824,679,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,824,824,824,,824,824',
+'824,824,824,,,,,,,,,,,,,,,,,,,,824,,,824,,,824,824,,,824,,824,,,,824',
+',,,,,,,824,,,,,824,824,824,824,824,824,,,,824,824,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,,376,376,376,376,376,376,376,376,376,376,376,,376,376,,,376',
+'376,829,,,829,,,829,829,,,829,,,,376,,376,,376,376,376,376,376,376,376',
+',376,,,829,829,829,829,829,829,,,,829,829,834,834,834,376,834,,,,834',
+'834,,,,834,,834,834,834,834,834,834,834,,,,,834,834,834,834,834,834',
+'834,,,,,,,,,,834,,,834,834,834,834,834,834,834,834,834,834,,834,834',
+'834,834,834,,,,,,,,,,,,,,,,,,,,834,,,834,,,834,834,,,834,,834,,834,',
+'834,,,,,,,,834,,,,,834,834,834,834,834,834,,,,834,834,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,837,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,,769,769,769,769,769,769,769,769,769,769,769,,769,769',
+',,769,769,863,,,863,,,863,863,,,863,,,,769,,769,,769,769,769,769,769',
+'769,769,,769,,,863,863,863,863,863,863,,,,863,863,866,866,866,769,866',
+',,,866,866,,,,866,,866,866,866,866,866,866,866,,,,,866,866,866,866,866',
+'866,866,,,,,,,,,,866,,,866,866,866,866,866,866,866,866,866,866,,866',
+'866,866,866,866,,,,,,,,,,,,,,,,,,,,866,,,866,,,866,866,,,866,,,,,,866',
+',,,,,,,866,,,,,866,866,866,866,866,866,,,,866,866,869,869,869,,869,',
+',,869,869,,,,869,,869,869,869,869,869,869,869,,,,,869,869,869,869,869',
+'869,869,,,,,,,,,,869,,,869,869,869,869,869,869,869,869,869,869,,869',
+'869,869,869,869,,,,,,,,,,,,,,,,,,,,869,,,869,,,869,869,,,869,,,,,,869',
+',,,,,,,869,,,,,869,869,869,869,869,869,,,,869,869,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,,390,390,390,390,390,390,390,390,390,390,390,,390,390,,,390',
+'390,877,,,877,,,877,877,,,877,,,,390,,390,,390,390,390,390,390,390,390',
+',390,,,877,877,877,877,877,877,,,,877,877,882,882,882,390,882,,,,882',
+'882,,,,882,,882,882,882,882,882,882,882,,,,,882,882,882,882,882,882',
+'882,,,,,,,,,,882,,,882,882,882,882,882,882,882,882,882,882,,882,882',
+'882,882,882,,,,,,,,,,,,,,,,,,,,882,,,882,,,882,882,,,882,,882,,882,',
+'882,,,,,,,,882,,,,,882,882,882,882,882,882,,,,882,882,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,,602,602,602,602,602,602,602,602,602,602,602,,602,602,,,602',
+'602,888,,,888,,,888,888,,,888,,,,602,,602,,602,602,602,602,602,602,602',
+',602,,,888,888,888,888,888,888,,,,888,888,891,891,891,602,891,,,,891',
+'891,,,,891,,891,891,891,891,891,891,891,,,,,891,891,891,891,891,891',
+'891,,,,,,,,,,891,,,891,891,891,891,891,891,891,891,891,891,,891,891',
+'891,891,891,,,,,,,,,,,,,,,,,,,,891,,,891,,,891,891,,,891,,,,,,891,,',
+',,,,,891,,,,,891,891,891,891,891,891,,,,891,891,64,64,64,64,64,64,64',
+'64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,,,64,64,64,64,64',
+'64,64,64,64,64,,,,,,64,64,64,64,64,64,64,64,64,64,64,64,,,,,,64,64,',
+'64,64,64,64,,64,64,,,64,,,,,64,64,64,64,,,,,,64,,,,,,,,64,64,,64,64',
+'64,64,64,64,64,64,64,,64,,,64,666,666,666,666,666,666,666,666,666,666',
+'666,666,666,666,666,666,666,666,666,666,666,666,666,666,,,666,666,666',
+'666,666,666,666,666,666,666,,,,,,666,666,666,666,666,666,666,666,,,666',
+',,,,,,666,666,,666,666,666,666,,666,666,,,666,,,,,666,666,666,666,,',
+',,,,,,,,,,,666,666,,666,666,666,666,666,666,666,666,666,,666,,,666,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,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,,,,,,,,393',
+'393,,,393,,,,,425,425,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,501,501,393,,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,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,509,509,507,,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,468,468,509,,468,,,,,,,468,468,,468,468',
+'468,468,,468,468,,,468,,,,,468,468,468,468,,,,,,,,,,,,,,468,468,,468',
+'468,468,468,468,468,468,468,468,,468,469,469,468,,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,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,,,,,,,253,253,,,253,,,,,733,733,253',
+'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,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,194,194',
+'254,,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,825',
+'825,194,,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',
+'460,460,825,,460,,,,,,,460,460,,460,460,460,460,,460,460,,,460,,,,,460',
+'460,460,460,,,,,,,,,,,,,,460,460,,460,460,460,460,460,460,460,460,460',
+',460,826,826,460,,826,,,,,,,826,826,,826,826,826,826,,826,826,,,826',
+',,,,826,826,826,826,,,,,,,,,,,,,,826,826,,826,826,826,826,826,826,826',
+'826,826,,826,459,459,826,,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,500,500,459,,500,,,,,,,500,500,,500,500,500,500',
+',500,500,,,500,,,,,500,500,500,500,,,,,,,,,,,,,,500,500,,500,500,500',
+'500,500,500,500,500,500,,500,394,394,500,,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,580,580,394,,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,195,195,580,,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,581,581,195',
+',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',
+'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,,19,19,19,19,19',
+'19,19,19,19,19,19,,19,19,482,482,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,
+ 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, -499, -1, -487, -5, -499, -499, -499, -499, -499,
+ -499, -499, -499, -499, -271, -32, -33, -499, -499, -38,
+ -40, -41, -282, -315, -316, -45, -249, -363, -285, -58,
+ -4, -62, -67, -68, -499, -430, -499, -499, -499, -499,
+ -499, -489, -214, -264, -265, -266, -267, -268, -269, -270,
+ -477, -4, -499, -498, -469, -288, -499, -499, -292, -295,
+ -487, -499, -499, -499, -499, -317, -318, -320, -321, -383,
+ -384, -385, -386, -387, -401, -390, -403, -403, -394, -399,
+ -413, -403, -415, -416, -419, -420, -421, -422, -423, -424,
+ -425, -426, -427, -428, -429, -432, -433, -499, -3, -488,
+ -494, -495, -496, -499, -499, -499, -499, -499, -6, -8,
+ -499, -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,
+ -499, -499, -499, -498, -499, -499, -499, -499, -499, -36,
+ -499, -430, -499, -271, -499, -499, -4, -37, -206, -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, -353, -355, -42, -215,
+ -228, -258, -258, -499, -236, -499, -259, -282, -315, -316,
+ -472, -43, -44, -499, -499, -50, -498, -499, -287, -358,
+ -364, -366, -56, -362, -57, -499, -58, -4, -499, -499,
+ -63, -65, -4, -72, -499, -499, -79, -285, -489, -499,
+ -319, -363, -499, -66, -70, -278, -417, -418, -499, -191,
+ -192, -207, -499, -490, -375, -499, -274, -216, -489, -491,
+ -491, -499, -499, -491, -499, -491, -289, -39, -499, -499,
+ -499, -499, -487, -499, -488, -430, -499, -499, -271, -499,
+ -333, -334, -88, -89, -499, -91, -499, -271, -499, -499,
+ -430, -308, -93, -94, -131, -132, -148, -153, -160, -163,
+ -310, -499, -467, -499, -388, -499, -499, -499, -499, -499,
+ -499, 896, -7, -497, -14, -15, -16, -17, -18, -499,
+ -10, -11, -12, -103, -499, -499, -21, -29, -171, -259,
+ -499, -499, -22, -30, -31, -23, -173, -499, -478, -479,
+ -226, -480, -481, -478, -249, -479, -361, -483, -484, -28,
+ -180, -34, -35, -499, -499, -498, -278, -499, -499, -499,
+ -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, -499, -349, -229, -499, -231,
+ -499, -258, -256, -499, -249, -478, -479, -249, -48, -51,
+ -499, -489, -489, -258, -228, -250, -251, -252, -349, -349,
+ -499, -284, -499, -59, -276, -71, -64, -499, -498, -499,
+ -499, -78, -499, -417, -418, -499, -499, -499, -499, -499,
+ -212, -499, -498, -498, -273, -489, -217, -218, -493, -492,
+ -220, -493, -489, -280, -493, -471, -281, -470, -4, -322,
+ -323, -324, -4, -499, -499, -499, -499, -4, -499, -498,
+ -499, -499, -278, -301, -88, -89, -90, -499, -498, -499,
+ -304, -434, -499, -499, -499, -4, -447, -312, -485, -486,
+ -489, -389, -402, -405, -499, -407, -391, -404, -499, -393,
+ -499, -396, -398, -499, -414, -9, -499, -19, -20, -499,
+ -499, -263, -279, -499, -499, -52, -227, -359, -499, -54,
+ -360, -499, -478, -479, -482, -277, -499, -171, -499, -499,
+ -351, -4, -499, -258, -257, -260, -499, -473, -499, -235,
+ -499, -474, -46, -356, -47, -357, -349, -222, -499, -499,
+ -499, -499, -499, -38, -499, -258, -499, -248, -499, -254,
+ -4, -4, -283, -59, -69, -499, -478, -479, -226, -75,
+ -77, -499, -179, -189, -190, -499, -498, -331, -4, -376,
+ -498, -377, -378, -499, -499, -260, -221, -498, -325, -498,
+ -293, -326, -327, -328, -296, -499, -299, -499, -369, -499,
+ -499, -499, -478, -479, -482, -277, -499, -88, -89, -92,
+ -499, -4, -499, -436, -306, -499, -4, -447, -499, -466,
+ -466, -466, -446, -448, -449, -450, -451, -452, -453, -456,
+ -458, -459, -461, -462, -463, -499, -499, -499, -406, -409,
+ -410, -411, -412, -4, -392, -395, -397, -400, -104, -172,
+ -261, -499, -499, -25, -175, -26, -176, -53, -27, -177,
+ -55, -178, -499, -499, -499, -279, -213, -335, -337, -347,
+ -499, -350, -499, -499, -258, -233, -499, -258, -4, -223,
+ -224, -226, -226, -489, -499, -499, -241, -499, -258, -253,
+ -499, -499, -499, -73, -286, -2, -4, -382, -332, -499,
+ -499, -380, -275, -489, -499, -329, -499, -499, -4, -4,
+ -298, -300, -499, -4, -371, -279, -499, -279, -499, -435,
+ -4, -309, -499, -489, -438, -499, -442, -499, -444, -445,
+ -499, -499, -460, -464, -313, -468, -499, -262, -24, -174,
+ -499, -338, -80, -499, -499, -87, -346, -499, -348, -352,
+ -354, -230, -499, -232, -499, -499, -258, -238, -499, -258,
+ -499, -247, -255, -365, -367, -381, -4, -379, -219, -290,
+ -499, -291, -499, -499, -499, -498, -302, -305, -499, -311,
+ -499, -466, -466, -454, -465, -466, -499, -457, -455, -447,
+ -408, -336, -499, -343, -498, -499, -499, -86, -499, -499,
+ -258, -49, -225, -237, -499, -258, -243, -499, -258, -375,
+ -4, -294, -297, -370, -368, -372, -373, -4, -307, -437,
+ -499, -440, -441, -443, -4, -339, -342, -499, -499, -82,
+ -84, -83, -85, -499, -345, -234, -499, -258, -239, -499,
+ -242, -374, -498, -499, -466, -499, -499, -499, -81, -344,
+ -258, -244, -499, -258, -330, -303, -439, -314, -499, -341,
+ -240, -499, -245, -340, -258, -246 ]
+
+clist = [
+'35,340,302,295,270,35,472,280,280,442,114,114,488,492,606,10,439,98',
+'102,283,10,646,567,207,734,2,244,244,244,440,35,273,273,496,652,259',
+'263,280,280,280,506,240,240,240,268,10,817,109,187,119,119,35,266,380',
+'384,269,522,117,117,531,311,315,330,330,330,108,10,739,114,367,374,636',
+'298,567,313,102,320,242,242,242,573,620,624,575,847,292,346,347,756',
+'758,759,350,812,199,815,241,241,241,561,35,308,309,477,480,312,641,485',
+'35,487,305,328,331,434,437,10,750,238,251,252,515,590,591,10,516,666',
+'819,698,303,296,702,426,448,307,307,449,629,307,844,610,817,729,344',
+'377,345,348,530,349,354,355,356,357,668,255,262,264,673,753,811,813',
+'352,725,737,576,536,1,652,359,358,321,186,589,445,588,720,342,304,306',
+'99,319,307,307,307,307,510,341,517,475,874,35,35,310,738,,,,366,372',
+'375,,388,,389,,10,10,,35,,,,,,298,364,365,625,,,,,,10,,639,,,,,,,,269',
+',,,,,,,,,676,,,,607,612,280,708,,851,852,380,384,853,,,,456,,244,244',
+',370,370,,,35,,244,,273,35,391,392,444,240,,,884,,452,10,,240,,457,10',
+'259,266,263,,269,,266,,,269,567,,,,,,,,687,,,567,690,242,242,886,,,',
+',,601,242,,462,,854,,495,102,601,443,241,,,743,806,713,,652,241,,,,476',
+'511,556,,,845,,,441,446,611,,493,494,,573,575,450,601,,,114,,,601,,',
+',,,,,,,,,,727,,,,731,,,307,307,,,607,,607,550,,,,,388,,535,,119,,,514',
+',595,,,117,,,,298,,,,,520,,,,,,,,,,567,,,,796,,,,,13,711,712,,,13,,',
+',,631,,,587,,,,200,200,640,,,200,200,200,,388,,,645,13,274,274,429,',
+'388,567,,,298,,,,,,563,,578,579,,35,13,200,200,35,,200,200,,35,200,316',
+'326,326,585,10,840,388,545,10,621,621,549,388,10,617,,35,,619,298,613',
+',,627,296,,846,616,298,643,644,10,,697,,,280,,13,,,114,200,200,200,200',
+'13,370,605,683,685,,871,,688,,,642,,,273,572,35,,574,667,,,,,,,628,',
+',,,10,678,607,119,,,,,,,703,117,307,,35,35,,748,,,,,752,,,714,,764,',
+'10,10,,35,,550,,,,,721,722,,,,,,,10,,,13,13,200,200,200,200,,728,200',
+'200,200,563,,,,35,,,13,607,35,,,,,,,,,,10,749,,,569,10,,754,,,,,,,114',
+',,35,,280,280,,,,746,,,,,601,,768,10,,,,,,200,200,,,766,772,772,,808',
+'200,,13,280,,35,274,13,,307,,776,778,,,,787,,,,10,,,35,,,,772,,,784',
+',,,,35,35,,10,,35,821,797,,280,200,200,35,795,,10,10,,,785,10,,,621',
+',802,803,10,,200,805,,789,273,,858,,,,798,,,800,200,,,,,,,786,,,,705',
+',,,35,810,280,280,,,,,,280,875,,,,,10,307,,716,,,,,,14,839,772,772,',
+'14,,,,772,388,,,200,,,,855,856,280,35,,,298,864,,,35,,,14,276,276,280',
+'35,10,,,,,,,10,772,280,872,,,,10,,14,873,,,,,772,879,,,318,327,327,',
+'200,,,772,867,,,889,,,,200,,,,,,,893,,,,,,200,,,,,,,,,,14,,,,,,,13,14',
+',,13,,,781,,13,783,200,,,,,,,,,200,791,,,200,,,13,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,200,200,,,,200,,,,,,,,,,,274,,13,,,,,,,,,14,14,,,,,,833,,,836',
+',200,,,,,,14,,13,13,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,865,,,,,868,,,870',
+',,,,,,200,,,,,13,,,,,13,,,14,,,,276,14,,,,881,,12,,,,,12,,,,,,890,,13',
+'892,,,,,,,,200,,,895,,,,,12,,,,,,,,,773,773,,,,,,,,13,,,12,,,,,,,,,',
+',,,,,13,,,,773,,,,,,200,,13,13,,,,13,,,,,,,13,,,,,,,,,12,,,,,,,,12,',
+',,274,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,773,773,200',
+',,,,773,,,,,,,,,,,13,,,,,,,13,12,12,,,,,13,,,,,,,,,773,,,12,,,,14,,',
+',14,,,773,,14,,,,,,,,,773,,,,,,,,,14,,,,,,,,,672,,,,,,,,,,,,,,,,,,,',
+',12,,,,,12,,,,,,,,,276,,14,,,,,,,,,,,,,,,,,,,,,,,,,,,,,14,14,,,,,,,',
+',,,,,,,,,14,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,14,,,,,,,,,,,,,,',
+',,,,,,,,,,,,14,,,,,,,,,,,,,,,,,,,,,,,,,208,775,775,,239,239,239,,,,14',
+',,,,,,,,,289,290,291,,,,,,14,,,,775,,,239,239,,,,14,14,,,,14,,,,,,,14',
+',,,,,,,,,,,,,,,12,,,,12,276,,,,12,,,,,,,,,,,,,,,,,,12,,,14,,,,,,,,,',
+',,,,,,,,,,,,,,,,775,775,,,,,,775,,,,,,,,,,12,14,,,,,,,14,,,,,,,14,,',
+',,,,,,775,,,,,12,12,368,239,376,239,,,390,775,,,,,,,,,12,,775,208,400',
+'401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417',
+'418,419,420,421,422,423,424,425,,,,12,,,,239,12,239,,,,,,,,,,,239,239',
+',,,,,,,239,,,,,,12,,,,,,,,,,,,,,,,,,,,,470,,,,,,,,,482,,,,,12,,,,,,',
+',,,,,,,,,,,12,,,,,,,,,,,,12,12,,,,12,,,,,,,12,,,,,,,,,,,,,,,,,,,,,,',
+'239,,,,,,,,,,,,,,,,,,,,,,,12,239,,390,557,376,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,239,,239,,,239,,,,,12,,,,,,,12,,583,,,,,12,,,,,,239,,,,,,,602',
+'603,604,,,,,,239,,,,,239,,,239,,,239,,,,,,,,,,,,,,239,239,,,,,,,,,239',
+',,,26,,,,,26,,,,,,,,,,,,26,26,,,,26,26,26,,,679,239,,26,684,686,,,,689',
+',,691,,,,,,,696,,,,239,26,26,26,239,,26,26,,,26,,,,,,,,,,239,,,,239',
+',,,369,373,,,,,,,,,,,,,,,,,,,,26,,,733,26,26,26,26,26,,,,,,,,,,,239',
+',,,,,,,,,,,,431,,432,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,239,769,,,,',
+',,,,,684,686,689,,,,,,26,26,26,26,26,26,239,,26,26,26,,,,,239,,239,26',
+',,,,,,,,,,,,,,,,,,,,,,,239,,,,,,,,,,,,,,,,,,,239,,,,,,,26,26,769,541',
+',,,,,26,,26,,,830,,26,,,,239,,239,,,,,,,,,,,,,,239,,,,,,,,,,,,,,,,,',
+'26,26,239,,,,565,,568,,,571,239,,,239,,,,26,,,,,,584,,,,,,,,26,,,,,',
+',,,,,239,,,239,,,,609,,,,,615,,,568,239,,615,,,,,,,239,,,,,,,369,,,',
+',,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,680,,,,,,,,,,,,,,,,,,,26,,,704',
+',,,707,,,,26,,,,,,,,,,,,565,26,,,718,,,,,,,,,,,,,,26,,,,26,,,,,26,,26',
+',,,,,,,,26,,,,26,,,26,,,744,,,,,,,,,,,,,,,,,,,,,,,,,26,26,,,,26,,,,',
+',,,,,,,,26,,,,,,,,767,,,,,,,,,,,,,26,,,,,,,,26,26,,,568,,,,,,,,,,,568',
+',,26,,,,,,,,,,,,,,,,,,,,,,615,,,,,,26,,,,,26,,,,,26,,,818,,,,,,,,,,',
+',,,,,,,,,,,,,26,,,835,,838,,,,26,,,,,,,,,,843,,,,,,,,,,,,,,,,26,,,,',
+',,,,,,,,,565,,,568,26,,,,,,,,,,26,,26,26,,,,26,,,,,,,26,,,,880,,,883',
+',,,,,,,,,,,,568,,,,,,,,,894,,,,,,,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,26,,,,,,,,,,,,,,,,26,,,,,,,26,,,,,,,26' ]
+ racc_goto_table = arr = ::Array.new(2867, 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,44,19,3,39,41,4,52,52,29,45,45,76,76,5,14,32,8,83,40,14,85,133,15',
+'77,2,60,60,60,53,41,41,41,79,128,57,57,52,52,52,42,26,26,26,37,14,130',
+'11,11,49,49,41,36,30,30,2,119,48,48,119,91,41,41,41,41,9,14,92,45,21',
+'21,93,26,133,8,83,14,56,56,56,58,78,78,58,94,51,116,116,127,127,127',
+'116,126,23,126,54,54,54,33,41,13,13,55,55,13,95,55,41,55,56,43,43,30',
+'30,14,96,28,28,28,97,33,33,14,98,99,100,101,54,23,102,104,106,23,23',
+'107,108,23,109,110,130,111,114,19,115,117,118,120,13,13,13,13,121,31',
+'31,31,122,123,125,129,9,6,5,34,50,1,128,24,9,16,12,61,62,64,65,72,73',
+'74,10,80,23,23,23,23,82,86,87,88,126,41,41,89,90,,,,15,15,15,,45,,15',
+',14,14,,41,,,,,,26,2,2,79,,,,,,14,,42,,,,,,,,2,,,,,,,,,,119,,,,53,53',
+'52,33,,127,127,30,30,127,,,,40,,60,60,,54,54,,,41,,60,,41,41,23,23,26',
+'26,,,77,,37,14,,26,,37,14,57,36,57,,2,,36,,,2,133,,,,,,,,32,,,133,32',
+'56,56,127,,,,,,30,56,,51,,85,,8,83,30,54,54,,,76,78,29,,128,54,,,,51',
+'83,19,,,5,,,28,28,21,,13,13,,58,58,28,30,,,45,,,30,,,,,,,,,,,,,53,,',
+',53,,,23,23,,,53,,53,57,,,,,45,,11,,49,,,23,,19,,,48,,,,26,,,,,23,,',
+',,,,,,,133,,,,76,,,,,18,30,30,,,18,,,,,19,,,60,,,,18,18,19,,,18,18,18',
+',45,,,3,18,18,18,59,,45,133,,,26,,,,,,56,,51,51,,41,18,18,18,41,,18',
+'18,,41,18,18,18,18,56,14,76,45,31,14,83,83,31,45,14,2,,41,,2,26,51,',
+',2,23,,79,51,26,83,83,14,,39,,,52,,18,,,45,18,18,18,18,18,54,23,15,15',
+',4,,15,,,13,,,41,31,41,,31,51,,,,,,,54,,,,,14,11,53,49,,,,,,,2,48,23',
+',41,41,,3,,,,,3,,,26,,44,,14,14,,41,,57,,,,,2,2,,,,,,,14,,,18,18,18',
+'18,18,18,,2,18,18,18,56,,,,41,,,18,53,41,,,,,,,,,,14,83,,,59,14,,83',
+',,,,,,45,,,41,,52,52,,,,13,,,,,30,,15,14,,,,,,18,18,,,2,41,41,,3,18',
+',18,52,,41,18,18,,23,,14,14,,,,60,,,,14,,,41,,,,41,,,2,,,,,41,41,,14',
+',41,39,14,,52,18,18,41,2,,14,14,,,51,14,,,83,,2,2,14,,18,2,,56,41,,19',
+',,,51,,,13,18,,,,,,,54,,,,59,,,,41,51,52,52,,,,,,52,3,,,,,14,23,,59',
+',,,,,20,2,41,41,,20,,,,41,45,,,18,,,,14,14,52,41,,,26,14,,,41,,,20,20',
+'20,52,41,14,,,,,,,14,41,52,2,,,,14,,20,2,,,,,41,14,,,20,20,20,,18,,',
+'41,56,,,14,,,,18,,,,,,,14,,,,,,18,,,,,,,,,,20,,,,,,,18,20,,,18,,,59',
+',18,59,18,,,,,,,,,18,59,,,18,,,18,,,,,,,,,,,,,,,,,,,,,,,,,,,,18,18,',
+',,18,,,,,,,,,,,18,,18,,,,,,,,,20,20,,,,,,59,,,59,,18,,,,,,20,,18,18',
+',,,,,,,,,,,,,,,,18,,,,,,,,,,,,,59,,,,,59,,,59,,,,,,,18,,,,,18,,,,,18',
+',,20,,,,20,20,,,,59,,17,,,,,17,,,,,,59,,18,59,,,,,,,,18,,,59,,,,,17',
+',,,,,,,,18,18,,,,,,,,18,,,17,,,,,,,,,,,,,,,18,,,,18,,,,,,18,,18,18,',
+',,18,,,,,,,18,,,,,,,,,17,,,,,,,,17,,,,18,,,,,,,,,,,,,,,,,,,,,,,,,18',
+',,,,,,,,,,,,,,,,,,,,,,,,,18,18,18,,,,,18,,,,,,,,,,,18,,,,,,,18,17,17',
+',,,,18,,,,,,,,,18,,,17,,,,20,,,,20,,,18,,20,,,,,,,,,18,,,,,,,,,20,,',
+',,,,,,20,,,,,,,,,,,,,,,,,,,,,17,,,,,17,,,,,,,,,20,,20,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,20,20,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,20,,,,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,,,,,,,,,,,,,25',
+'20,20,,25,25,25,,,,20,,,,,,,,,,25,25,25,,,,,,20,,,,20,,,25,25,,,,20',
+'20,,,,20,,,,,,,20,,,,,,,,,,,,,,,,17,,,,17,20,,,,17,,,,,,,,,,,,,,,,,',
+'17,,,20,,,,,,,,,,,,,,,,,,,,,,,,,,20,20,,,,,,20,,,,,,,,,,17,20,,,,,,',
+'20,,,,,,,20,,,,,,,,,20,,,,,17,17,25,25,25,25,,,25,20,,,,,,,,,17,,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,,,,17,,,,25,17,25,,,,,,,,,,,25,25,,,,,,,,25,,,,,,17,,,,',
+',,,,,,,,,,,,,,,,25,,,,,,,,,25,,,,,17,,,,,,,,,,,,,,,,,,17,,,,,,,,,,,',
+'17,17,,,,17,,,,,,,17,,,,,,,,,,,,,,,,,,,,,,,25,,,,,,,,,,,,,,,,,,,,,,',
+'17,25,,25,25,25,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25,,25,,,25,,,,,17,,,,,',
+',17,,25,,,,,17,,,,,,25,,,,,,,25,25,25,,,,,,25,,,,,25,,,25,,,25,,,,,',
+',,,,,,,,25,25,,,,,,,,,25,,,,35,,,,,35,,,,,,,,,,,,35,35,,,,35,35,35,',
+',25,25,,35,25,25,,,,25,,,25,,,,,,,25,,,,25,35,35,35,25,,35,35,,,35,',
+',,,,,,,,25,,,,25,,,,22,22,,,,,,,,,,,,,,,,,,,,35,,,25,35,35,35,35,35',
+',,,,,,,,,,25,,,,,,,,,,,,,22,,22,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25',
+'25,,,,,,,,,,25,25,25,,,,,,35,35,35,35,35,35,25,,35,35,35,,,,,25,,25',
+'35,,,,,,,,,,,,,,,,,,,,,,,,25,,,,,,,,,,,,,,,,,,,25,,,,,,,35,35,25,22',
+',,,,,35,,35,,,25,,35,,,,25,,25,,,,,,,,,,,,,,25,,,,,,,,,,,,,,,,,,35,35',
+'25,,,,22,,22,,,22,25,,,25,,,,35,,,,,,22,,,,,,,,35,,,,,,,,,,,25,,,25',
+',,,22,,,,,22,,,22,25,,22,,,,,,,25,,,,,,,22,,,,,,,,,35,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,22,,,,,,,,,,,,,,,,,,,35,,,22,,,,22,,,,35,,,,,,,,,',
+',,22,35,,,22,,,,,,,,,,,,,,35,,,,35,,,,,35,,35,,,,,,,,,35,,,,35,,,35',
+',,22,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,,35,,,,,,,,,,,,,35,,,,,,,,22,,',
+',,,,,,,,,,35,,,,,,,,35,35,,,22,,,,,,,,,,,22,,,35,,,,,,,,,,,,,,,,,,,',
+',,22,,,,,,35,,,,,35,,,,,35,,,22,,,,,,,,,,,,,,,,,,,,,,,,35,,,22,,22,',
+',,35,,,,,,,,,,22,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,22,,,22,35,,,,,,,,,',
+'35,,35,35,,,,35,,,,,,,35,,,,22,,,22,,,,,,,,,,,,,22,,,,,,,,,22,,,,,,',
+',,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,35,,,,,,,35',
+',,,,,,35' ]
+ racc_goto_check = arr = ::Array.new(2867, 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, 164, 25, -48, -288, -458, -446, nil, 14, 60,
+ 174, 41, 162, 44, 15, 5, 107, 1098, 438, -51,
+ 820, -121, 1900, 76, 57, 1500, 19, nil, 94, -247,
+ -141, 126, -239, -328, -276, 2012, 22, 14, nil, -27,
+ -13, 0, -284, 48, -63, 4, nil, nil, 51, 43,
+ -200, 44, -24, -227, 73, -197, 55, 9, -354, 229,
+ 4, -277, -86, nil, -275, -416, nil, nil, nil, nil,
+ nil, nil, 110, 121, 121, nil, -296, -593, -412, -280,
+ 117, nil, -145, 15, nil, -495, 120, -156, -110, 132,
+ -429, 1, -557, -432, -722, -405, -529, -212, -217, -393,
+ -639, -433, -430, nil, -106, nil, -129, -127, -363, -668,
+ -335, -470, nil, nil, 69, 69, 10, 66, -203, -289,
+ 67, -373, -370, -491, nil, -598, -663, -561, -482, -597,
+ -711, nil, nil, -408 ]
+
+racc_goto_default = [
+ nil, nil, 294, nil, nil, 735, nil, 3, nil, 4,
+ 314, nil, nil, nil, 204, 16, 11, 205, 288, nil,
+ 203, nil, 246, 15, nil, 19, 20, 21, nil, 25,
+ 598, nil, nil, nil, nil, 279, 29, nil, 31, 34,
+ 33, 201, 325, nil, 116, 382, 115, 118, 70, 71,
+ nil, nil, 42, 297, 299, nil, 300, 546, 547, 427,
+ 564, nil, nil, 257, nil, nil, 43, 44, 45, 46,
+ 47, 48, 49, nil, 258, 55, nil, nil, nil, nil,
+ nil, 62, nil, 489, 63, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 237, nil, 386, nil, nil, nil, nil,
+ nil, nil, 69, 72, 73, nil, nil, nil, nil, 527,
+ nil, nil, nil, 648, 649, 650, 651, nil, 814, 658,
+ 659, 662, 665, 250 ]
+
+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_216,
+ 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, 219, :_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, 220, :_reduce_292,
+ 0, 221, :_reduce_293,
+ 7, 183, :_reduce_294,
+ 0, 222, :_reduce_295,
+ 0, 223, :_reduce_296,
+ 7, 183, :_reduce_297,
+ 5, 183, :_reduce_298,
+ 4, 183, :_reduce_299,
+ 5, 183, :_reduce_300,
+ 0, 224, :_reduce_301,
+ 0, 225, :_reduce_302,
+ 9, 183, :_reduce_303,
+ 0, 226, :_reduce_304,
+ 6, 183, :_reduce_305,
+ 0, 227, :_reduce_306,
+ 7, 183, :_reduce_307,
+ 0, 228, :_reduce_308,
+ 5, 183, :_reduce_309,
+ 0, 229, :_reduce_310,
+ 6, 183, :_reduce_311,
+ 0, 230, :_reduce_312,
+ 0, 231, :_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, 212, :_reduce_320,
+ 1, 215, :_reduce_321,
+ 1, 207, :_reduce_none,
+ 1, 207, :_reduce_none,
+ 1, 207, :_reduce_none,
+ 2, 207, :_reduce_325,
+ 1, 209, :_reduce_none,
+ 1, 209, :_reduce_none,
+ 1, 209, :_reduce_none,
+ 1, 208, :_reduce_none,
+ 5, 208, :_reduce_330,
+ 1, 136, :_reduce_none,
+ 2, 136, :_reduce_332,
+ 1, 211, :_reduce_none,
+ 1, 211, :_reduce_none,
+ 1, 232, :_reduce_335,
+ 3, 232, :_reduce_336,
+ 1, 233, :_reduce_none,
+ 2, 233, :_reduce_none,
+ 4, 233, :_reduce_339,
+ 7, 233, :_reduce_340,
+ 6, 233, :_reduce_341,
+ 4, 233, :_reduce_342,
+ 3, 233, :_reduce_343,
+ 5, 233, :_reduce_344,
+ 4, 233, :_reduce_345,
+ 2, 233, :_reduce_346,
+ 1, 233, :_reduce_347,
+ 2, 233, :_reduce_348,
+ 0, 164, :_reduce_349,
+ 2, 164, :_reduce_350,
+ 1, 164, :_reduce_351,
+ 3, 164, :_reduce_352,
+ 0, 235, :_reduce_353,
+ 5, 234, :_reduce_354,
+ 2, 160, :_reduce_355,
+ 4, 160, :_reduce_356,
+ 4, 160, :_reduce_357,
+ 2, 206, :_reduce_358,
+ 4, 206, :_reduce_359,
+ 4, 206, :_reduce_360,
+ 3, 206, :_reduce_361,
+ 2, 206, :_reduce_362,
+ 1, 206, :_reduce_363,
+ 0, 237, :_reduce_364,
+ 5, 205, :_reduce_365,
+ 0, 238, :_reduce_366,
+ 5, 205, :_reduce_367,
+ 5, 210, :_reduce_368,
+ 1, 239, :_reduce_none,
+ 4, 239, :_reduce_370,
+ 2, 239, :_reduce_371,
+ 1, 240, :_reduce_372,
+ 1, 240, :_reduce_none,
+ 6, 135, :_reduce_374,
+ 0, 135, :_reduce_375,
+ 1, 241, :_reduce_376,
+ 1, 241, :_reduce_none,
+ 1, 241, :_reduce_none,
+ 2, 242, :_reduce_379,
+ 1, 242, :_reduce_none,
+ 2, 137, :_reduce_381,
+ 1, 137, :_reduce_none,
+ 1, 197, :_reduce_none,
+ 1, 197, :_reduce_none,
+ 1, 197, :_reduce_none,
+ 1, 198, :_reduce_386,
+ 1, 244, :_reduce_387,
+ 2, 244, :_reduce_388,
+ 3, 245, :_reduce_389,
+ 1, 245, :_reduce_390,
+ 3, 199, :_reduce_391,
+ 4, 200, :_reduce_392,
+ 3, 201, :_reduce_393,
+ 0, 248, :_reduce_394,
+ 3, 248, :_reduce_395,
+ 1, 249, :_reduce_396,
+ 2, 249, :_reduce_397,
+ 3, 202, :_reduce_398,
+ 0, 251, :_reduce_399,
+ 3, 251, :_reduce_400,
+ 0, 246, :_reduce_401,
+ 2, 246, :_reduce_402,
+ 0, 247, :_reduce_403,
+ 2, 247, :_reduce_404,
+ 1, 250, :_reduce_405,
+ 2, 250, :_reduce_406,
+ 0, 253, :_reduce_407,
+ 4, 250, :_reduce_408,
+ 1, 252, :_reduce_409,
+ 1, 252, :_reduce_410,
+ 1, 252, :_reduce_411,
+ 1, 252, :_reduce_none,
+ 1, 179, :_reduce_413,
+ 3, 180, :_reduce_414,
+ 1, 243, :_reduce_415,
+ 1, 243, :_reduce_416,
+ 2, 243, :_reduce_417,
+ 2, 243, :_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, 172, :_reduce_428,
+ 1, 172, :_reduce_429,
+ 1, 203, :_reduce_430,
+ 1, 148, :_reduce_431,
+ 1, 151, :_reduce_432,
+ 1, 151, :_reduce_433,
+ 1, 213, :_reduce_434,
+ 3, 213, :_reduce_435,
+ 2, 213, :_reduce_436,
+ 4, 216, :_reduce_437,
+ 2, 216, :_reduce_438,
+ 6, 254, :_reduce_439,
+ 4, 254, :_reduce_440,
+ 4, 254, :_reduce_441,
+ 2, 254, :_reduce_442,
+ 4, 254, :_reduce_443,
+ 2, 254, :_reduce_444,
+ 2, 254, :_reduce_445,
+ 1, 254, :_reduce_446,
+ 0, 254, :_reduce_447,
+ 1, 260, :_reduce_448,
+ 1, 260, :_reduce_449,
+ 1, 260, :_reduce_450,
+ 1, 260, :_reduce_451,
+ 1, 260, :_reduce_452,
+ 1, 255, :_reduce_453,
+ 3, 255, :_reduce_454,
+ 3, 261, :_reduce_455,
+ 1, 256, :_reduce_456,
+ 3, 256, :_reduce_457,
+ 1, 262, :_reduce_none,
+ 1, 262, :_reduce_none,
+ 2, 257, :_reduce_460,
+ 1, 257, :_reduce_461,
+ 1, 263, :_reduce_none,
+ 1, 263, :_reduce_none,
+ 2, 259, :_reduce_464,
+ 2, 258, :_reduce_465,
+ 0, 258, :_reduce_466,
+ 1, 217, :_reduce_none,
+ 4, 217, :_reduce_468,
+ 0, 204, :_reduce_469,
+ 2, 204, :_reduce_470,
+ 2, 204, :_reduce_471,
+ 1, 187, :_reduce_472,
+ 3, 187, :_reduce_473,
+ 3, 264, :_reduce_474,
+ 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, 236, :_reduce_none,
+ 1, 236, :_reduce_none,
+ 1, 236, :_reduce_none,
+ 1, 218, :_reduce_none,
+ 1, 218, :_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, 214, :_reduce_494,
+ 1, 214, :_reduce_none,
+ 1, 141, :_reduce_none,
+ 2, 141, :_reduce_none,
+ 0, 184, :_reduce_498 ]
+
+racc_reduce_n = 499
+
+racc_shift_n = 896
+
+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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "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.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
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_49(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ 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_internal(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
+
+def _reduce_216(val, _values, result)
+ result = []
+
+ result
+end
+
+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)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_305(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_306(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_307(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_308(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_309(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_310(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_311(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_312(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_313(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ 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])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ 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
+
+def _reduce_320(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ 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
+
+# reduce 329 omitted
+
+def _reduce_330(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 331 omitted
+
+def _reduce_332(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 333 omitted
+
+# reduce 334 omitted
+
+def _reduce_335(val, _values, result)
+ result = [ @builder.arg_expr(val[0]) ]
+
+ result
+end
+
+def _reduce_336(val, _values, result)
+ result = val[0] << @builder.arg_expr(val[2])
+
+ result
+end
+
+# reduce 337 omitted
+
+# reduce 338 omitted
+
+def _reduce_339(val, _values, result)
+ result = val[0].
+ push(@builder.blockarg_expr(val[2], val[3]))
+
+ result
+end
+
+def _reduce_340(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_341(val, _values, result)
+ result = val[0].
+ push(@builder.restarg_expr(val[2])).
+ push(@builder.blockarg_expr(val[4], val[5]))
+
+ result
+end
+
+def _reduce_342(val, _values, result)
+ result = val[0].
+ push(@builder.restarg_expr(val[2], val[3]))
+
+ result
+end
+
+def _reduce_343(val, _values, result)
+ result = val[0].
+ push(@builder.restarg_expr(val[2]))
+
+ result
+end
+
+def _reduce_344(val, _values, result)
+ result = [ @builder.restarg_expr(val[0], val[1]),
+ @builder.blockarg_expr(val[3], val[4]) ]
+
+ result
+end
+
+def _reduce_345(val, _values, result)
+ result = [ @builder.restarg_expr(val[0]),
+ @builder.blockarg_expr(val[2], val[3]) ]
+
+ result
+end
+
+def _reduce_346(val, _values, result)
+ result = [ @builder.restarg_expr(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_347(val, _values, result)
+ result = [ @builder.restarg_expr(val[0]) ]
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ result = [ @builder.blockarg_expr(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_349(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ result = @builder.args(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_351(val, _values, result)
+ result = @builder.args(val[0], [], val[0])
+
+ result
+end
+
+def _reduce_352(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2], false)
+
+ result
+end
+
+def _reduce_353(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_354(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_355(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_356(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_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[1]
+ result = @builder.call_method(nil, nil, val[0],
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_359(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_360(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_361(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_362(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_363(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_364(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_365(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_366(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_367(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_368(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+# reduce 369 omitted
+
+def _reduce_370(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_371(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_372(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 373 omitted
+
+def _reduce_374(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_375(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_376(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 377 omitted
+
+# reduce 378 omitted
+
+def _reduce_379(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 380 omitted
+
+def _reduce_381(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 382 omitted
+
+# reduce 383 omitted
+
+# reduce 384 omitted
+
+# reduce 385 omitted
+
+def _reduce_386(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = @builder.string_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ result = @builder.string(val[0])
+
+ result
+end
+
+def _reduce_391(val, _values, result)
+ result = @builder.xstring_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_392(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_393(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_394(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_395(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_396(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ result = val[0] << @builder.string_internal(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 = []
+
+ result
+end
+
+def _reduce_404(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_405(val, _values, result)
+ result = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_406(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_407(val, _values, result)
+ @lexer.cond.push(false)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_408(val, _values, result)
+ @lexer.cond.lexpop
+ @lexer.cmdarg.lexpop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_409(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_410(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_411(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 412 omitted
+
+def _reduce_413(val, _values, result)
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_414(val, _values, result)
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_415(val, _values, result)
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_416(val, _values, result)
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_417(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_418(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_419(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_421(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_422(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_423(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_424(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_426(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_427(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_428(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_429(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_430(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_431(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_432(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_433(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_434(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_435(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ yyerrok
+ result = nil
+
+ result
+end
+
+def _reduce_437(val, _values, result)
+ result = @builder.args(val[0], val[1], val[3])
+
+ @lexer.state = :expr_beg
+
+ result
+end
+
+def _reduce_438(val, _values, result)
+ result = @builder.args(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_439(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_440(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ 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[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_448(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_449(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_450(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_451(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+def _reduce_452(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_453(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_454(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_455(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_457(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 458 omitted
+
+# reduce 459 omitted
+
+def _reduce_460(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_461(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 462 omitted
+
+# reduce 463 omitted
+
+def _reduce_464(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 467 omitted
+
+def _reduce_468(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_469(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_470(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_471(val, _values, result)
+ result = @builder.pair_list_18(val[0])
+
+ result
+end
+
+def _reduce_472(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_473(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_474(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+# 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
+
+# reduce 492 omitted
+
+# reduce 493 omitted
+
+def _reduce_494(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 495 omitted
+
+# reduce 496 omitted
+
+# reduce 497 omitted
+
+def _reduce_498(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby18
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby19.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby19.rb
new file mode 100644
index 000000000..7920c2c67
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby19.rb
@@ -0,0 +1,6126 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-455,280,71,72,68,9,54,-455,-455,-455,60,61,-455,-455,-455,64,-455,62',
+'63,65,29,30,69,70,-455,260,-455,-455,-455,28,27,26,95,94,96,97,-455',
+'-455,19,-455,-455,-455,-455,-455,8,44,-99,10,99,98,100,89,53,91,90,92',
+'543,93,101,102,522,87,88,41,42,40,-455,-455,-455,-455,-455,-455,-455',
+'-455,-455,-455,-455,-455,-455,-455,-101,210,-455,-455,-455,39,-455,-455',
+'32,-100,-455,55,56,-455,-455,57,-455,34,-455,564,-455,43,-455,-455,-455',
+'-455,-455,-455,-455,20,-455,259,-455,-102,86,78,81,82,211,83,84,553',
+'-98,888,79,85,-455,-455,-455,-455,-533,-455,59,-455,80,-455,522,-533',
+'-533,-533,-96,-97,-533,-533,-533,-82,-533,671,-104,671,512,-68,522,514',
+'-529,-533,-533,-533,-533,-103,-99,542,563,522,522,-99,-533,-533,103',
+'-533,-533,-533,-533,-533,107,-98,-101,785,-530,106,671,107,555,554,565',
+'-92,106,760,-99,207,208,207,208,-100,-91,499,-533,-533,-533,-533,-533',
+'-533,-533,-533,-533,-533,-533,-533,-533,-533,78,534,-533,-533,-533,535',
+'726,-533,-93,79,-533,207,208,-533,-533,115,-533,-89,-533,80,-533,199',
+'-533,-533,-533,-533,-533,-533,-533,200,-533,-533,-533,107,-103,-87,-88',
+'107,106,107,107,201,106,-95,106,106,-533,-533,-533,-533,-458,-533,206',
+'-533,-94,-100,107,-458,-458,-458,-529,106,-458,-458,-458,250,-458,107',
+'107,211,107,211,106,106,-458,106,-458,-458,-458,-98,-101,260,759,-90',
+'-98,-101,-458,-458,304,-458,-458,-458,-458,-458,207,208,599,-100,-92',
+'-90,724,107,-100,305,260,599,106,599,774,211,652,651,650,599,653,372',
+'-458,-458,-458,-458,-458,-458,-458,-458,-458,-458,-458,-458,-458,-458',
+'598,-466,-458,-458,-458,385,-458,-458,-466,598,-458,598,725,-458,-458',
+'255,-458,598,-458,-99,-458,428,-458,-458,-458,-458,-458,-458,-458,636',
+'-458,528,-458,430,-92,-90,-469,259,255,577,553,306,307,431,-526,-533',
+'-458,-458,-458,-458,-281,-458,210,-458,211,-458,846,-281,-281,-281,259',
+'-101,-281,-281,-281,-470,-281,107,502,463,-92,-90,106,-92,-90,503,-281',
+'-281,-281,-92,-90,472,-90,-533,427,-96,-281,-281,-99,-281,-281,-281',
+'-281,-281,780,636,-455,-533,-458,-462,429,555,554,-455,-533,-458,-462',
+'474,-526,-529,703,476,-455,-533,-97,803,-281,-281,-281,-281,-281,-281',
+'-281,-281,-281,-281,-281,-281,-281,-281,-526,-533,-281,-281,-281,-533',
+'727,-281,-399,578,-281,-67,-533,-281,-281,211,-281,-529,-281,-104,-281',
+'-533,-281,-281,-281,-281,-281,-281,-281,-281,-281,-470,-281,484,-98',
+'485,-281,-281,-281,-533,205,-469,-281,-281,492,-281,-281,-281,-281,-281',
+'264,-281,-92,-281,-460,-102,231,-527,-101,107,-399,-460,207,208,106',
+'-281,-281,-399,-281,-281,-281,-281,-281,211,-88,774,-399,652,651,650',
+'-97,653,512,-95,-87,514,107,553,228,-104,-96,106,230,229,-399,-281,-281',
+'-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-458,553',
+'-281,-281,-281,255,582,-458,-455,499,-281,496,-527,-281,-463,-455,-458',
+'500,-281,501,-281,-463,-281,-281,-281,-281,-281,-281,-281,-533,-281',
+'553,-281,231,-527,710,-533,-533,-533,555,554,558,-533,-533,928,-533',
+'-281,-281,507,-93,-464,-281,-94,231,-533,-102,107,-464,-103,508,530',
+'106,555,554,560,-533,-533,531,-533,-533,-533,-533,-533,780,636,515,529',
+'737,-89,652,651,650,553,653,-98,228,107,207,208,230,229,106,555,554',
+'556,-533,-533,-533,-533,-533,-533,-533,-533,-533,-533,-533,-533,-533',
+'-533,-465,231,-533,-533,-533,657,583,-465,512,516,-533,511,252,-533',
+'661,660,664,663,-533,253,-533,476,-533,-533,-533,-533,-533,-533,-533',
+'528,-533,-533,-533,228,555,554,551,230,229,226,227,512,374,-461,514',
+'548,-533,-533,736,-91,-461,-533,549,207,208,-100,280,71,72,68,9,54,382',
+'532,-282,60,61,384,383,533,64,-282,62,63,65,29,30,69,70,566,-282,494',
+'495,569,28,27,26,95,94,96,97,-260,774,19,652,651,650,571,653,8,44,211',
+'10,99,98,100,89,53,91,90,92,575,93,101,102,576,87,88,41,42,40,774,255',
+'652,651,650,-282,653,774,770,652,651,650,-282,653,586,589,-281,892,231',
+'39,231,-282,32,-281,231,55,56,231,-530,57,211,34,-281,211,211,43,774',
+'770,652,651,650,-82,653,20,657,618,773,211,86,78,81,82,505,83,84,664',
+'663,629,79,85,280,71,72,68,9,54,59,636,80,60,61,667,528,657,64,674,62',
+'63,65,29,30,69,70,702,664,663,705,-261,28,27,26,95,94,96,97,711,774',
+'19,652,651,650,463,653,8,44,463,10,99,98,100,89,53,91,90,92,211,93,101',
+'102,729,87,88,41,42,40,774,474,652,651,650,538,653,774,770,652,651,650',
+'913,653,476,629,-281,773,211,39,255,539,32,-281,255,55,56,629,-530,57',
+'231,34,-281,231,750,43,774,770,652,651,650,-260,653,20,657,754,211,762',
+'86,78,81,82,764,83,84,664,663,767,79,85,280,71,72,68,9,54,59,768,80',
+'60,61,776,777,657,64,636,62,63,65,29,30,69,70,784,664,663,211,211,28',
+'27,26,95,94,96,97,697,698,19,793,699,101,102,587,8,44,-262,10,99,98',
+'100,89,53,91,90,92,802,93,101,102,805,87,88,41,42,40,231,235,240,241',
+'242,237,239,247,248,243,244,-274,224,225,538,807,245,246,-274,39,810',
+'537,282,811,736,55,56,-274,817,57,539,34,228,818,234,43,230,229,226',
+'227,238,236,232,20,233,820,821,629,86,78,81,82,830,83,84,736,844,490',
+'79,85,211,249,-534,-237,491,848,59,850,80,-534,-534,-534,856,489,-534',
+'-534,-534,774,-534,652,651,650,858,653,231,211,861,-534,-534,-534,-534',
+'815,-263,652,651,650,868,653,-534,-534,869,-534,-534,-534,-534,-534',
+'774,872,652,651,650,-468,653,877,657,211,228,881,-468,884,230,229,226',
+'227,886,664,663,-468,-534,-534,-534,-534,-534,-534,-534,-534,-534,-534',
+'-534,-534,-534,-534,888,770,-534,-534,-534,-467,888,-534,211,893,-534',
+'896,-467,-534,-534,897,-534,902,-534,904,-534,-467,-534,-534,-534,-534',
+'-534,-534,-534,-274,-534,-534,-534,907,875,909,-274,888,888,914,507',
+'876,921,922,930,-274,-534,-534,-534,-534,874,-534,211,-534,5,71,72,68',
+'9,54,942,888,-468,60,61,888,888,946,64,-468,62,63,65,29,30,69,70,930',
+'-468,949,950,952,28,27,26,95,94,96,97,888,815,19,652,651,650,888,653',
+'8,44,7,10,99,98,100,89,53,91,90,92,888,93,101,102,-530,87,88,41,42,40',
+'774,-529,652,651,650,930,653,888,774,930,652,651,650,,653,,,,,39,,,32',
+',,55,56,,,57,774,34,652,651,650,43,653,770,737,-467,652,651,650,20,653',
+'657,-467,,86,78,81,82,,83,84,-467,664,663,79,85,280,71,72,68,9,54,59',
+'770,80,60,61,,,,64,657,62,63,65,29,30,69,70,,661,660,664,663,28,27,26',
+'95,94,96,97,,774,19,652,651,650,,653,8,44,,10,99,98,100,89,53,91,90',
+'92,,93,101,102,,87,88,41,42,40,110,111,112,113,114,425,,774,770,652',
+'651,650,426,653,,,203,-325,,39,,427,32,204,-325,55,56,,,57,-282,34,202',
+'-325,,43,774,-282,652,651,650,,653,20,657,,-282,,86,78,81,82,,83,84',
+'664,663,,79,85,280,71,72,68,9,54,59,,80,60,61,,,657,64,,62,63,65,29',
+'30,69,70,,664,663,,,28,27,26,95,94,96,97,,,19,110,111,112,113,114,8',
+'44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,110,111',
+'112,113,114,,,,774,,652,651,650,,653,,-281,,,39,,,32,-281,,55,56,,-530',
+'57,,34,-281,,,43,,,655,,652,651,650,20,653,657,,,86,78,81,82,,83,84',
+',664,663,79,85,280,71,72,68,9,54,59,,80,60,61,,,,64,657,62,63,65,29',
+'30,69,70,,661,660,664,663,28,27,26,95,94,96,97,,,19,110,111,112,113',
+'114,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,',
+',,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,655,,652,651,650,20',
+'653,,,,86,78,81,82,,83,84,,,,79,85,280,71,72,68,9,54,59,,80,60,61,,',
+',64,657,62,63,65,29,30,69,70,,661,660,664,663,28,27,26,95,94,96,97,',
+',19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42',
+'40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,737,,652,651',
+'650,20,653,,,,86,78,81,82,,83,84,,,,79,85,280,71,72,68,9,54,59,,80,60',
+'61,,,,64,657,62,63,65,29,30,69,70,,661,660,664,663,28,27,26,95,94,96',
+'97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,737,,652,651',
+'650,20,653,,,,86,78,81,82,,83,84,,,,79,85,280,71,72,68,9,54,59,,80,60',
+'61,,,,64,657,62,63,65,29,30,69,70,,661,660,664,663,28,27,26,95,94,96',
+'97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,655,,652,651',
+'650,20,653,,,,86,78,81,82,,83,84,,,,79,85,280,71,72,68,9,54,59,,80,60',
+'61,,,,64,657,62,63,65,29,30,69,70,,661,660,664,663,28,27,26,95,94,96',
+'97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,655,,652,651',
+'650,20,653,,,,86,78,81,82,,83,84,,,,79,85,280,71,72,68,9,54,59,,80,60',
+'61,,,,64,657,62,63,65,29,30,69,70,,661,660,664,663,28,27,26,95,94,96',
+'97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,655,,652,651',
+'650,20,653,,,,86,78,81,82,,83,84,,,,79,85,280,71,72,68,9,54,59,,80,60',
+'61,,,,64,657,62,63,65,29,30,69,70,,661,660,664,663,28,27,26,95,94,96',
+'97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,231,,,,,,,,,,,,,,,,245,246,,39,,,32,,,55,56,,,57,,34,228,,234',
+'43,230,229,226,227,,,232,20,233,,,,86,78,81,82,,83,84,,,,79,85,280,71',
+'72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95',
+'94,96,97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87',
+'88,41,42,40,231,,,,,,,,,,,,,,,,245,246,,39,,,32,,,55,56,,,57,,34,228',
+',234,43,230,229,226,227,,,232,20,233,,,,86,78,81,82,,83,84,,,,79,85',
+'280,71,72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27',
+'26,95,94,96,97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102',
+',87,88,41,42,40,231,235,240,241,242,237,239,247,,243,244,,,,,,245,246',
+',39,,,32,,,55,56,,,57,,34,228,,234,43,230,229,226,227,238,236,232,20',
+'233,,,,86,78,81,82,,83,84,,,,79,85,280,71,72,68,9,54,59,,80,60,61,,',
+',64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,8,44,',
+'10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,231,-552,-552',
+'-552,-552,237,239,,,-552,-552,,,,,,245,246,,39,,,32,,,55,56,,,57,,34',
+'228,,234,43,230,229,226,227,238,236,232,20,233,,,,86,78,81,82,,83,84',
+',,,79,85,280,71,72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70',
+',,,,,28,27,26,95,94,96,97,,,19,,,,,587,8,44,,10,99,98,100,89,53,91,90',
+'92,,93,101,102,,87,88,41,42,40,231,235,240,241,242,237,239,247,248,243',
+'244,,224,225,,,245,246,,39,,,32,,,55,56,,,57,,34,228,,234,43,230,229',
+'226,227,238,236,232,20,233,,,,86,78,81,82,,83,84,,,,79,85,,249,-535',
+',,,59,,80,-535,-535,-535,,,-535,-535,-535,655,-535,652,651,650,,653',
+',,,-535,-535,-535,-535,,,,,,,,-535,-535,,-535,-535,-535,-535,-535,,',
+',,,,,,657,644,,,,,,,,661,660,664,663,,-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,280,71,72,68',
+'9,54,,,,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97',
+',,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42',
+'40,231,-552,-552,-552,-552,237,239,,,-552,-552,,,,,,245,246,,39,,,282',
+',,55,56,,,57,,34,228,,234,43,230,229,226,227,238,236,232,20,233,,,,86',
+'78,81,82,,83,84,,,,79,85,280,71,72,68,9,54,59,,80,60,61,,,,64,,62,63',
+'65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,8,44,,10,99,98,100',
+'89,53,91,90,92,,93,101,102,,87,88,41,42,40,231,-552,-552,-552,-552,237',
+'239,,,-552,-552,,,,,,245,246,,39,,,32,,,55,56,,,57,,34,228,,234,43,230',
+'229,226,227,238,236,232,20,233,,,,86,78,81,82,,83,84,,,,79,85,280,71',
+'72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95',
+'94,96,97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87',
+'88,41,42,40,231,,,,,,,,,,,,,,,,245,246,,39,,,32,,,55,56,,,57,,34,228',
+',234,43,230,229,226,227,,,232,20,233,,,,86,78,81,82,,83,84,,,,79,85',
+'280,71,72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27',
+'26,95,94,96,97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102',
+',87,88,41,42,40,231,-552,-552,-552,-552,237,239,,,-552,-552,,,,,,245',
+'246,,39,,,32,,,55,56,,,57,,34,228,,234,43,230,229,226,227,238,236,232',
+'20,233,,,,86,78,81,82,,83,84,,,,79,85,280,71,72,68,9,54,59,,80,60,61',
+',,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,8,44',
+',10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,231,-552,-552',
+'-552,-552,237,239,,,-552,-552,,,,,,245,246,,39,,,32,,,55,56,,,57,,34',
+'228,,234,43,230,229,226,227,238,236,232,20,233,,,,86,78,81,82,,83,84',
+',,,79,85,280,71,72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70',
+',,,,,28,27,26,95,94,96,97,,,19,,,,,572,8,44,,10,99,98,100,89,53,91,90',
+'92,,93,101,102,,87,88,41,42,40,231,235,240,241,242,237,239,247,248,243',
+'244,,224,225,,,245,246,,39,,,32,,,55,56,,,57,,34,228,,234,43,230,229',
+'226,227,238,236,232,20,233,,,,86,78,81,82,,83,84,,,,79,85,,249,-275',
+',,,59,,80,-275,-275,-275,,,-275,-275,-275,655,-275,652,651,650,,653',
+',,,,-275,-275,-275,,,,,,,,-275,-275,,-275,-275,-275,-275,-275,,,,,,',
+',,657,692,,,,,,,,661,660,664,663,,-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,280,71,72,68,9,54',
+',,,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19',
+',,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,231',
+'235,240,241,242,237,239,,,243,244,,,,,,245,246,,39,,,32,,,55,56,,,57',
+',34,228,,234,43,230,229,226,227,238,236,232,20,233,,,,86,78,81,82,,83',
+'84,,,,79,85,280,71,72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29,30,69',
+'70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90',
+'92,,93,101,102,,87,88,41,42,40,231,235,240,241,242,237,239,247,248,243',
+'244,,-552,-552,,,245,246,,39,,,282,,,55,56,,,57,,34,228,,234,43,230',
+'229,226,227,238,236,232,20,233,,,,86,78,81,82,,83,84,,,,79,85,280,71',
+'72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95',
+'94,96,97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87',
+'88,41,42,40,231,235,240,241,242,237,239,247,248,243,244,,-552,-552,',
+',245,246,,39,,,32,,,55,56,,,57,,34,228,,234,43,230,229,226,227,238,236',
+'232,20,233,,,,86,78,81,82,,83,84,,,,79,85,5,71,72,68,9,54,59,,80,60',
+'61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,8',
+'44,7,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,231,,,',
+',,,,,,,,,,,,245,246,,39,,,32,,,55,56,,,57,,34,228,,234,43,230,229,226',
+'227,,,232,20,233,,,,86,78,81,82,,83,84,,,,79,85,280,71,72,68,9,54,59',
+',80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19',
+',,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,231',
+'-552,-552,-552,-552,237,239,,,-552,-552,,,,,,245,246,,39,,,32,,,55,56',
+',,57,,34,228,,234,43,230,229,226,227,238,236,232,20,233,,,,86,78,81',
+'82,,83,84,,,,79,85,280,71,72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29',
+'30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,8,44,,10,99,98,100,89,53',
+'91,90,92,,93,101,102,,87,88,41,42,40,231,,,,,,,,,,,,,,,,245,246,,39',
+',,32,,,55,56,,,57,,34,228,,234,43,230,229,226,227,,,,20,,,,,86,78,81',
+'82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30',
+'69,70,,,,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,41,42,40,231,,,,,,,,,,,,,,,,245,246,,216,,',
+'222,,,55,56,,,57,,,228,,234,43,230,229,226,227,,,,221,,,,,86,78,81,82',
+',83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69',
+'70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,41,42,40,231,,,,,,,,,,,,,,,,245,246,,216,,',
+'222,,,55,56,,,57,,,228,,,43,230,229,226,227,,,,221,,,,,86,78,81,82,',
+'83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69',
+'70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,295,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,,655,301,652,651,650,,653,,,,,,,,,,,,,,,291',
+',,287,,,55,56,,,57,,,,,,657,692,,,,,,,,661,660,664,663,86,78,81,82,',
+'83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69',
+'70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55',
+'56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68',
+',54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94',
+'96,97,,,223,,,,,,,295,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88',
+',,301,,,,,,,,,,,,,,,,,,,,291,,,287,,,55,56,,,57,,,,,,,,,,,,,,,,,,,86',
+'78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65',
+'29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89',
+'53,91,90,92,275,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,',
+'222,,,55,56,,,57,,273,,271,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,',
+'79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28',
+'27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,275,93,101',
+'102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,273,',
+'271,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59',
+',80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19',
+',,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,',
+',,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81',
+'82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30',
+'69,70,,,,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,275,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,',
+'55,56,,,57,,273,,271,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85',
+'211,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293',
+'294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101',
+'102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,613,',
+',,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80',
+'60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,',
+',,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,',
+',,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81,82',
+',83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69',
+'70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55',
+'56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68',
+',54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94',
+'96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,',
+',,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99',
+'98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,',
+',216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,',
+',79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,',
+',293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,275',
+'93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',,,271,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54',
+'59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96',
+'97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42',
+'40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,',
+'86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63',
+'65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100,89',
+'53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222',
+',,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,211,71',
+'72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95',
+'94,96,97,,,19,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88',
+'41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,20',
+',,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99',
+'98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,',
+',216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,',
+',79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,',
+',293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,',
+'93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59',
+',80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97',
+',,223,,,,,,,295,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,,,301',
+',,,,,,,,,,,,,,,,,,,871,,,222,,,55,56,,,57,,,,,,,,,,,,,,,,,,,86,78,81',
+'82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298',
+'69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53',
+'91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,',
+'55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72',
+'68,,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94',
+'96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,',
+',,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100',
+'89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,',
+'222,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,',
+'71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26',
+'95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87',
+'88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,',
+',221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64',
+',62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99',
+'98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,',
+',216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,',
+',79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28',
+'27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102',
+',87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,',
+',,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,9,54,59,,80,60,61',
+',,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,8,44',
+',10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,',
+',,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,,,,,,20,,,,,86,78,81,82,,83',
+'84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,',
+',,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,275',
+'93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',273,,271,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,',
+'54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97',
+',,223,,,,,,,44,,,99,98,100,89,53,91,90,92,275,93,101,102,,87,88,41,42',
+'40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,273,,271,,43,,,,,,,,221',
+',,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,295,,,99',
+'98,100,89,53,91,90,92,,93,101,102,,87,88,,,301,231,235,240,241,242,237',
+'239,247,248,243,244,,224,225,,,245,246,,291,,,222,,,55,56,,,57,,,228',
+',234,,230,229,226,227,238,236,232,,233,,,,86,78,81,82,,83,84,,,,79,85',
+',249,,487,,,59,,80,71,72,68,,54,,,,60,61,,,,64,,62,63,65,29,30,69,70',
+',,,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92',
+',93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59',
+',80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223',
+',,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,',
+',,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81',
+'82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298',
+'69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53',
+'91,90,92,275,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222',
+',,55,56,,,57,,,,271,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,',
+'71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294',
+'300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,275,93,101',
+'102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,613,',
+'271,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59',
+',80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223',
+',,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,',
+',,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,390,,,,43,,,,,,,,221,,,,,86,78',
+'81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297',
+'298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89',
+'53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222',
+',,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71',
+'72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300',
+'95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87',
+'88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,708,,,,43,,,',
+',,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,',
+',,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223,,,,,,,44',
+',,99,98,100,89,53,91,90,92,275,93,101,102,,87,88,41,42,40,,,,,,,,,,',
+',,,,,,,,,216,,,222,,,55,56,,,57,,273,,271,,43,,,,,,,,221,,,,,86,78,81',
+'82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30',
+'69,70,,,,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55',
+'56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68',
+',54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94',
+'96,97,,,223,,,,,,,295,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88',
+',,301,,,,,,,,,,,,,,,,,,,,291,,,287,,,55,56,,,57,,286,,,,,,,,,,,,,,,',
+',86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63',
+'65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100,89',
+'53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222',
+',,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,,71,72',
+'68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95',
+'94,96,97,,,223,,,,,,,295,,,99,98,100,89,53,91,90,92,,93,101,102,,87',
+'88,,,301,231,235,240,241,242,237,239,247,248,243,244,,224,225,,,245',
+'246,,291,,,222,,,55,56,,,57,,,228,,234,,230,229,226,227,238,236,232',
+',233,,,,86,78,81,82,,83,84,,,,79,85,,249,,303,,,59,,80,71,72,68,,54',
+',,,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223',
+',,,,,,44,,,99,98,100,89,53,91,90,92,275,93,101,102,,87,88,41,42,40,',
+',,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,273,,271,,43,,,,,,,,221,,',
+',,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63',
+'65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100',
+'89,53,91,90,92,275,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216',
+',,222,,,55,56,,,57,,273,,271,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,',
+',,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,',
+',,293,294,300,95,94,96,97,,,223,,,,,,,295,,,99,98,100,89,53,91,90,92',
+',93,101,102,,87,88,,,301,,,,,,,,,,,,,,,,,,,,336,,,32,,,55,56,,,57,,34',
+',,,,,,,,,,,,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60',
+'61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223',
+',,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,',
+',,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,273,,,,43,,,,,,,,221,,,,,86,78',
+'81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29',
+'30,69,70,,,,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53',
+'91,90,92,275,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222',
+',,55,56,,,57,,273,,271,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85',
+',71,72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26',
+'95,94,96,97,,,19,,,,,,8,44,7,10,99,98,100,89,53,91,90,92,,93,101,102',
+',87,88,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,',
+',,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,',
+',,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,',
+',,295,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,,,301,,,,,,,,,,',
+',,,,,,,,,291,,,287,,,55,56,,,57,,,,,,,,,,,,,,,,,,,86,78,81,82,,83,84',
+',,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,',
+',28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93',
+'101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,',
+',,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80',
+'60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223,,',
+',,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,',
+',,,,,,,,,,,,,216,,,222,,,55,56,,,57,,390,,,,43,,,,,,,,221,,,,,86,78',
+'81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297',
+'298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89',
+'53,91,90,92,275,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,',
+'222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85',
+',71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294',
+'300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,275,93,101',
+'102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,613,',
+',,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80',
+'60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223',
+',,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,',
+',,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,390,,,,43,,,,,,,,221,,,,,86,78',
+'81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29',
+'30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55',
+'56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68',
+',54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94',
+'96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,',
+',,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99',
+'98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,',
+',216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,',
+',79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,',
+',293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,',
+'93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59',
+',80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223',
+',,,,,,44,,,99,98,100,89,53,91,90,92,275,93,101,102,,87,88,41,42,40,',
+',,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,273,,271,,43,,,,,,,,221,,',
+',,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63',
+'65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100,89',
+'53,91,90,92,,93,101,102,,87,88,41,42,40,231,235,240,241,242,237,239',
+'247,248,243,244,,224,225,,,245,246,,216,,,222,,,55,56,,,57,,,228,,234',
+'43,230,229,226,227,238,236,232,20,233,,,,86,78,81,82,,83,84,,,,79,85',
+'107,249,,,,106,59,,80,71,72,68,,54,,,,60,61,,,,64,,62,63,65,29,30,69',
+'70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100,89,53,91,90,92',
+',93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',,,,,43,,,,,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,',
+'80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19',
+',,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,',
+',,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81',
+'82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298',
+'69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53',
+'91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,',
+'55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72',
+'68,,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94',
+'96,97,,,19,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,20,,',
+',,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63',
+'65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98',
+'100,89,53,91,90,92,275,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,',
+',216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,',
+',79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,',
+',293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,',
+'93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59',
+',80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97',
+',,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40',
+',,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86',
+'78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65',
+'297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100',
+'89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,',
+'222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85',
+',71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294',
+'300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102',
+',87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,',
+',,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61',
+',,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,',
+',,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,',
+',,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82',
+',83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69',
+'70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55',
+'56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68',
+',54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94',
+'96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,',
+',,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100',
+'89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,',
+'222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85',
+',71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294',
+'300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102',
+',87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,',
+',,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61',
+',,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,',
+',,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,',
+',,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82',
+',83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69',
+'70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55',
+'56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68',
+',54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94',
+'96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,',
+',,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99',
+'98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,',
+',216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,',
+',79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,',
+',293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,',
+'93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59',
+',80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97',
+',,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40',
+',,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86',
+'78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65',
+'297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100',
+'89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,',
+'222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85',
+',71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294',
+'300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102',
+',87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,',
+',,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61',
+',,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,',
+',,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,',
+',,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82',
+',83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69',
+'70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55',
+'56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68',
+',54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94',
+'96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,',
+',,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99',
+'98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,',
+',216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,',
+',79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,',
+',293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,',
+'93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59',
+',80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97',
+',,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40',
+',,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86',
+'78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65',
+'297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100',
+'89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,',
+'222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85',
+',71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294',
+'300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102',
+',87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,',
+',,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61',
+',,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,',
+',,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,',
+',,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82',
+',83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69',
+'70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91',
+'90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55',
+'56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68',
+',54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94',
+'96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,',
+',,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99',
+'98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,',
+',216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,',
+',79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,',
+',293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,',
+'93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59',
+',80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97',
+',,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40',
+',,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86',
+'78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65',
+'297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,295,,,99,98,100',
+'89,53,91,90,92,,93,101,102,,87,88,,,301,,,,,,,,,,,,,,,,,,,,827,,,222',
+',,55,56,,,57,,,,,,,,,,,,,,,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68',
+',54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94',
+'96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,',
+',,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100',
+'89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,',
+'222,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,',
+'71,72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26',
+'95,94,96,97,,,19,,,,,,8,44,,10,99,98,100,89,53,91,90,92,,93,101,102',
+',87,88,41,42,40,231,235,240,241,242,237,239,247,248,243,244,,224,225',
+',,245,246,,39,,,32,,,55,56,,,57,,34,228,,234,43,230,229,226,227,238',
+'236,232,20,233,,,,86,78,81,82,,83,84,,,,79,85,,249,,,,374,59,,80,71',
+'72,68,,54,,,,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96',
+'97,,,19,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42',
+'40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86',
+'78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65',
+'297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100',
+'89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,',
+'222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85',
+',71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294',
+'300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,275,93,101',
+'102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,271',
+',43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80',
+'60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223',
+',,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,',
+',,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81',
+'82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298',
+'69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53',
+'91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,',
+'55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72',
+'68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95',
+'94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,275,93,101,102,,87',
+'88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,613,,271,,43',
+',,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61',
+',,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,,44',
+',,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,',
+',,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81,82,,83,84',
+',,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,',
+',28,27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101',
+'102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43',
+',,,,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,9,54,59,,80,60,61',
+',,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,8,44',
+'7,10,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,231,235,240',
+'241,242,237,239,247,248,243,244,,224,225,,,245,246,,39,,,32,,,55,56',
+',,57,,34,228,,234,43,230,229,226,227,238,236,232,20,233,,,,86,78,81',
+'82,,83,84,,,,79,85,,249,,,,374,59,,80,71,72,68,,54,,,,60,61,,,,64,,62',
+'63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100',
+'89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,',
+'222,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,',
+'71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26',
+'95,94,96,97,,,19,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87',
+'88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,',
+',20,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64',
+',62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44',
+',,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,',
+',,,,,,216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83',
+'84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70',
+',,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90',
+'92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56',
+',,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54',
+'59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96',
+'97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,275,93,101,102,,87,88,41',
+'42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,273,,,,43,,,,,,,,221',
+',,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,44,,,99',
+'98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,',
+',216,,,222,,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,',
+',79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,',
+',293,294,300,95,94,96,97,,,223,,,,,,,44,,,99,98,100,89,53,91,90,92,',
+'93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57',
+',,,,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59',
+',80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223',
+',,,,,,44,,,99,98,100,89,53,91,90,92,275,93,101,102,,87,88,41,42,40,',
+',,,,,,,,,,,,,,,,,,216,,,222,,,55,56,,,57,,273,,271,,43,,,,,,,,221,,',
+',,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63',
+'65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,,44,,,99,98,100,89',
+'53,91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216,,,222',
+',,55,56,,,57,,,,,,43,,,,,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,,71,72',
+'68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95',
+'94,96,97,,,223,,,,,,,295,,,99,98,100,341,53,91,90,342,,93,101,102,,87',
+'88,,,301,,,,,,,,,,,,,,,,,,,,343,,,222,,,55,56,,,57,,,,,,,,,,,,,,,,,',
+',86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63',
+'65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223,,,,,,,295,,,99,98',
+'100,341,53,91,90,342,,93,101,102,,87,88,,,301,,,,,,,,,,,,,,,,,348,,',
+'343,,,222,,,55,56,,,57,,,,,,,,,,,,,,,,,,,86,78,81,82,,83,84,,,,79,85',
+',71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294',
+'300,95,94,96,97,,,223,,,,,,,295,,,99,98,100,89,53,91,90,92,,93,101,102',
+',87,88,,,301,,,,,,,,,,,,,,,,,,,,291,,,287,,,55,56,,,57,,,,,,,,,,,,,',
+',,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62',
+'63,65,29,30,69,70,,,,,,28,27,26,95,94,96,97,,,223,,,,,,,44,,,99,98,100',
+'89,53,91,90,92,275,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,216',
+',,222,,,55,56,,,57,,273,,271,,43,,,,,,,,221,,,,,86,78,81,82,,83,84,',
+',,79,85,,71,72,68,,54,59,,80,60,61,,,,64,,62,63,65,297,298,69,70,,,',
+',,293,294,300,95,94,96,97,,,223,,,,,,,295,,,99,98,100,89,53,91,90,92',
+',93,101,102,,87,88,,,301,,,,,,,,,,,,,,,,,,,,291,,,287,,,55,56,,,57,',
+',,,,,,,,,,,,,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68,,54,59,,80,60',
+'61,,,,64,,62,63,65,297,298,69,70,,,,,,293,294,300,95,94,96,97,,,223',
+',,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42,40,,,,',
+',,,,,,,,,,,,,,,216,,,222,505,,55,56,,,57,,,,,,43,,,,,,,,221,,,,,86,78',
+'81,82,,83,84,,,,79,85,,71,72,68,9,54,59,,80,60,61,,,,64,,62,63,65,29',
+'30,69,70,,,,,,28,27,26,95,94,96,97,,,19,,,,,,8,44,,10,99,98,100,89,53',
+'91,90,92,,93,101,102,,87,88,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55',
+'56,,,57,,34,,,,43,,,,,,,,20,,,,,86,78,81,82,,83,84,,,,79,85,,71,72,68',
+',54,59,,80,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,95,94,96',
+'97,,,19,,,,,,,44,,,99,98,100,89,53,91,90,92,,93,101,102,,87,88,41,42',
+'40,231,235,240,241,242,237,239,247,248,243,244,,224,225,,,245,246,,216',
+',,222,,,55,56,,,57,,,228,,234,43,230,229,226,227,238,236,232,20,233',
+',,,86,78,81,82,,83,84,,,,79,85,211,249,-243,,,,59,,80,-243,-243,-243',
+',,-243,-243,-243,,-243,,,,,,,,,,-243,,,,,,,,,,-243,-243,,-243,-243,-243',
+'-243,-243,,,,,,,,,,,,-243,,,,,,,-243,-243,-243,,,-243,-243,-243,,-243',
+',,,,,-243,,,,-243,,,-243,,,,,255,-243,-243,-243,,-243,-243,-243,-243',
+'-243,,,,,,,,,,,,,,-243,,,,,,,,,-243,,,,,-243,,-243,-243,-243,-243,-243',
+'-243,-243,-243,,-243,,-243,,,,,255,-243,-243,-243,-243,,,,,,,,,-243',
+'-243,,-243,-243,-243,-243,-243,,,-243,,,,,,,,,,,,,,-243,,,,,-243,-243',
+'-243,-243,-243,-243,-243,-243,-243,-243,-243,-243,-243,-243,-243,,,-243',
+'-243,-243,,,-243,,255,-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,,264,-288,,,-288,-288,,-288,,-288,,-288,,-288,-288,-288,-288,-288',
+'-288,-288,-398,-288,,-288,,,,-398,-398,-398,,,-398,-398,-398,,-398,-288',
+'-288,,-288,,-288,,,-398,-398,-398,,,,,,,,,-398,-398,,-398,-398,-398',
+'-398,-398,,,,,,,,,,,,,,,,,,,,,,,-398,-398,-398,-398,-398,-398,-398,-398',
+'-398,-398,-398,-398,-398,-398,,,-398,-398,-398,,,-398,,255,-398,,,-398',
+'-398,,-398,,-398,,-398,,-398,-398,-398,-398,-398,-398,-398,,-398,-398',
+'-398,,,,,,,,,,,,,,-398,-398,,-398,,-398,166,177,167,190,163,183,173',
+'172,193,194,188,171,170,165,191,195,196,175,164,178,182,184,176,169',
+',,,185,192,187,186,179,189,174,162,181,180,,,,,,161,168,159,160,156',
+'157,158,118,120,117,,119,,,,,,,,151,152,,148,130,131,132,139,136,138',
+',,133,134,,,,153,154,140,141,,,,,,,,,,,,,,145,144,,129,150,147,146,142',
+'143,137,135,127,149,128,,,155,86,,,,,,,,,,,85,166,177,167,190,163,183',
+'173,172,193,194,188,171,170,165,191,195,196,175,164,178,182,184,176',
+'169,,,,185,192,187,186,179,189,174,162,181,180,,,,,,161,168,159,160',
+'156,157,158,118,120,,,119,,,,,,,,151,152,,148,130,131,132,139,136,138',
+',,133,134,,,,153,154,140,141,,,,,,,,,,,,,,145,144,,129,150,147,146,142',
+'143,137,135,127,149,128,,,155,86,,,,,,,,,,,85,166,177,167,190,163,183',
+'173,172,193,194,188,171,170,165,191,195,196,175,164,178,182,184,176',
+'169,,,,185,192,187,186,179,189,174,162,181,180,,,,,,161,168,159,160',
+'156,157,158,118,120,,,119,,,,,,,,151,152,,148,130,131,132,139,136,138',
+',,133,134,,,,153,154,140,141,,,,,,,,,,,,,,145,144,,129,150,147,146,142',
+'143,137,135,127,149,128,,,155,86,,,,,,,,,,,85,166,177,167,190,163,183',
+'173,172,193,194,188,171,170,165,191,195,196,175,164,178,182,184,176',
+'169,,,,185,192,187,186,179,189,174,162,181,180,,,,,,161,168,159,160',
+'156,157,158,118,120,,,119,,,,,,,,151,152,,148,130,131,132,139,136,138',
+',,133,134,,,,153,154,140,141,,,,,,,,,,,,,,145,144,,129,150,147,146,142',
+'143,137,135,127,149,128,,,155,86,,,,,,,,,,,85,166,177,167,190,163,183',
+'173,172,193,194,188,171,170,165,191,195,196,175,164,178,182,184,176',
+'169,,,,185,192,187,186,179,189,174,162,181,180,,,,,,161,168,159,160',
+'156,157,158,118,120,,,119,,,,,,,,151,152,,148,130,131,132,139,136,138',
+',,133,134,,,,153,154,140,141,,,,,,,,,,,,,,145,144,,129,150,147,146,142',
+'143,137,135,127,149,128,,,155,166,177,167,190,163,183,173,172,193,194',
+'188,171,170,165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187',
+'359,358,360,357,162,181,180,,,,,,161,168,159,160,354,355,356,352,120',
+'91,90,353,,93,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,',
+',153,154,140,141,,,,,,364,,,,,,,,145,144,,129,150,147,146,142,143,137',
+'135,127,149,128,679,409,155,,680,,,,,,,,151,152,,148,130,131,132,139',
+'136,138,,,133,134,,,,153,154,140,141,,,,,,255,,,,,,,,145,144,,129,150',
+'147,146,142,143,137,135,127,149,128,592,409,155,,593,,,,,,,,151,152',
+',148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,255,',
+',,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,590,402,155',
+',591,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154',
+'140,141,,,,,,255,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127',
+'149,128,939,409,155,,938,,,,,,,,151,152,,148,130,131,132,139,136,138',
+',,133,134,,,,153,154,140,141,,,,,,255,,,,,,,,145,144,,129,150,147,146',
+'142,143,137,135,127,149,128,625,409,155,,626,,,,,,,,151,152,,148,130',
+'131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,255,,,,,,,,145',
+'144,,129,150,147,146,142,143,137,135,127,149,128,622,402,155,,623,,',
+',,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141',
+',,,,,255,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128',
+'590,402,155,,591,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134',
+',,,153,154,140,141,,,,,,255,,,,,,,,145,144,,129,150,147,146,142,143',
+'137,135,127,149,128,592,409,155,,593,,,,,,,,151,152,,148,130,131,132',
+'139,136,138,,,133,134,,,,153,154,140,141,,,,,,255,,,,,,,,145,144,,129',
+'150,147,146,142,143,137,135,127,149,128,460,402,155,,461,,,,,,,,151',
+'152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,',
+',,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,460,402',
+'155,,461,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153',
+'154,140,141,,,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127',
+'149,128,405,409,155,,404,,,,,,,,151,152,,148,130,131,132,139,136,138',
+',,133,134,,,,153,154,140,141,,,,,,255,,,,,,,,145,144,,129,150,147,146',
+'142,143,137,135,127,149,128,398,402,155,,399,,,,,,,,151,152,,148,130',
+'131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,255,,,,,,,,145',
+'144,,129,150,147,146,142,143,137,135,127,149,128,460,402,155,,461,,',
+',,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141',
+',,,,,255,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128',
+'682,409,155,,683,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134',
+',,,153,154,140,141,,,,,,255,,,,,,,,145,144,,129,150,147,146,142,143',
+'137,135,127,149,128,677,402,155,,678,,,,,,,,151,152,,148,130,131,132',
+'139,136,138,,,133,134,,,,153,154,140,141,,,,,,255,,,,,,,,145,144,,129',
+'150,147,146,142,143,137,135,127,149,128,917,402,155,,918,,,,,,,,151',
+'152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,255',
+',,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,919,409',
+'155,,920,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153',
+'154,140,141,,,,,,255,,,,,,,,145,144,,129,150,147,146,142,143,137,135',
+'127,149,128,,,155,231,235,240,241,242,237,239,247,248,243,244,,224,225',
+',,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,',
+'231,235,240,241,242,237,239,247,248,243,244,,224,225,,249,245,246,,',
+',,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,,231,235,240',
+'241,242,237,239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,',
+'228,,234,,230,229,226,227,238,236,232,,233,,231,235,240,241,242,237',
+'239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230',
+'229,226,227,238,236,232,,233,,231,235,240,241,242,237,239,247,248,243',
+'244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238',
+'236,232,,233,,231,235,240,241,242,237,239,247,248,243,244,,224,225,',
+'249,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233',
+',231,235,240,241,242,237,239,247,248,243,244,,224,225,,249,245,246,',
+',,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,,231,235,240',
+'241,242,237,239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,',
+'228,,234,,230,229,226,227,238,236,232,,233,,,,,,,,,,,,,,,,,249' ]
+ racc_action_table = arr = ::Array.new(23289, 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 = [
+'89,54,54,54,54,54,54,89,89,89,54,54,89,89,89,54,89,54,54,54,54,54,54',
+'54,89,58,89,89,89,54,54,54,54,54,54,54,89,89,54,89,89,89,89,89,54,54',
+'917,54,54,54,54,54,54,54,54,54,347,54,54,54,675,54,54,54,54,54,89,89',
+'89,89,89,89,89,89,89,89,89,89,89,89,678,19,89,89,89,54,89,89,54,679',
+'89,54,54,89,89,54,89,54,89,370,89,54,89,89,89,89,89,89,89,54,89,58,89',
+'680,54,54,54,54,19,54,54,371,787,958,54,54,89,89,89,89,592,89,54,89',
+'54,89,326,592,592,592,333,334,592,592,592,617,592,788,337,524,318,617',
+'753,318,679,592,592,592,592,532,917,347,370,327,849,917,592,592,1,592',
+'592,592,592,592,675,940,918,675,680,675,525,347,371,371,371,678,347',
+'643,677,550,550,633,633,919,679,428,592,592,592,592,592,592,592,592',
+'592,592,592,592,592,592,76,343,592,592,592,343,592,592,680,76,592,544',
+'544,592,592,7,592,787,592,76,592,10,592,592,592,592,592,592,592,12,592',
+'592,592,693,428,333,334,788,693,524,326,13,788,337,524,326,592,592,592',
+'592,92,592,16,592,532,592,753,92,92,92,919,753,92,92,92,22,92,327,849',
+'550,525,633,327,849,92,525,92,92,92,940,918,25,643,677,940,918,92,92',
+'36,92,92,92,92,92,422,422,468,919,623,622,590,544,919,39,296,467,544',
+'458,773,44,773,773,773,605,773,103,92,92,92,92,92,92,92,92,92,92,92',
+'92,92,92,468,356,92,92,92,197,92,92,356,467,92,458,591,92,92,25,92,605',
+'92,590,92,216,92,92,92,92,92,92,92,854,92,854,92,218,623,622,214,25',
+'296,398,561,40,40,219,341,625,92,92,92,92,593,92,223,92,422,92,773,593',
+'593,593,296,591,593,593,593,215,593,687,308,254,623,622,687,623,622',
+'308,593,593,593,623,622,268,398,682,308,214,593,593,398,593,593,593',
+'593,593,666,666,341,625,353,360,217,561,561,341,625,353,360,269,341',
+'625,561,272,341,625,215,728,593,593,593,593,593,593,593,593,593,593',
+'593,593,593,593,341,625,593,593,593,682,593,593,746,399,593,281,682',
+'593,593,283,593,682,593,217,593,682,593,593,593,593,593,593,593,404',
+'593,38,593,284,728,285,404,404,404,682,15,37,404,404,291,404,593,593',
+'593,593,294,593,399,593,358,593,434,342,399,543,746,358,509,509,543',
+'404,404,746,404,404,404,404,404,295,38,892,746,892,892,892,38,892,642',
+'15,37,642,278,368,434,15,37,278,434,434,746,404,404,404,404,404,404',
+'404,404,404,404,404,404,404,404,342,369,404,404,404,300,404,342,352',
+'305,404,302,342,404,357,352,342,306,404,307,404,357,404,404,404,404',
+'404,404,404,405,404,367,404,310,342,573,405,405,405,368,368,368,405',
+'405,892,405,404,404,313,404,355,404,305,435,405,404,3,355,305,314,335',
+'3,369,369,369,405,405,335,405,405,405,405,405,931,931,319,335,598,573',
+'598,598,598,366,598,573,435,330,17,17,435,435,330,367,367,367,405,405',
+'405,405,405,405,405,405,405,405,405,405,405,405,354,454,405,405,405',
+'598,405,354,317,320,405,317,24,405,598,598,598,598,405,24,405,322,405',
+'405,405,405,405,405,405,331,405,405,405,454,366,366,366,454,454,454',
+'454,321,332,359,321,362,405,405,598,405,359,405,362,325,325,405,636',
+'636,636,636,636,636,117,336,877,636,636,117,117,338,636,877,636,636',
+'636,636,636,636,636,380,877,301,301,386,636,636,636,636,636,636,636',
+'388,844,636,844,844,844,391,844,636,636,394,636,636,636,636,636,636',
+'636,636,636,396,636,636,636,397,636,636,636,636,636,770,406,770,770',
+'770,535,770,884,844,884,884,884,535,884,414,424,626,844,436,636,437',
+'535,636,626,438,636,636,439,626,636,465,636,626,469,482,636,952,770',
+'952,952,952,483,952,636,884,486,770,488,636,636,636,636,493,636,636',
+'884,884,497,636,636,750,750,750,750,750,750,636,506,636,750,750,521',
+'526,952,750,527,750,750,750,750,750,750,750,558,952,952,564,570,750',
+'750,750,750,750,750,750,574,657,750,657,657,657,579,657,750,750,584',
+'750,750,750,750,750,750,750,750,750,594,750,750,750,596,750,750,750',
+'750,750,846,610,846,846,846,870,846,942,657,942,942,942,870,942,612',
+'619,683,657,621,750,624,870,750,683,627,750,750,628,683,750,631,750',
+'683,632,634,750,909,846,909,909,909,637,909,750,942,638,641,646,750',
+'750,750,750,647,750,750,942,942,648,750,750,32,32,32,32,32,32,750,655',
+'750,32,32,662,665,909,32,668,32,32,32,32,32,32,32,673,909,909,676,685',
+'32,32,32,32,32,32,32,554,554,32,690,554,554,554,417,32,32,707,32,32',
+'32,32,32,32,32,32,32,712,32,32,32,730,32,32,32,32,32,417,417,417,417',
+'417,417,417,417,417,417,417,292,417,417,345,731,417,417,292,32,732,345',
+'32,734,735,32,32,292,737,32,345,32,417,739,417,32,417,417,417,417,417',
+'417,417,32,417,741,742,745,32,32,32,32,756,32,32,761,772,290,32,32,775',
+'417,409,417,290,778,32,781,32,409,409,409,790,290,409,409,409,907,409',
+'907,907,907,794,907,453,795,798,409,409,409,409,736,799,736,736,736',
+'812,736,409,409,813,409,409,409,409,409,946,819,946,946,946,289,946',
+'827,907,833,453,834,289,835,453,453,453,453,838,907,907,289,409,409',
+'409,409,409,409,409,409,409,409,409,409,409,409,839,946,409,409,409',
+'288,841,409,843,845,409,851,288,409,409,852,409,857,409,862,409,288',
+'409,409,409,409,409,409,409,828,409,409,409,863,826,864,828,865,867',
+'871,873,826,878,879,894,828,409,409,409,409,826,409,916,409,115,115',
+'115,115,115,115,923,924,825,115,115,925,926,927,115,825,115,115,115',
+'115,115,115,115,929,825,932,933,934,115,115,115,115,115,115,115,935',
+'869,115,869,869,869,936,869,115,115,115,115,115,115,115,115,115,115',
+'115,115,937,115,115,115,938,115,115,115,115,115,930,939,930,930,930',
+'947,930,956,888,957,888,888,888,,888,,,,,115,,,115,,,115,115,,,115,893',
+'115,893,893,893,115,893,930,904,824,904,904,904,115,904,888,824,,115',
+'115,115,115,,115,115,824,888,888,115,115,545,545,545,545,545,545,115',
+'893,115,545,545,,,,545,904,545,545,545,545,545,545,545,,904,904,904',
+'904,545,545,545,545,545,545,545,,928,545,928,928,928,,928,545,545,,545',
+'545,545,545,545,545,545,545,545,,545,545,545,,545,545,545,545,545,481',
+'481,481,481,481,213,,886,928,886,886,886,213,886,,,14,45,,545,,213,545',
+'14,45,545,545,,,545,492,545,14,45,,545,810,492,810,810,810,,810,545',
+'886,,492,,545,545,545,545,,545,545,886,886,,545,545,701,701,701,701',
+'701,701,545,,545,701,701,,,810,701,,701,701,701,701,701,701,701,,810',
+'810,,,701,701,701,701,701,701,701,,,701,6,6,6,6,6,701,701,,701,701,701',
+'701,701,701,701,701,701,,701,701,701,,701,701,701,701,701,616,616,616',
+'616,616,,,,767,,767,767,767,,767,,920,,,701,,,701,920,,701,701,,920',
+'701,,701,920,,,701,,,692,,692,692,692,701,692,767,,,701,701,701,701',
+',701,701,,767,767,701,701,740,740,740,740,740,740,701,,701,740,740,',
+',,740,692,740,740,740,740,740,740,740,,692,692,692,692,740,740,740,740',
+'740,740,740,,,740,279,279,279,279,279,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,,,881,,881,881,881,740,881,,,,740',
+'740,740,740,,740,740,,,,740,740,782,782,782,782,782,782,740,,740,782',
+'782,,,,782,881,782,782,782,782,782,782,782,,881,881,881,881,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,,,807,,807,807,807,782,807,,,,782,782,782',
+'782,,782,782,,,,782,782,823,823,823,823,823,823,782,,782,823,823,,,',
+'823,807,823,823,823,823,823,823,823,,807,807,807,807,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,823,,,,,,,,,,,,,,,,,,,,823,,,823,,,823',
+'823,,,823,,823,,,,823,,,805,,805,805,805,823,805,,,,823,823,823,823',
+',823,823,,,,823,823,783,783,783,783,783,783,823,,823,783,783,,,,783',
+'805,783,783,783,783,783,783,783,,805,805,805,805,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,,,764,,764,764,764,783,764,,,,783,783,783,783,,783',
+'783,,,,783,783,222,222,222,222,222,222,783,,783,222,222,,,,222,764,222',
+'222,222,222,222,222,222,,764,764,764,764,222,222,222,222,222,222,222',
+',,222,,,,,,222,222,,222,222,222,222,222,222,222,222,222,,222,222,222',
+',222,222,222,222,222,,,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222,,222',
+',,,222,,,762,,762,762,762,222,762,,,,222,222,222,222,,222,222,,,,222',
+'222,786,786,786,786,786,786,222,,222,786,786,,,,786,762,786,786,786',
+'786,786,786,786,,762,762,762,762,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',
+',,644,,644,644,644,786,644,,,,786,786,786,786,,786,786,,,,786,786,691',
+'691,691,691,691,691,786,,786,691,691,,,,691,644,691,691,691,691,691',
+'691,691,,644,644,644,644,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,446,,,,,,,,,,,,,,,,446,446,,691,,,691,,,691,691,,,691,,691,446,',
+'446,691,446,446,446,446,,,446,691,446,,,,691,691,691,691,,691,691,,',
+',691,691,831,831,831,831,831,831,691,,691,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',
+'445,,,,,,,,,,,,,,,,445,445,,831,,,831,,,831,831,,,831,,831,445,,445',
+'831,445,445,445,445,,,445,831,445,,,,831,831,831,831,,831,831,,,,831',
+'831,523,523,523,523,523,523,831,,831,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,456',
+'456,456,456,456,456,456,456,,456,456,,,,,,456,456,,523,,,523,,,523,523',
+',,523,,523,456,,456,523,456,456,456,456,456,456,456,523,456,,,,523,523',
+'523,523,,523,523,,,,523,523,832,832,832,832,832,832,523,,523,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,452,452,452,452,452,452,452,,,452,452,,,,,,452',
+'452,,832,,,832,,,832,832,,,832,,832,452,,452,832,452,452,452,452,452',
+'452,452,832,452,,,,832,832,832,832,,832,832,,,,832,832,520,520,520,520',
+'520,520,832,,832,520,520,,,,520,,520,520,520,520,520,520,520,,,,,,520',
+'520,520,520,520,520,520,,,520,,,,,595,520,520,,520,520,520,520,520,520',
+'520,520,520,,520,520,520,,520,520,520,520,520,595,595,595,595,595,595',
+'595,595,595,595,595,,595,595,,,595,595,,520,,,520,,,520,520,,,520,,520',
+'595,,595,520,595,595,595,595,595,595,595,520,595,,,,520,520,520,520',
+',520,520,,,,520,520,,595,410,,,,520,,520,410,410,410,,,410,410,410,519',
+'410,519,519,519,,519,,,,410,410,410,410,,,,,,,,410,410,,410,410,410',
+'410,410,,,,,,,,,519,519,,,,,,,,519,519,519,519,,410,410,410,410,410',
+'410,410,410,410,410,410,410,410,410,,,410,410,410,,,410,,,410,,,410',
+'410,,410,,410,,410,,410,410,410,410,410,410,410,,410,410,410,,,,,,,',
+',,,,,,410,410,410,410,,410,,410,282,282,282,282,282,282,,,,282,282,',
+',,282,,282,282,282,282,282,282,282,,,,,,282,282,282,282,282,282,282',
+',,282,,,,,,282,282,,282,282,282,282,282,282,282,282,282,,282,282,282',
+',282,282,282,282,282,449,449,449,449,449,449,449,,,449,449,,,,,,449',
+'449,,282,,,282,,,282,282,,,282,,282,449,,449,282,449,449,449,449,449',
+'449,449,282,449,,,,282,282,282,282,,282,282,,,,282,282,895,895,895,895',
+'895,895,282,,282,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,448,448,448,448,448,448',
+'448,,,448,448,,,,,,448,448,,895,,,895,,,895,895,,,895,,895,448,,448',
+'895,448,448,448,448,448,448,448,895,448,,,,895,895,895,895,,895,895',
+',,,895,895,901,901,901,901,901,901,895,,895,901,901,,,,901,,901,901',
+'901,901,901,901,901,,,,,,901,901,901,901,901,901,901,,,901,,,,,,901',
+'901,,901,901,901,901,901,901,901,901,901,,901,901,901,,901,901,901,901',
+'901,447,,,,,,,,,,,,,,,,447,447,,901,,,901,,,901,901,,,901,,901,447,',
+'447,901,447,447,447,447,,,447,901,447,,,,901,901,901,901,,901,901,,',
+',901,901,903,903,903,903,903,903,901,,901,903,903,,,,903,,903,903,903',
+'903,903,903,903,,,,,,903,903,903,903,903,903,903,,,903,,,,,,903,903',
+',903,903,903,903,903,903,903,903,903,,903,903,903,,903,903,903,903,903',
+'451,451,451,451,451,451,451,,,451,451,,,,,,451,451,,903,,,903,,,903',
+'903,,,903,,903,451,,451,903,451,451,451,451,451,451,451,903,451,,,,903',
+'903,903,903,,903,903,,,,903,903,199,199,199,199,199,199,903,,903,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,450,450,450,450,450,450,450,,,450,450,,,,,',
+'450,450,,199,,,199,,,199,199,,,199,,199,450,,450,199,450,450,450,450',
+'450,450,450,199,450,,,,199,199,199,199,,199,199,,,,199,199,792,792,792',
+'792,792,792,199,,199,792,792,,,,792,,792,792,792,792,792,792,792,,,',
+',,792,792,792,792,792,792,792,,,792,,,,,393,792,792,,792,792,792,792',
+'792,792,792,792,792,,792,792,792,,792,792,792,792,792,393,393,393,393',
+'393,393,393,393,393,393,393,,393,393,,,393,393,,792,,,792,,,792,792',
+',,792,,792,393,,393,792,393,393,393,393,393,393,393,792,393,,,,792,792',
+'792,792,,792,792,,,,792,792,,393,53,,,,792,,792,53,53,53,,,53,53,53',
+'546,53,546,546,546,,546,,,,,53,53,53,,,,,,,,53,53,,53,53,53,53,53,,',
+',,,,,,546,546,,,,,,,,546,546,546,546,,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,608,608,608,608,608,608',
+',,,608,608,,,,608,,608,608,608,608,608,608,608,,,,,,608,608,608,608',
+'608,608,608,,,608,,,,,,608,608,,608,608,608,608,608,608,608,608,608',
+',608,608,608,,608,608,608,608,608,455,455,455,455,455,455,455,,,455',
+'455,,,,,,455,455,,608,,,608,,,608,608,,,608,,608,455,,455,608,455,455',
+'455,455,455,455,455,608,455,,,,608,608,608,608,,608,608,,,,608,608,287',
+'287,287,287,287,287,608,,608,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,432,432,432',
+'432,432,432,432,432,432,432,432,,432,432,,,432,432,,287,,,287,,,287',
+'287,,,287,,287,432,,432,287,432,432,432,432,432,432,432,287,432,,,,287',
+'287,287,287,,287,287,,,,287,287,607,607,607,607,607,607,287,,287,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,433,433,433,433,433,433,433,433,433,433,433',
+',433,433,,,433,433,,607,,,607,,,607,607,,,607,,607,433,,433,607,433',
+'433,433,433,433,433,433,607,433,,,,607,607,607,607,,607,607,,,,607,607',
+'0,0,0,0,0,0,607,,607,0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0',
+',,,,,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,444,,,,,,,,,,,,,,,,444',
+'444,,0,,,0,,,0,0,,,0,,0,444,,444,0,444,444,444,444,,,444,0,444,,,,0',
+'0,0,0,,0,0,,,,0,0,600,600,600,600,600,600,0,,0,600,600,,,,600,,600,600',
+'600,600,600,600,600,,,,,,600,600,600,600,600,600,600,,,600,,,,,,600',
+'600,,600,600,600,600,600,600,600,600,600,,600,600,600,,600,600,600,600',
+'600,443,443,443,443,443,443,443,,,443,443,,,,,,443,443,,600,,,600,,',
+'600,600,,,600,,600,443,,443,600,443,443,443,443,443,443,443,600,443',
+',,,600,600,600,600,,600,600,,,,600,600,686,686,686,686,686,686,600,',
+'600,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,440,,,,,,,,,,,,,,,,440,440,,686,,',
+'686,,,686,686,,,686,,686,440,,440,686,440,440,440,440,,,,686,,,,,686',
+'686,686,686,,686,686,,,,686,686,,20,20,20,,20,686,,686,20,20,,,,20,',
+'20,20,20,20,20,20,20,,,,,,20,20,20,20,20,20,20,,,20,,,,,,,20,,,20,20',
+'20,20,20,20,20,20,,20,20,20,,20,20,20,20,20,441,,,,,,,,,,,,,,,,441,441',
+',20,,,20,,,20,20,,,20,,,441,,441,20,441,441,441,441,,,,20,,,,,20,20',
+'20,20,,20,20,,,,20,20,,221,221,221,,221,20,,20,221,221,,,,221,,221,221',
+'221,221,221,221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,,,221',
+',,221,221,221,221,221,221,221,221,,221,221,221,,221,221,221,221,221',
+'442,,,,,,,,,,,,,,,,442,442,,221,,,221,,,221,221,,,221,,,442,,,221,442',
+'442,442,442,,,,221,,,,,221,221,221,221,,221,221,,,,221,221,,629,629',
+'629,,629,221,,221,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,,860,629,860,860,860,,860,,,,,,,,,,,,,,,629',
+',,629,,,629,629,,,629,,,,,,860,860,,,,,,,,860,860,860,860,629,629,629',
+'629,,629,629,,,,629,629,,768,768,768,,768,629,,629,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,,618,618,618,,618,768,,768,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,,255,255,255,,255,618,',
+'618,255,255,,,,255,,255,255,255,255,255,255,255,,,,,,255,255,255,255',
+'255,255,255,,,255,,,,,,,255,,,255,255,255,255,255,255,255,255,255,255',
+'255,255,,255,255,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255,,,255,255',
+',,255,,255,,255,,255,,,,,,,,255,,,,,255,255,255,255,,255,255,,,,255',
+'255,,256,256,256,,256,255,,255,256,256,,,,256,,256,256,256,256,256,256',
+'256,,,,,,256,256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256,256',
+'256,256,256,256,256,256,256,256,,256,256,256,256,256,,,,,,,,,,,,,,,',
+',,,,256,,,256,,,256,256,,,256,,256,,256,,256,,,,,,,,256,,,,,256,256',
+'256,256,,256,256,,,,256,256,,780,780,780,,780,256,,256,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,,264,264,264,,264,780,',
+'780,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,785,785,785,,785,264,,264,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,,681,681,681,,681,785,,785,681,681,,,,681,,681',
+'681,681,681,681,681,681,,,,,,681,681,681,681,681,681,681,,,681,,,,,',
+',681,,,681,681,681,681,681,681,681,681,,681,681,681,,681,681,681,681',
+'681,,,,,,,,,,,,,,,,,,,,681,,,681,,,681,681,,,681,,,,,,681,,,,,,,,681',
+',,,,681,681,681,681,,681,681,,,,681,681,,235,235,235,,235,681,,681,235',
+'235,,,,235,,235,235,235,235,235,235,235,,,,,,235,235,235,235,235,235',
+'235,,,235,,,,,,,235,,,235,235,235,235,235,235,235,235,,235,235,235,',
+'235,235,235,235,235,,,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,,,',
+',,235,,,,,,,,235,,,,,235,235,235,235,,235,235,,,,235,235,,613,613,613',
+',613,235,,235,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',
+',271,271,271,,271,613,,613,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,,802,802,802,,802,271,,271,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,,803,803,803,,803,802,,802,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,,210,210,210,,210',
+'803,,803,210,210,,,,210,,210,210,210,210,210,210,210,,,,,,210,210,210',
+'210,210,210,210,,,210,,,,,,,210,,,210,210,210,210,210,210,210,210,,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,,209,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,,273,273,273,,273,209,,209,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,,275,275,275,,275,273,,273,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,,817,817,817,,817,275,,275,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,,587,587,587,,587,817,',
+'817,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,,586,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,,208,208,208,,208,586,,586,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,,583,583,583,,583,208,,208,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,,582,582,582,,582,583,,583,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,,207,207,207',
+',207,582,,582,207,207,,,,207,,207,207,207,207,207,207,207,,,,,,207,207',
+'207,207,207,207,207,,,207,,,,,,,207,,,207,207,207,207,207,207,207,207',
+',207,207,207,,207,207,207,207,207,,,,,,,,,,,,,,,,,,,,207,,,207,,,207',
+'207,,,207,,,,,,207,,,,,,,,207,,,,,207,207,207,207,,207,207,,,,207,207',
+',280,280,280,280,280,207,,207,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,,28,28,28,,28,280,,280,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,,286,286,286,,286,29,,29,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,716,716,716,716,716,716,716,716,716,716,716,,716,716,,,716',
+'716,,286,,,286,,,286,286,,,286,,,716,,716,,716,716,716,716,716,716,716',
+',716,,,,286,286,286,286,,286,286,,,,286,286,,716,,286,,,286,,286,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,,,,578',
+'578,,577,577,577,,577,578,,578,577,577,,,,577,,577,577,577,577,577,577',
+'577,,,,,,577,577,577,577,577,577,577,,,577,,,,,,,577,,,577,577,577,577',
+'577,577,577,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,576,,576,577,,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,,576,576,576,576,576',
+',,,,,,,,,,,,,,,,,,,576,,,576,,,576,576,,,576,,,,576,,576,,,,,,,,576',
+',,,,576,576,576,576,,576,576,,,,576,576,,575,575,575,,575,576,,576,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,,206,206',
+'206,,206,575,,575,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,,572,572,572,,572,206,,206,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,,571,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,,30,30,30,,30,571,,571,30',
+'30,,,,30,,30,30,30,30,30,30,30,,,,,,30,30,30,30,30,30,30,,,30,,,,,,',
+'30,,,30,30,30,30,30,30,30,30,30,30,30,30,,30,30,30,30,30,,,,,,,,,,,',
+',,,,,,,,30,,,30,,,30,30,,,30,,30,,30,,30,,,,,,,,30,,,,,30,30,30,30,',
+'30,30,,,,30,30,,205,205,205,,205,30,,30,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,,33,33,33,,33,205,,205,33,33,,,,33,,33,33',
+'33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33',
+'33,33,33,33,,33,33,33,,33,33,,,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33',
+',,33,,33,,,,,,,,,,,,,,,,,33,33,33,33,,33,33,,,,33,33,,542,542,542,,542',
+'33,,33,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,,34',
+'34,34,,34,542,,542,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34',
+'34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,,34,34,34,,34,34,,',
+'34,714,714,714,714,714,714,714,714,714,714,714,,714,714,,,714,714,,34',
+',,34,,,34,34,,,34,,,714,,714,,714,714,714,714,714,714,714,,714,,,,34',
+'34,34,34,,34,34,,,,34,34,,714,,34,,,34,,34,539,539,539,,539,,,,539,539',
+',,,539,,539,539,539,539,539,539,539,,,,,,539,539,539,539,539,539,539',
+',,539,,,,,,,539,,,539,539,539,539,539,539,539,539,539,539,539,539,,539',
+'539,539,539,539,,,,,,,,,,,,,,,,,,,,539,,,539,,,539,539,,,539,,539,,539',
+',539,,,,,,,,539,,,,,539,539,539,539,,539,539,,,,539,539,,874,874,874',
+',874,539,,539,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,874,,874,874',
+',,,874,874,,65,65,65,,65,874,,874,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,,528,528,528,,528,65,,65,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,,202,202,202',
+',202,528,,528,202,202,,,,202,,202,202,202,202,202,202,202,,,,,,202,202',
+'202,202,202,202,202,,,202,,,,,,,202,,,202,202,202,202,202,202,202,202',
+'202,202,202,202,,202,202,202,202,202,,,,,,,,,,,,,,,,,,,,202,,,202,,',
+'202,202,,,202,,202,,202,,202,,,,,,,,202,,,,,202,202,202,202,,202,202',
+',,,202,202,,5,5,5,5,5,202,,202,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5',
+'5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,,,,,',
+',,,,,,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,5,,,,,5,5,5,5,,5,5,,,,5,5,,303',
+'303,303,,303,5,,5,303,303,,,,303,,303,303,303,303,303,303,303,,,,,,303',
+'303,303,303,303,303,303,,,303,,,,,,,303,,,303,303,303,303,303,303,303',
+'303,,303,303,303,,303,303,,,303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303',
+',,303,,,,,,,,,,,,,,,,,,,303,303,303,303,,303,303,,,,303,303,,201,201',
+'201,,201,303,,303,201,201,,,,201,,201,201,201,201,201,201,201,,,,,,201',
+'201,201,201,201,201,201,,,201,,,,,,,201,,,201,201,201,201,201,201,201',
+'201,,201,201,201,,201,201,201,201,201,,,,,,,,,,,,,,,,,,,,201,,,201,',
+',201,201,,,201,,,,,,201,,,,,,,,201,,,,,201,201,201,201,,201,201,,,,201',
+'201,,200,200,200,,200,201,,201,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,,514,514,514,,514,200,,200,514,514,,,,514,,514,514',
+'514,514,514,514,514,,,,,,514,514,514,514,514,514,514,,,514,,,,,,,514',
+',,514,514,514,514,514,514,514,514,514,514,514,514,,514,514,514,514,514',
+',,,,,,,,,,,,,,,,,,,514,,,514,,,514,514,,,514,,,,,,514,,,,,,,,514,,,',
+',514,514,514,514,,514,514,,,,514,514,,511,511,511,,511,514,,514,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,,507,507,507',
+',507,511,,511,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,,505,505,505,,505,507,,507,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,,501,501,501,,501,505,,505,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,,500,500,500,,500,501,,501,500',
+'500,,,,500,,500,500,500,500,500,500,500,,,,,,500,500,500,500,500,500',
+'500,,,500,,,,,,,500,,,500,500,500,500,500,500,500,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',
+',529,529,529,,529,499,,499,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,,64,64,64,,64,529,,529,64,64,,,,64,,64,64,64',
+'64,64,64,64,,,,,,64,64,64,64,64,64,64,,,64,,,,,,,64,,,64,64,64,64,64',
+'64,64,64,,64,64,64,,64,64,64,64,64,721,721,721,721,721,721,721,721,721',
+'721,721,,721,721,,,721,721,,64,,,64,,,64,64,,,64,,,721,,721,64,721,721',
+'721,721,721,721,721,64,721,,,,64,64,64,64,,64,64,,,,64,64,64,721,,,',
+'64,64,,64,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,,364,364,364,,364,61,,61,364,364',
+',,,364,,364,364,364,364,364,364,364,,,,,,364,364,364,364,364,364,364',
+',,364,,,,,,,364,,,364,364,364,364,364,364,364,364,,364,364,364,,364',
+'364,364,364,364,,,,,,,,,,,,,,,,,,,,364,,,364,,,364,364,,,364,,,,,,364',
+',,,,,,,364,,,,,364,364,364,364,,364,364,,,,364,364,,390,390,390,,390',
+'364,,364,390,390,,,,390,,390,390,390,390,390,390,390,,,,,,390,390,390',
+'390,390,390,390,,,390,,,,,,,390,,,390,390,390,390,390,390,390,390,,390',
+'390,390,,390,390,390,390,390,,,,,,,,,,,,,,,,,,,,390,,,390,,,390,390',
+',,390,,,,,,390,,,,,,,,390,,,,,390,390,390,390,,390,390,,,,390,390,,60',
+'60,60,,60,390,,390,60,60,,,,60,,60,60,60,60,60,60,60,,,,,,60,60,60,60',
+'60,60,60,,,60,,,,,,,60,,,60,60,60,60,60,60,60,60,,60,60,60,,60,60,60',
+'60,60,,,,,,,,,,,,,,,,,,,,60,,,60,,,60,60,,,60,,,,,,60,,,,,,,,60,,,,',
+'60,60,60,60,,60,60,,,,60,60,,57,57,57,,57,60,,60,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,,234,234',
+'234,,234,57,,57,234,234,,,,234,,234,234,234,234,234,234,234,,,,,,234',
+'234,234,234,234,234,234,,,234,,,,,,,234,,,234,234,234,234,234,234,234',
+'234,,234,234,234,,234,234,234,234,234,,,,,,,,,,,,,,,,,,,,234,,,234,',
+',234,234,,,234,,,,,,234,,,,,,,,234,,,,,234,234,234,234,,234,234,,,,234',
+'234,,237,237,237,,237,234,,234,237,237,,,,237,,237,237,237,237,237,237',
+'237,,,,,,237,237,237,237,237,237,237,,,237,,,,,,,237,,,237,237,237,237',
+'237,237,237,237,,237,237,237,,237,237,237,237,237,,,,,,,,,,,,,,,,,,',
+',237,,,237,,,237,237,,,237,,,,,,237,,,,,,,,237,,,,,237,237,237,237,',
+'237,237,,,,237,237,,233,233,233,,233,237,,237,233,233,,,,233,,233,233',
+'233,233,233,233,233,,,,,,233,233,233,233,233,233,233,,,233,,,,,,,233',
+',,233,233,233,233,233,233,233,233,,233,233,233,,233,233,233,233,233',
+',,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233,,,,,,233,,,,,,,,233,,,',
+',233,233,233,233,,233,233,,,,233,233,,232,232,232,,232,233,,233,232',
+'232,,,,232,,232,232,232,232,232,232,232,,,,,,232,232,232,232,232,232',
+'232,,,232,,,,,,,232,,,232,232,232,232,232,232,232,232,,232,232,232,',
+'232,232,232,232,232,,,,,,,,,,,,,,,,,,,,232,,,232,,,232,232,,,232,,,',
+',,232,,,,,,,,232,,,,,232,232,232,232,,232,232,,,,232,232,,238,238,238',
+',238,232,,232,238,238,,,,238,,238,238,238,238,238,238,238,,,,,,238,238',
+'238,238,238,238,238,,,238,,,,,,,238,,,238,238,238,238,238,238,238,238',
+',238,238,238,,238,238,238,238,238,,,,,,,,,,,,,,,,,,,,238,,,238,,,238',
+'238,,,238,,,,,,238,,,,,,,,238,,,,,238,238,238,238,,238,238,,,,238,238',
+',708,708,708,,708,238,,238,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,,231,231,231,,231,708,,708,231,231,,,,231,,231,231,231,231',
+'231,231,231,,,,,,231,231,231,231,231,231,231,,,231,,,,,,,231,,,231,231',
+'231,231,231,231,231,231,,231,231,231,,231,231,231,231,231,,,,,,,,,,',
+',,,,,,,,,231,,,231,,,231,231,,,231,,,,,,231,,,,,,,,231,,,,,231,231,231',
+'231,,231,231,,,,231,231,,710,710,710,,710,231,,231,710,710,,,,710,,710',
+'710,710,710,710,710,710,,,,,,710,710,710,710,710,710,710,,,710,,,,,',
+',710,,,710,710,710,710,710,710,710,710,,710,710,710,,710,710,710,710',
+'710,,,,,,,,,,,,,,,,,,,,710,,,710,,,710,710,,,710,,,,,,710,,,,,,,,710',
+',,,,710,710,710,710,,710,710,,,,710,710,,239,239,239,,239,710,,710,239',
+'239,,,,239,,239,239,239,239,239,239,239,,,,,,239,239,239,239,239,239',
+'239,,,239,,,,,,,239,,,239,239,239,239,239,239,239,239,,239,239,239,',
+'239,239,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239,,,239,239,,,239,,,',
+',,239,,,,,,,,239,,,,,239,239,239,239,,239,239,,,,239,239,,230,230,230',
+',230,239,,239,230,230,,,,230,,230,230,230,230,230,230,230,,,,,,230,230',
+'230,230,230,230,230,,,230,,,,,,,230,,,230,230,230,230,230,230,230,230',
+',230,230,230,,230,230,230,230,230,,,,,,,,,,,,,,,,,,,,230,,,230,,,230',
+'230,,,230,,,,,,230,,,,,,,,230,,,,,230,230,230,230,,230,230,,,,230,230',
+',229,229,229,,229,230,,230,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,,228,228,228,,228,229,,229,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,,227,227,227,,227,228,,228,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,,226,226,226,,226,227,,227,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,,724,724,724',
+',724,226,,226,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',
+',725,725,725,,725,724,,724,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,,726,726,726,,726,725,,725,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,,727,727,727,,727,726,,726,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,,225,225,225,,225,727,,727,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,,729,729,729',
+',729,225,,225,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',
+',240,240,240,,240,729,,729,240,240,,,,240,,240,240,240,240,240,240,240',
+',,,,,240,240,240,240,240,240,240,,,240,,,,,,,240,,,240,240,240,240,240',
+'240,240,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',
+',224,224,224,,224,244,,244,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,,245,245,245,,245,224,,224,245,245,,,,245,,245,245,245,245',
+'245,245,245,,,,,,245,245,245,245,245,245,245,,,245,,,,,,,245,,,245,245',
+'245,245,245,245,245,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,,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',
+',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,,754,754,754,,754,249,,249,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,,41,41,41,,41,754,,754,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,,112,112,112,,112,41',
+',41,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,,480,480',
+'480,480,480,112,,112,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,719,719,719,719,719',
+'719,719,719,719,719,719,,719,719,,,719,719,,480,,,480,,,480,480,,,480',
+',480,719,,719,480,719,719,719,719,719,719,719,480,719,,,,480,480,480',
+'480,,480,480,,,,480,480,,719,,,,480,480,,480,315,315,315,,315,,,,315',
+'315,,,,315,,315,315,315,315,315,315,315,,,,,,315,315,315,315,315,315',
+'315,,,315,,,,,,,315,,,315,315,315,315,315,315,315,315,,315,315,315,',
+'315,315,315,315,315,,,,,,,,,,,,,,,,,,,,315,,,315,,,315,315,,,315,,,',
+',,315,,,,,,,,315,,,,,315,315,315,315,,315,315,,,,315,315,,476,476,476',
+',476,315,,315,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',
+',474,474,474,,474,476,,476,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,,42,42,42,,42,474,,474,42,42,,,,42,,42,42,42,42',
+'42,42,42,,,,,,42,42,42,42,42,42,42,,,42,,,,,,,42,,,42,42,42,42,42,42',
+'42,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,,472,472,472,,472,43,,43,472,472,,,,472,,472,472',
+'472,472,472,472,472,,,,,,472,472,472,472,472,472,472,,,472,,,,,,,472',
+',,472,472,472,472,472,472,472,472,472,472,472,472,,472,472,472,472,472',
+',,,,,,,,,,,,,,,,,,,472,,,472,,,472,472,,,472,,472,,472,,472,,,,,,,,472',
+',,,,472,472,472,472,,472,472,,,,472,472,,111,111,111,,111,472,,472,111',
+'111,,,,111,,111,111,111,111,111,111,111,,,,,,111,111,111,111,111,111',
+'111,,,111,,,,,,,111,,,111,111,111,111,111,111,111,111,,111,111,111,',
+'111,111,111,111,111,,,,,,,,,,,,,,,,,,,,111,,,111,,,111,111,,,111,,,',
+',,111,,,,,,,,111,,,,,111,111,111,111,,111,111,,,,111,111,,110,110,110',
+',110,111,,111,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',
+',105,105,105,105,105,110,,110,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,709,709',
+'709,709,709,709,709,709,709,709,709,,709,709,,,709,709,,105,,,105,,',
+'105,105,,,105,,105,709,,709,105,709,709,709,709,709,709,709,105,709',
+',,,105,105,105,105,,105,105,,,,105,105,,709,,,,105,105,,105,328,328',
+'328,,328,,,,328,328,,,,328,,328,328,328,328,328,328,328,,,,,,328,328',
+'328,328,328,328,328,,,328,,,,,,,328,,,328,328,328,328,328,328,328,328',
+',328,328,328,,328,328,328,328,328,,,,,,,,,,,,,,,,,,,,328,,,328,,,328',
+'328,,,328,,,,,,328,,,,,,,,328,,,,,328,328,328,328,,328,328,,,,328,328',
+',329,329,329,,329,328,,328,329,329,,,,329,,329,329,329,329,329,329,329',
+',,,,,329,329,329,329,329,329,329,,,329,,,,,,,329,,,329,329,329,329,329',
+'329,329,329,,329,329,329,,329,329,329,329,329,,,,,,,,,,,,,,,,,,,,329',
+',,329,,,329,329,,,329,,,,,,329,,,,,,,,329,,,,,329,329,329,329,,329,329',
+',,,329,329,,236,236,236,,236,329,,329,236,236,,,,236,,236,236,236,236',
+'236,236,236,,,,,,236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236',
+'236,236,236,236,236,236,,236,236,236,,236,236,236,236,236,,,,,,,,,,',
+',,,,,,,,,236,,,236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236',
+'236,,236,236,,,,236,236,,431,431,431,,431,236,,236,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,,56,56,56,,56,431,,431,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,,430,430,430,,430,56,,56,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,,429,429,429,,429,430,,430,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,,427,427,427,,427,429,,429,427',
+'427,,,,427,,427,427,427,427,427,427,427,,,,,,427,427,427,427,427,427',
+'427,,,427,,,,,,,427,,,427,427,427,427,427,427,427,427,427,427,427,427',
+',427,427,427,427,427,,,,,,,,,,,,,,,,,,,,427,,,427,,,427,427,,,427,,427',
+',427,,427,,,,,,,,427,,,,,427,427,427,427,,427,427,,,,427,427,,348,348',
+'348,,348,427,,427,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,348,348,,348,348,,,,348',
+'348,,67,67,67,,67,348,,348,67,67,,,,67,,67,67,67,67,67,67,67,,,,,,67',
+'67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67,67',
+',67,67,,,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,,,,,,,,,,,',
+',,67,67,67,67,,67,67,,,,67,67,,66,66,66,,66,67,,67,66,66,,,,66,,66,66',
+'66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66,66,66',
+'66,66,66,66,,66,66,66,,66,66,,,66,,,,,,,,,,,,,,,,,66,,,66,,,66,,,66',
+'66,,,66,,,,,,,,,,,,,,,,,,,66,66,66,66,,66,66,,,,66,66,,496,496,496,',
+'496,66,,66,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,,489,489',
+'489,,489,496,,496,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,,487,487,487,,487,489,,489,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,,312,312,312,,312,487,,487,312,312,,,,312,,312,312,312',
+'312,312,312,312,,,,,,312,312,312,312,312,312,312,,,312,,,,,,,312,,,312',
+'312,312,312,312,312,312,312,,312,312,312,,312,312,312,312,312,,,,,,',
+',,,,,,,,,,,,,312,,,312,312,,312,312,,,312,,,,,,312,,,,,,,,312,,,,,312',
+'312,312,312,,312,312,,,,312,312,,114,114,114,114,114,312,,312,114,114',
+',,,114,,114,114,114,114,114,114,114,,,,,,114,114,114,114,114,114,114',
+',,114,,,,,,114,114,,114,114,114,114,114,114,114,114,114,,114,114,114',
+',114,114,114,114,114,,,,,,,,,,,,,,,,,,,,114,,,114,,,114,114,,,114,,114',
+',,,114,,,,,,,,114,,,,,114,114,114,114,,114,114,,,,114,114,,113,113,113',
+',113,114,,114,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,457,457,457,457,457,457,457,457,457',
+'457,457,,457,457,,,457,457,,113,,,113,,,113,113,,,113,,,457,,457,113',
+'457,457,457,457,457,457,457,113,457,,,,113,113,113,113,,113,113,,,,113',
+'113,457,457,462,,,,113,,113,462,462,462,,,462,462,462,,462,,,,,,,,,',
+'462,,,,,,,,,,462,462,,462,462,462,462,462,,,,,,,,,,,,459,,,,,,,459,459',
+'459,,,459,459,459,,459,,,,,,462,,,,459,,,462,,,,,462,462,459,459,,459',
+'459,459,459,459,,,,,,,,,,,,,,462,,,,,,,,,400,,,,,462,,400,400,400,462',
+'459,400,400,400,,400,,459,,,,,459,459,400,400,400,,,,,,,,,400,400,,400',
+'400,400,400,400,,,459,,,,,,,,,,,,,,459,,,,,459,400,400,400,400,400,400',
+'400,400,400,400,400,400,400,400,,,400,400,400,,,400,,400,400,,,400,400',
+',400,,400,,400,,400,400,400,400,400,400,400,27,400,400,400,,,,27,27',
+'27,,,27,27,27,,27,400,400,,400,,400,,,,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,26',
+'27,,27,,,,26,26,26,,,26,26,26,,26,27,27,,27,,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,,26,26,,,26,26,,26,,26,,26,,26,26,26',
+'26,26,26,26,,26,26,26,,,,,,,,,,,,,,26,26,,26,,26,8,8,8,8,8,8,8,8,8,8',
+'8,8,8,8,8,8,8,8,8,8,8,8,8,8,,,,8,8,8,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8',
+'8,8,8,8,,8,,,,,,,,8,8,,8,8,8,8,8,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,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,,,,,,,,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,381,381,381,381,381,381,381',
+'381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381',
+',,,381,381,381,381,381,381,381,381,381,381,,,,,,381,381,381,381,381',
+'381,381,381,381,,,381,,,,,,,,381,381,,381,381,381,381,381,381,381,,',
+'381,381,,,,381,381,381,381,,,,,,,,,,,,,,381,381,,381,381,381,381,381',
+'381,381,381,381,381,381,,,381,381,,,,,,,,,,,381,694,694,694,694,694',
+'694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694',
+'694,694,,,,694,694,694,694,694,694,694,694,694,694,,,,,,694,694,694',
+'694,694,694,694,694,694,,,694,,,,,,,,694,694,,694,694,694,694,694,694',
+'694,,,694,694,,,,694,694,694,694,,,,,,,,,,,,,,694,694,,694,694,694,694',
+'694,694,694,694,694,694,694,,,694,68,68,68,68,68,68,68,68,68,68,68,68',
+'68,68,68,68,68,68,68,68,68,68,68,68,,,,68,68,68,68,68,68,68,68,68,68',
+',,,,,68,68,68,68,68,68,68,68,68,68,68,68,,68,,,,,,68,68,,68,68,68,68',
+'68,68,68,,,68,68,,,,68,68,68,68,,,,,,68,,,,,,,,68,68,,68,68,68,68,68',
+'68,68,68,68,68,68,531,531,68,,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,503,503,531,,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,502,502,503',
+',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,913,913,502,,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,491,491,913,,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,490,490,491,,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',
+'425,425,490,,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,426,426,425,,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,252,252,426,,252,,,,,,,,252',
+'252,,252,252,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',
+'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,204,204,253,,204,,,,,,,,204,204,,204,204,204,204,204,204,204',
+',,204,204,,,,204,204,204,204,,,,,,204,,,,,,,,204,204,,204,204,204,204',
+'204,204,204,204,204,204,204,203,203,204,,203,,,,,,,,203,203,,203,203',
+'203,203,203,203,203,,,203,203,,,,203,203,203,203,,,,,,203,,,,,,,,203',
+'203,,203,203,203,203,203,203,203,203,203,203,203,538,538,203,,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',
+'537,537,538,,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,530,530,537,,530,,,,,,,,530,530,,530,530,530,530',
+'530,530,530,,,530,530,,,,530,530,530,530,,,,,,530,,,,,,,,530,530,,530',
+'530,530,530,530,530,530,530,530,530,530,875,875,530,,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,876,876',
+'875,,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,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,',
+'266,266,266,266,266,266,266,266,266,266,266,,266,266,,504,266,266,,',
+',,,,,,,,,,,,266,,266,,266,266,266,266,266,266,266,,266,,801,801,801',
+'801,801,801,801,801,801,801,801,,801,801,,266,801,801,,,,,,,,,,,,,,',
+'801,,801,,801,801,801,801,801,801,801,,801,,21,21,21,21,21,21,21,21',
+'21,21,21,,21,21,,801,21,21,,,,,,,,,,,,,,,21,,21,,21,21,21,21,21,21,21',
+',21,,804,804,804,804,804,804,804,804,804,804,804,,804,804,,21,804,804',
+',,,,,,,,,,,,,,804,,804,,804,804,804,804,804,804,804,,804,,630,630,630',
+'630,630,630,630,630,630,630,630,,630,630,,804,630,630,,,,,,,,,,,,,,',
+'630,,630,,630,630,630,630,630,630,630,,630,,723,723,723,723,723,723',
+'723,723,723,723,723,,723,723,,630,723,723,,,,,,,,,,,,,,,723,,723,,723',
+'723,723,723,723,723,723,,723,,412,412,412,412,412,412,412,412,412,412',
+'412,,412,412,,723,412,412,,,,,,,,,,,,,,,412,,412,,412,412,412,412,412',
+'412,412,,412,,,,,,,,,,,,,,,,,412' ]
+ racc_action_check = arr = ::Array.new(23289, 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 = [
+ 4401, 168, nil, 509, nil, 10792, 1504, 114, 21163, 21287,
+ 120, nil, 104, 165, 1384, 424, 127, 630, nil, -8,
+ 4776, 22977, 248, nil, 623, 266, 21033, 20924, 8276, 8401,
+ 9534, nil, 993, 9784, 10034, nil, 169, 425, 415, 258,
+ 320, 17050, 17808, 17933, 193, 1385, nil, nil, nil, nil,
+ nil, nil, nil, 3893, 0, nil, 19066, 12925, 0, nil,
+ 12800, 12425, nil, nil, 12292, 10417, 19816, 19691, 21771, nil,
+ nil, nil, nil, nil, nil, nil, 95, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 0,
+ nil, nil, 260, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 325, nil, 18433, nil, nil, nil, nil,
+ 18308, 18183, 17175, 20566, 20441, 1254, nil, 697, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 216, nil, 3640,
+ 11167, 11042, 10667, 22491, 22431, 9659, 9159, 8026, 7651, 6901,
+ 6776, nil, nil, 1373, 290, 319, 306, 354, 238, 297,
+ nil, 4901, 2129, 303, 16175, 15300, 14675, 14550, 14425, 14300,
+ 14175, 13800, 13425, 13300, 13050, 6151, 18816, 13175, 13550, 14050,
+ 15550, 15675, 15800, 15925, 16050, 16300, 16425, 16550, 16675, 16800,
+ nil, nil, 22311, 22371, 313, 5401, 5526, nil, nil, nil,
+ nil, nil, nil, nil, 5776, nil, 22885, nil, 292, 318,
+ nil, 6401, 364, 7026, nil, 7151, nil, nil, 430, 1629,
+ 8151, 346, 3140, 359, 413, 376, 8526, 4151, 1129, 1093,
+ 1039, 459, 993, nil, 431, 417, 289, nil, nil, nil,
+ 495, 708, 461, 10917, nil, 502, 530, 532, 331, nil,
+ 546, nil, 20316, 620, 629, 17433, nil, 570, 24, 560,
+ 585, 603, 622, nil, nil, 705, 124, 151, 18566, 18691,
+ 539, 701, 599, 116, 117, 562, 696, 124, 733, nil,
+ nil, 359, 502, 160, nil, 996, nil, 55, 19566, nil,
+ nil, nil, 510, 361, 611, 552, 264, 516, 447, 654,
+ 362, nil, 656, nil, 12550, nil, 601, 550, 497, 520,
+ 39, 61, nil, nil, nil, nil, nil, nil, nil, nil,
+ 655, 21535, nil, nil, nil, nil, 659, nil, 650, nil,
+ 12675, 656, nil, 3765, 663, nil, 670, 674, 293, 393,
+ 20815, nil, nil, nil, 499, 608, 721, nil, nil, 1121,
+ 3007, nil, 23161, nil, 688, nil, nil, 993, nil, nil,
+ nil, nil, 268, nil, 734, 22191, 22251, 19441, 109, 19316,
+ 19191, 18941, 4151, 4276, 460, 566, 761, 763, 767, 770,
+ 4651, 4776, 4901, 4526, 4401, 2504, 2379, 3390, 3265, 3140,
+ 3640, 3515, 2754, 1077, 623, 4026, 2629, 20566, 243, 20749,
+ nil, nil, 20694, nil, nil, 713, nil, 241, 232, 716,
+ nil, nil, 18058, nil, 17683, nil, 17558, nil, nil, nil,
+ 17300, 1406, 717, 721, nil, nil, 725, 20191, 730, 20066,
+ 22131, 22071, 1398, 772, nil, nil, 19941, 737, nil, 12042,
+ 11917, 11792, 21951, 21891, 22839, 11667, 862, 11542, nil, 496,
+ nil, 11417, nil, nil, 11292, nil, nil, nil, nil, 2971,
+ 2879, 868, nil, 2629, 123, 154, 865, 875, 10542, 12167,
+ 22671, 21831, 135, nil, nil, 737, nil, 22611, 22551, 10167,
+ nil, nil, 9909, 403, 185, 1379, 3857, nil, nil, nil,
+ 153, nil, nil, nil, 976, nil, nil, nil, 774, nil,
+ nil, 320, nil, nil, 765, nil, nil, nil, 21411, nil,
+ 767, 9409, 9284, 528, 810, 9034, 8909, 8784, 8659, 814,
+ nil, nil, 7901, 7776, 818, nil, 7526, 7401, nil, nil,
+ 224, 266, 130, 390, 798, 2879, 800, nil, 605, nil,
+ 4526, nil, nil, nil, nil, 249, nil, 4276, 4026, nil,
+ 806, nil, 861, 6276, nil, nil, 1531, 16, 5276, 820,
+ nil, 826, 285, 284, 865, 360, 748, 869, 832, 5026,
+ 23069, 898, 901, 155, 960, nil, 743, 846, 892, nil,
+ nil, 854, 426, 159, 2307, nil, 852, 857, 862, nil,
+ nil, nil, nil, nil, nil, 866, nil, 854, nil, nil,
+ nil, nil, 954, nil, nil, 955, 421, nil, 995, nil,
+ nil, nil, nil, 1008, nil, 48, 894, 164, 56, 65,
+ 89, 6026, 398, 873, nil, 895, 4651, 281, nil, nil,
+ 1023, 2379, 1557, 117, 21659, nil, nil, nil, nil, nil,
+ nil, 1504, nil, nil, nil, nil, nil, 910, 13675, 18433,
+ 13925, nil, 920, nil, 10034, nil, 8526, nil, nil, 17300,
+ nil, 12292, nil, 23115, 14800, 14925, 15050, 15175, 369, 15425,
+ 924, 945, 950, nil, 974, 952, 1099, 952, nil, 1083,
+ 1629, 992, 1096, nil, nil, 977, 453, nil, nil, nil,
+ 868, nil, nil, 140, 16925, nil, 1021, nil, nil, nil,
+ nil, 983, 2182, nil, 2057, nil, nil, 1527, 5151, nil,
+ 758, nil, 986, 267, nil, 993, nil, nil, 1115, nil,
+ 5651, 1117, 1754, 2004, nil, 5901, 2254, 98, 121, nil,
+ 1122, nil, 3765, nil, 1132, 1018, nil, nil, 1033, 1022,
+ nil, 22931, 6526, 6651, 23023, 1932, nil, 1807, nil, nil,
+ 1430, nil, 1047, 1030, nil, nil, nil, 7276, nil, 1054,
+ nil, nil, nil, 1879, 1282, 1186, 1158, 1117, 1153, nil,
+ nil, 2504, 2754, 1048, 1047, 1049, nil, nil, 1054, 1072,
+ nil, 1078, nil, 1083, 729, 1081, 883, nil, nil, 152,
+ nil, 1203, 1207, nil, 355, nil, nil, 1209, nil, nil,
+ 5039, nil, 1091, 1105, 1107, 1109, nil, 1110, nil, 1240,
+ 862, 1185, nil, 1234, 10292, 22731, 22791, 675, 1131, 1235,
+ nil, 1682, nil, nil, 765, nil, 1401, nil, 1277, nil,
+ nil, nil, 494, 1299, 1116, 3265, nil, nil, nil, nil,
+ nil, 3390, nil, 3515, 1307, nil, nil, 1085, nil, 919,
+ nil, nil, nil, 22011, nil, nil, 1127, 34, 164, 181,
+ 1509, nil, nil, 1132, 1133, 1137, 1138, 1139, 1365, 1149,
+ 1269, 639, 1271, 1272, 1153, 1161, 1167, 1181, 1225, 1232,
+ 163, nil, 890, nil, nil, nil, 1114, 1196, nil, nil,
+ nil, nil, 794, nil, nil, nil, 1198, 1200, -6, nil,
+ nil ]
+
+racc_action_default = [
+ -3, -552, -1, -538, -4, -552, -7, -552, -552, -552,
+ -552, -27, -552, -552, -552, -274, -552, -39, -42, -540,
+ -552, -47, -49, -50, -51, -255, -255, -255, -285, -321,
+ -322, -67, -11, -71, -79, -81, -552, -467, -468, -552,
+ -552, -552, -552, -552, -540, -236, -267, -268, -269, -270,
+ -271, -272, -273, -528, -11, -277, -551, -520, -293, -295,
+ -552, -552, -299, -302, -538, -552, -552, -552, -552, -323,
+ -324, -326, -327, -416, -417, -418, -419, -420, -435, -423,
+ -424, -437, -439, -428, -433, -449, -437, -451, -452, -526,
+ -456, -457, -527, -459, -460, -461, -462, -463, -464, -465,
+ -466, -471, -472, -552, -2, -539, -547, -548, -549, -6,
+ -552, -552, -552, -552, -552, -3, -15, -552, -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,
+ -552, -552, -245, -552, -552, -552, -552, -552, -552, -552,
+ -540, -541, -46, -552, -467, -468, -552, -274, -552, -552,
+ -228, -552, -11, -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,
+ -386, -388, -552, -552, -56, -245, -552, -292, -391, -400,
+ -402, -62, -397, -63, -540, -64, -237, -250, -259, -259,
+ -254, -552, -260, -552, -522, -552, -65, -66, -538, -12,
+ -552, -69, -11, -540, -552, -72, -75, -11, -87, -88,
+ -552, -552, -95, -285, -288, -540, -552, -321, -322, -325,
+ -398, -552, -77, -552, -83, -282, -453, -454, -552, -213,
+ -214, -229, -552, -408, -552, -552, -238, -544, -544, -552,
+ -552, -544, -552, -294, -378, -48, -552, -552, -552, -552,
+ -538, -552, -539, -467, -468, -552, -552, -274, -552, -337,
+ -338, -105, -106, -552, -108, -552, -274, -552, -552, -467,
+ -468, -314, -110, -111, -151, -152, -153, -169, -174, -181,
+ -184, -316, -552, -518, -552, -421, -552, -552, -552, -552,
+ -552, -552, 961, -5, -550, -21, -22, -23, -24, -25,
+ -552, -552, -17, -18, -19, -120, -552, -28, -37, -38,
+ -552, -552, -29, -194, -540, -246, -259, -259, -529, -530,
+ -255, -395, -531, -532, -530, -529, -255, -394, -396, -531,
+ -532, -35, -202, -36, -552, -40, -41, -192, -260, -43,
+ -44, -45, -540, -291, -552, -552, -552, -245, -282, -552,
+ -552, -552, -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, -540, -367, -255,
+ -529, -530, -255, -54, -57, -540, -256, -367, -367, -540,
+ -287, -251, -552, -252, -552, -257, -552, -261, -525, -10,
+ -539, -14, -540, -68, -280, -84, -73, -552, -540, -245,
+ -552, -552, -94, -552, -453, -454, -552, -80, -85, -552,
+ -552, -552, -552, -552, -234, -552, -551, -551, -276, -278,
+ -239, -546, -545, -241, -546, -283, -284, -521, -296, -492,
+ -11, -328, -329, -11, -552, -552, -552, -552, -552, -245,
+ -552, -552, -282, -307, -105, -106, -107, -552, -552, -245,
+ -310, -473, -552, -552, -552, -11, -492, -318, -536, -537,
+ -540, -422, -436, -441, -552, -443, -425, -438, -552, -440,
+ -427, -552, -430, -432, -552, -450, -8, -16, -552, -26,
+ -266, -552, -552, -399, -552, -247, -249, -552, -552, -58,
+ -244, -392, -552, -552, -60, -393, -552, -552, -290, -542,
+ -529, -530, -529, -530, -540, -192, -552, -368, -372, -370,
+ -11, -52, -389, -53, -390, -367, -242, -11, -11, -286,
+ -259, -258, -262, -552, -523, -524, -13, -70, -552, -76,
+ -82, -540, -529, -530, -243, -91, -93, -552, -78, -552,
+ -201, -211, -212, -540, -551, -335, -11, -409, -551, -410,
+ -411, -540, -544, -552, -492, -381, -517, -517, -517, -491,
+ -493, -494, -495, -496, -497, -498, -499, -552, -501, -507,
+ -509, -510, -512, -513, -514, -552, -551, -330, -551, -300,
+ -331, -332, -303, -552, -306, -552, -540, -529, -530, -533,
+ -281, -552, -105, -106, -109, -540, -11, -552, -475, -312,
+ -552, -11, -492, -552, -552, -519, -442, -445, -446, -447,
+ -448, -11, -426, -429, -431, -434, -121, -264, -552, -195,
+ -552, -543, -259, -31, -197, -32, -198, -59, -33, -200,
+ -34, -199, -61, -193, -552, -552, -552, -552, -399, -552,
+ -517, -517, -517, -366, -552, -372, -552, -498, -505, -552,
+ -11, -552, -552, -253, -263, -74, -89, -86, -289, -9,
+ -11, -415, -336, -552, -552, -413, -552, -240, -379, -382,
+ -384, -372, -552, -484, -552, -487, -489, -552, -552, -339,
+ -552, -341, -343, -350, -498, -540, -511, -515, -552, -333,
+ -552, -552, -11, -11, -305, -552, -11, -399, -552, -399,
+ -552, -474, -11, -315, -552, -540, -477, -319, -552, -265,
+ -30, -196, -248, -552, -235, -357, -359, -552, -362, -364,
+ -552, -369, -552, -373, -374, -376, -377, -552, -387, -552,
+ -401, -403, -414, -11, -96, -97, -552, -552, -104, -412,
+ -279, -11, -11, -540, -517, -517, -502, -516, -517, -517,
+ -508, -517, -503, -540, -552, -348, -552, -500, -297, -552,
+ -298, -552, -552, -262, -551, -308, -311, -552, -317, -476,
+ -492, -444, -517, -517, -517, -517, -506, -517, -371, -552,
+ -504, -552, -55, -408, -245, -552, -552, -103, -552, -552,
+ -380, -552, -480, -482, -552, -485, -552, -488, -552, -490,
+ -340, -342, -346, -552, -351, -11, -301, -304, -404, -405,
+ -406, -11, -313, -11, -552, -354, -356, -552, -360, -552,
+ -363, -365, -375, -552, -282, -407, -540, -529, -530, -533,
+ -102, -383, -385, -517, -517, -517, -517, -344, -552, -349,
+ -552, -551, -552, -552, -517, -517, -517, -517, -281, -533,
+ -399, -478, -552, -481, -483, -486, -552, -347, -334, -309,
+ -320, -352, -552, -355, -358, -361, -517, -345, -517, -479,
+ -353 ]
+
+clist = [
+'121,121,314,400,406,361,209,14,506,285,394,473,14,316,267,267,267,212',
+'520,523,6,258,262,416,527,6,464,213,124,124,691,312,302,778,573,213',
+'213,213,497,14,290,290,116,198,126,126,326,327,299,299,330,105,459,462',
+'611,536,611,731,389,816,121,14,634,465,413,836,840,213,213,614,645,213',
+'335,345,345,269,269,269,281,2,299,299,299,734,254,261,263,104,814,108',
+'325,325,775,109,325,758,375,376,377,378,891,347,351,318,321,649,510',
+'513,836,614,517,283,14,669,672,519,251,213,213,213,213,14,14,831,832',
+'6,552,423,559,562,866,458,649,367,379,6,600,467,371,473,325,325,325',
+'325,602,607,608,604,331,468,108,898,638,753,894,365,366,611,611,265',
+'276,277,369,561,370,696,701,834,368,605,568,614,319,1,381,340,268,268',
+'268,197,363,470,320,840,733,323,891,518,267,749,338,836,816,373,380',
+'761,410,387,392,401,483,929,411,415,317,843,14,213,213,213,540,362,213',
+'213,213,213,213,213,547,673,812,912,619,315,781,400,406,866,641,14,649',
+'628,324,769,728,594,947,419,420,421,422,267,267,795,328,782,833,329',
+'783,684,267,681,901,686,957,792,545,546,694,860,735,746,213,213,862',
+'813,643,,,,,213,,,,15,,,649,498,15,,493,740,486,,,14,,14,624,,258,290',
+'14,,262,621,948,,481,299,624,269,,,,15,292,292,290,269,,,524,525,787',
+',299,,,704,213,,,789,480,,281,15,624,,,281,,213,213,676,624,588,337',
+'346,346,,903,509,769,685,391,845,,717,743,745,391,213,722,,325,325,',
+'482,479,,108,639,488,786,,,,213,,121,38,,,855,544,38,15,574,606,,611',
+',609,466,,15,15,,,,550,469,580,614,,617,,124,585,416,268,620,38,289',
+'289,,899,,268,267,526,567,108,126,410,,769,401,769,,,,,,38,,,757,,541',
+'213,,,,,334,350,350,350,,596,823,649,,,,,,,,743,580,,,580,579,,,,498',
+'640,584,,695,927,769,,,498,,15,267,732,,,38,,,,410,,,401,14,38,38,,',
+',690,290,410,213,15,401,,616,,299,290,769,,769,,322,,,299,213,,,267',
+',,601,610,,603,769,410,,267,401,14,687,410,14,,37,,401,633,213,37,,',
+',895,,,,,213,900,,213,748,,14,,,15,940,15,642,,121,292,15,,37,288,288',
+',915,,,,325,38,713,715,,,292,718,720,574,,415,213,213,37,,124,213,213',
+'751,,213,498,755,38,333,349,349,349,,706,,126,747,,14,574,,670,670,',
+',14,14,,,,,580,,712,585,,290,,,756,688,689,797,,299,790,,290,37,,794',
+'835,,838,14,299,,37,37,,,,388,,,38,391,38,418,,,289,38,,574,,,,788,',
+',,,574,,,624,675,289,,,,,916,863,,864,121,,213,,,,847,14,,,,,14,,,,',
+',,,,800,14,,,325,859,,,,,213,,,,,475,,477,,478,,,,730,37,,,,,,,,,857',
+',,,,,,14,,,880,16,,,37,15,16,14,,923,890,826,292,,,,849,,,299,,292,',
+'791,,,,,,796,,,934,16,,,,213,,14,14,,,14,,15,,,15,14,,,,,,16,,,,,325',
+',37,,37,,339,,288,37,15,,,,870,,,,,700,14,,299,,,288,,,14,14,,570,,',
+',,,,,,284,933,,,38,,16,,,,267,289,,,,16,16,,410,,289,401,,,670,15,,',
+',,,213,15,15,,,,,,,,,,292,38,,839,38,,841,,,14,574,292,410,,,14,,14',
+'15,,,,,,,,38,,,,612,,322,,615,,,,,,,,,,,,865,,,867,,,,,,,,16,,,,,,,414',
+'637,,,15,612,,,322,15,,,,,,,16,38,,15,,,418,,38,38,,,,,,,,,,289,,,,',
+',,,,,,289,,,,,,,38,,37,924,,15,925,386,926,288,,,707,,,15,612,322,288',
+'828,,16,,16,,,935,,16,936,284,937,,,,,,,,,,,37,,,37,,15,15,,38,15,,',
+'744,38,,15,,,,,,,956,38,,37,,,,,,,958,,,,,,,,346,,,,,,15,,284,,,,,284',
+'15,15,,,,,,,38,,,,,,,,,,38,,,,825,,,,37,,,,,,,37,37,,,,,,,,,,288,,,',
+',,38,38,,799,38,288,,,,,38,,37,,15,,,,,13,15,,15,,13,,,,,,,,,,,350,',
+',,,,38,,,,,,,,38,38,13,,,,,,,,,,,37,842,,,,37,,,,,,13,,16,,37,,,853',
+',,,,,,,,,,,,,,,,322,,,,,,,,,,,,25,,,,38,25,16,37,,16,38,,38,,,13,,37',
+',,25,824,,,13,13,,,25,25,25,16,25,,,,,,,,,,763,765,766,,,,,37,37,,,37',
+'25,,,,,37,25,25,,,25,,,,,,,,414,666,,,668,,,,,,,,349,,16,,,,37,,,16',
+'16,,,,37,37,,,,,,25,,,,13,25,25,25,25,25,25,,,,,,,16,,,,806,808,809',
+',,,13,,,,,,,,,,,,,,,,,,,,,739,,,,,,,741,742,37,,,,,,37,,37,,16,,,,,16',
+',,,,,,,,,16,,752,13,,13,,,,,13,,25,25,25,25,,,25,25,25,25,25,25,,,,',
+',,,,,,,25,,,,16,,,,882,883,,,885,887,16,889,,,829,,,,,,,,,,,,,,798,25',
+'25,,905,906,908,910,,911,25,,,,16,16,,,16,,,,,,16,,25,,25,,,,,25,,,',
+',,819,,,,,,,,,,822,,,,,,16,,,,,,25,,16,16,941,943,944,945,,,,,,25,25',
+'951,953,954,955,,851,852,,,854,,,,,,,,,25,,,,959,,960,,,,,,,,,,25,,',
+',,,,,,,,,873,,,,,16,,,878,879,,16,,16,13,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,25,,,13,,,13,,,,,,,,,,,,,,,931,,,,,,932,13,,,,,,,,,,,,,,,,',
+',,,,,,,,25,,,,,,,,,25,,,,,,,,,,,,,,,,25,,,,,13,,,,,,,13,13,,25,,,25',
+',,,,,25,,,,,,,,,,25,,,25,,,25,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25,25',
+',,,25,25,,,25,,,,,,,,,,13,,,,25,13,,,,,,25,25,,,13,,,,,,,,,,,,,,,,,',
+',,,,,220,,25,,,,,,266,266,266,,,,,,13,,,,,309,310,311,,,13,,,,,,,,,',
+'266,266,,,,,,,,,,25,,,,,25,,,,,25,13,13,,,13,,,,,25,13,,,,,,,,25,,,',
+',,,,,,,,,,,,,,,,,,,13,,,,,,,25,13,13,,,,,,,,25,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,25,,25,25,,,25,,,,,,25,,,,,,,,,,,,,13,,,,,,13,,13,266,393,266',
+',,412,417,,,25,,,,,,,,25,25,,,220,,,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',
+'457,,,,,,266,266,,,,25,,,,266,,,,,,,266,,266,,266,,,,,,25,,,,,,25,,25',
+',,,,,,,,,,,,,,,,,,,,,,504,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,266,,412,595,393,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266',
+',266,,266,,,,,,,,,,,,,266,,,,,,,,,,630,631,632,,,,,,266,,,,266,,,266',
+',,,,,,,,,,,,,266,266,,,,,,,,,,266,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266',
+'709,,,266,266,714,716,,,,719,721,,,595,723,,,,,,,,,,,,,,,,,,,,,,,,,',
+'266,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,,801,,,,,,,,,,,,,,714,716,721,719',
+',804,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,,,,,,,,,,,,,,,,,266,',
+',,,,,,,,,,,,,,,266,801,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,266' ]
+ racc_goto_table = arr = ::Array.new(2754, 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,8,35,35,53,30,21,10,46,22,68,21,62,32,32,32,19,82,82,7,66,66,17',
+'85,7,37,21,57,57,91,30,47,83,23,21,21,21,48,21,21,21,14,14,58,58,16',
+'16,60,60,16,6,35,35,69,51,69,115,26,123,54,21,11,22,26,151,152,21,21',
+'156,127,21,21,21,21,65,65,65,42,2,60,60,60,120,36,36,36,4,122,89,28',
+'28,111,5,28,125,16,16,16,16,109,52,52,65,65,118,64,64,151,156,64,43',
+'21,84,84,126,128,21,21,21,21,21,21,129,130,7,146,44,146,146,153,131',
+'118,142,7,7,38,133,142,68,28,28,28,28,67,38,38,67,4,134,89,135,136,137',
+'112,140,141,69,69,41,41,41,144,145,147,148,149,150,143,39,59,156,61',
+'1,29,18,63,63,63,15,77,44,78,152,118,79,109,81,32,12,86,151,123,5,2',
+'127,54,19,19,66,44,112,19,19,63,111,21,21,21,21,88,92,21,21,21,21,21',
+'21,93,85,120,122,48,94,11,35,35,153,95,21,118,48,96,110,23,22,112,28',
+'28,28,28,32,32,127,97,98,120,99,100,51,32,101,102,103,112,104,105,106',
+'107,108,113,23,21,21,115,121,124,,,,,21,,,,24,,,118,46,24,,30,38,47',
+',,21,,21,35,,66,21,21,,66,22,83,,7,60,35,65,,,,24,24,24,21,65,,,16,16',
+'23,,60,,,146,21,,,23,6,,42,24,35,,,42,,21,21,22,35,44,24,24,24,,91,28',
+'110,22,63,110,,37,68,48,63,21,37,,28,28,,43,4,,89,26,43,82,,,,21,,54',
+'50,,,84,28,50,24,30,44,,69,,44,41,,24,24,,,,28,41,66,156,,44,,57,66',
+'17,63,44,50,50,50,,11,,63,32,4,14,89,58,54,,110,66,110,,,,,,50,,,64',
+',89,21,,,,,50,50,50,50,,30,82,118,,,,,,,,68,66,,,66,36,,,,46,62,36,',
+'44,110,110,,,46,,24,32,116,,,50,,,,54,,,66,21,50,50,,,,8,21,54,21,24',
+'66,,7,,60,21,110,,110,,27,,,60,21,,,32,,,36,65,,36,110,54,,32,66,21',
+'16,54,21,,49,,66,28,21,49,,,,82,,,,,21,85,,21,44,,21,,,24,23,24,65,',
+'54,24,24,,49,49,49,,10,,,,28,50,19,19,,,24,19,19,30,,19,21,21,49,,57',
+'21,21,62,,21,46,62,50,49,49,49,49,,14,,58,46,,21,30,,89,89,,,21,21,',
+',,,66,,65,66,,21,,,30,89,89,53,,60,8,,21,49,,8,116,,116,21,60,,49,49',
+',,,27,,,50,63,50,27,,,50,50,,30,,,,16,,,,,30,,,35,63,50,,,,,22,116,',
+'116,54,,21,,,,44,21,,,,,21,,,,,,,,,19,21,,,28,44,,,,,21,,,,,27,,27,',
+'27,,,,114,49,,,,,,,,,8,,,,,,,21,,,44,25,,,49,24,25,21,,116,44,21,24',
+',,,16,,,60,,24,,89,,,,,,89,,,116,25,,,,21,,21,21,,,21,,24,,,24,21,,',
+',,,25,,,,,28,,49,,49,,25,,49,49,24,,,,21,,,,,24,21,,60,,,49,,,21,21',
+',27,,,,,,,,,9,8,,,50,,25,,,,32,50,,,,25,25,,54,,50,66,,,89,24,,,,,,21',
+'24,24,,,,,,,,,,24,50,,114,50,,114,,,21,30,24,54,,,21,,21,24,,,,,,,,50',
+',,,27,,27,,27,,,,,,,,,,,,114,,,114,,,,,,,,25,,,,,,,25,27,,,24,27,,,27',
+'24,,,,,,,25,50,,24,,,27,,50,50,,,,,,,,,,50,,,,,,,,,,,50,,,,,,,50,,49',
+'114,,24,114,9,114,49,,,27,,,24,27,27,49,24,,25,,25,,,114,,25,114,9,114',
+',,,,,,,,,,49,,,49,,24,24,,50,24,,,27,50,,24,,,,,,,114,50,,49,,,,,,,114',
+',,,,,,,24,,,,,,24,,9,,,,,9,24,24,,,,,,,50,,,,,,,,,,50,,,,50,,,,49,,',
+',,,,49,49,,,,,,,,,,49,,,,,,50,50,,27,50,49,,,,,50,,49,,24,,,,,20,24',
+',24,,20,,,,,,,,,,,50,,,,,,50,,,,,,,,50,50,20,,,,,,,,,,,49,27,,,,49,',
+',,,,20,,25,,49,,,27,,,,,,,,,,,,,,,,,27,,,,,,,,,,,,40,,,,50,40,25,49',
+',25,50,,50,,,20,,49,,,40,49,,,20,20,,,40,40,40,25,40,,,,,,,,,,117,117',
+'117,,,,,49,49,,,49,40,,,,,49,40,40,,,40,,,,,,,,25,9,,,9,,,,,,,,49,,25',
+',,,49,,,25,25,,,,49,49,,,,,,40,,,,20,40,40,40,40,40,40,,,,,,,25,,,,117',
+'117,117,,,,20,,,,,,,,,,,,,,,,,,,,,9,,,,,,,9,9,49,,,,,,49,,49,,25,,,',
+',25,,,,,,,,,,25,,9,20,,20,,,,,20,,40,40,40,40,,,40,40,40,40,40,40,,',
+',,,,,,,,,40,,,,25,,,,117,117,,,117,117,25,117,,,25,,,,,,,,,,,,,,9,40',
+'40,,117,117,117,117,,117,40,,,,25,25,,,25,,,,,,25,,40,,40,,,,,40,,,',
+',,9,,,,,,,,,,9,,,,,,25,,,,,,40,,25,25,117,117,117,117,,,,,,40,40,117',
+'117,117,117,,9,9,,,9,,,,,,,,,40,,,,117,,117,,,,,,,,,,40,,,,,,,,,,,,9',
+',,,,25,,,9,9,,25,,25,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,,20',
+',,20,,,,,,,,,,,,,,,9,,,,,,9,20,,,,,,,,,,,,,,,,,,,,,,,,,40,,,,,,,,,40',
+',,,,,,,,,,,,,,,40,,,,,20,,,,,,,20,20,,40,,,40,,,,,,40,,,,,,,,,,40,,',
+'40,,,40,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,40,,,,40,40,,,40,,,,,,,',
+',,20,,,,40,20,,,,,,40,40,,,20,,,,,,,,,,,,,,,,,,,,,,,31,,40,,,,,,31,31',
+'31,,,,,,20,,,,,31,31,31,,,20,,,,,,,,,,31,31,,,,,,,,,,40,,,,,40,,,,,40',
+'20,20,,,20,,,,,40,20,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,40,20',
+'20,,,,,,,,40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,40,,40,40,,,40,,,,,,40,,,',
+',,,,,,,,,20,,,,,,20,,20,31,31,31,,,31,31,,,40,,,,,,,,40,40,,,31,,,31',
+'31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31',
+'31,31,,,,,,31,31,,,,40,,,,31,,,,,,,31,,31,,31,,,,,,40,,,,,,40,,40,,',
+',,,,,,,,,,,,,,,,,,,,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,31,,31,31,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,31,,31,,31,',
+',,,,,,,,,,,31,,,,,,,,,,31,31,31,,,,,,31,,,,31,,,31,,,,,,,,,,,,,,31,31',
+',,,,,,,,,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(2754, 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, 173, 79, nil, 84, 88, 48, 20, -52, 818,
+ -305, -444, -445, nil, 34, 170, -14, -183, 110, -3,
+ 1175, 7, -192, -360, 275, 751, -142, 451, 30, 58,
+ -13, 1879, -14, nil, nil, -200, 59, -228, -322, -294,
+ 1265, 131, 46, 79, -83, nil, -24, -2, -265, 532,
+ 374, -288, 35, -63, -8, nil, nil, 20, 36, -215,
+ 15, 116, -43, 148, -211, 47, -4, -315, -258, -418,
+ nil, nil, nil, nil, nil, nil, nil, 112, 125, 127,
+ nil, -137, -308, -633, -411, -307, 125, nil, -137, 86,
+ nil, -516, 143, -144, 168, -281, 173, 182, -424, 184,
+ -424, -282, -603, -287, -434, -95, -104, -289, -538, -744,
+ -424, -565, -692, -338, 132, -541, -122, 661, -414, nil,
+ -515, -471, -648, -677, -253, -548, -209, -449, 94, -636,
+ -636, -119, nil, -122, -111, -703, -355, -485, nil, nil,
+ 79, 78, 52, 86, 79, -206, -240, 80, -389, -389,
+ -595, -697, -698, -677, nil, nil, -405 ]
+
+racc_goto_default = [
+ nil, nil, nil, 3, nil, 4, 332, 279, nil, 313,
+ nil, 779, nil, 278, nil, nil, nil, 11, 12, 18,
+ 219, 308, nil, nil, 217, 218, nil, 272, 17, nil,
+ 424, 21, 22, 23, 24, 627, nil, nil, nil, nil,
+ 296, 395, 31, nil, nil, 33, 36, 35, nil, 214,
+ 215, 344, nil, 123, 403, 122, 125, 74, 75, nil,
+ 45, nil, 635, 396, nil, 397, 408, 581, 471, 270,
+ 256, 46, 47, 48, 49, 50, 51, 52, nil, 257,
+ 58, nil, nil, nil, nil, nil, nil, 66, nil, 521,
+ 67, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 771,
+ 656, nil, 772, nil, 646, nil, 648, nil, 837, 597,
+ nil, nil, nil, 654, nil, nil, nil, 693, nil, nil,
+ nil, nil, 407, nil, nil, nil, nil, nil, 73, 76,
+ 77, nil, nil, nil, nil, nil, 557, nil, nil, nil,
+ 647, 658, 659, 738, 662, 665, 274 ]
+
+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, 231, :_reduce_277,
+ 0, 232, :_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,
+ 0, 233, :_reduce_295,
+ 3, 197, :_reduce_296,
+ 6, 197, :_reduce_297,
+ 6, 197, :_reduce_298,
+ 0, 234, :_reduce_299,
+ 0, 235, :_reduce_300,
+ 7, 197, :_reduce_301,
+ 0, 236, :_reduce_302,
+ 0, 237, :_reduce_303,
+ 7, 197, :_reduce_304,
+ 5, 197, :_reduce_305,
+ 4, 197, :_reduce_306,
+ 0, 238, :_reduce_307,
+ 0, 239, :_reduce_308,
+ 9, 197, :_reduce_309,
+ 0, 240, :_reduce_310,
+ 6, 197, :_reduce_311,
+ 0, 241, :_reduce_312,
+ 7, 197, :_reduce_313,
+ 0, 242, :_reduce_314,
+ 5, 197, :_reduce_315,
+ 0, 243, :_reduce_316,
+ 6, 197, :_reduce_317,
+ 0, 244, :_reduce_318,
+ 0, 245, :_reduce_319,
+ 9, 197, :_reduce_320,
+ 1, 197, :_reduce_321,
+ 1, 197, :_reduce_322,
+ 1, 197, :_reduce_323,
+ 1, 197, :_reduce_324,
+ 1, 158, :_reduce_none,
+ 1, 224, :_reduce_326,
+ 1, 227, :_reduce_327,
+ 1, 219, :_reduce_none,
+ 1, 219, :_reduce_none,
+ 2, 219, :_reduce_330,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 220, :_reduce_none,
+ 5, 220, :_reduce_334,
+ 1, 148, :_reduce_none,
+ 2, 148, :_reduce_336,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 246, :_reduce_339,
+ 3, 246, :_reduce_340,
+ 1, 249, :_reduce_341,
+ 3, 249, :_reduce_342,
+ 1, 248, :_reduce_none,
+ 4, 248, :_reduce_344,
+ 6, 248, :_reduce_345,
+ 3, 248, :_reduce_346,
+ 5, 248, :_reduce_347,
+ 2, 248, :_reduce_348,
+ 4, 248, :_reduce_349,
+ 1, 248, :_reduce_350,
+ 3, 248, :_reduce_351,
+ 6, 250, :_reduce_352,
+ 8, 250, :_reduce_353,
+ 4, 250, :_reduce_354,
+ 6, 250, :_reduce_355,
+ 4, 250, :_reduce_356,
+ 2, 250, :_reduce_none,
+ 6, 250, :_reduce_358,
+ 2, 250, :_reduce_359,
+ 4, 250, :_reduce_360,
+ 6, 250, :_reduce_361,
+ 2, 250, :_reduce_362,
+ 4, 250, :_reduce_363,
+ 2, 250, :_reduce_364,
+ 4, 250, :_reduce_365,
+ 1, 250, :_reduce_366,
+ 0, 175, :_reduce_367,
+ 1, 175, :_reduce_368,
+ 3, 256, :_reduce_369,
+ 1, 256, :_reduce_370,
+ 4, 256, :_reduce_371,
+ 0, 257, :_reduce_372,
+ 2, 257, :_reduce_373,
+ 1, 258, :_reduce_374,
+ 3, 258, :_reduce_375,
+ 1, 259, :_reduce_376,
+ 1, 259, :_reduce_none,
+ 0, 263, :_reduce_378,
+ 3, 218, :_reduce_379,
+ 4, 261, :_reduce_380,
+ 1, 261, :_reduce_381,
+ 0, 266, :_reduce_382,
+ 4, 262, :_reduce_383,
+ 0, 267, :_reduce_384,
+ 4, 262, :_reduce_385,
+ 0, 268, :_reduce_386,
+ 5, 265, :_reduce_387,
+ 2, 171, :_reduce_388,
+ 4, 171, :_reduce_389,
+ 4, 171, :_reduce_390,
+ 2, 217, :_reduce_391,
+ 4, 217, :_reduce_392,
+ 4, 217, :_reduce_393,
+ 3, 217, :_reduce_394,
+ 3, 217, :_reduce_395,
+ 3, 217, :_reduce_396,
+ 2, 217, :_reduce_397,
+ 1, 217, :_reduce_398,
+ 4, 217, :_reduce_399,
+ 0, 270, :_reduce_400,
+ 5, 216, :_reduce_401,
+ 0, 271, :_reduce_402,
+ 5, 216, :_reduce_403,
+ 5, 222, :_reduce_404,
+ 1, 272, :_reduce_405,
+ 1, 272, :_reduce_none,
+ 6, 147, :_reduce_407,
+ 0, 147, :_reduce_408,
+ 1, 273, :_reduce_409,
+ 1, 273, :_reduce_none,
+ 1, 273, :_reduce_none,
+ 2, 274, :_reduce_412,
+ 1, 274, :_reduce_none,
+ 2, 149, :_reduce_414,
+ 1, 149, :_reduce_none,
+ 1, 208, :_reduce_none,
+ 1, 208, :_reduce_none,
+ 1, 208, :_reduce_none,
+ 1, 209, :_reduce_419,
+ 1, 276, :_reduce_420,
+ 2, 276, :_reduce_421,
+ 3, 277, :_reduce_422,
+ 1, 277, :_reduce_423,
+ 1, 277, :_reduce_424,
+ 3, 210, :_reduce_425,
+ 4, 211, :_reduce_426,
+ 3, 212, :_reduce_427,
+ 0, 281, :_reduce_428,
+ 3, 281, :_reduce_429,
+ 1, 282, :_reduce_430,
+ 2, 282, :_reduce_431,
+ 3, 213, :_reduce_432,
+ 0, 284, :_reduce_433,
+ 3, 284, :_reduce_434,
+ 0, 278, :_reduce_435,
+ 2, 278, :_reduce_436,
+ 0, 279, :_reduce_437,
+ 2, 279, :_reduce_438,
+ 0, 280, :_reduce_439,
+ 2, 280, :_reduce_440,
+ 1, 283, :_reduce_441,
+ 2, 283, :_reduce_442,
+ 0, 286, :_reduce_443,
+ 4, 283, :_reduce_444,
+ 1, 285, :_reduce_445,
+ 1, 285, :_reduce_446,
+ 1, 285, :_reduce_447,
+ 1, 285, :_reduce_none,
+ 1, 194, :_reduce_449,
+ 3, 195, :_reduce_450,
+ 1, 275, :_reduce_451,
+ 1, 275, :_reduce_452,
+ 2, 275, :_reduce_453,
+ 2, 275, :_reduce_454,
+ 1, 186, :_reduce_455,
+ 1, 186, :_reduce_456,
+ 1, 186, :_reduce_457,
+ 1, 186, :_reduce_458,
+ 1, 186, :_reduce_459,
+ 1, 187, :_reduce_460,
+ 1, 187, :_reduce_461,
+ 1, 187, :_reduce_462,
+ 1, 187, :_reduce_463,
+ 1, 187, :_reduce_464,
+ 1, 187, :_reduce_465,
+ 1, 187, :_reduce_466,
+ 1, 214, :_reduce_467,
+ 1, 214, :_reduce_468,
+ 1, 157, :_reduce_469,
+ 1, 157, :_reduce_470,
+ 1, 161, :_reduce_471,
+ 1, 161, :_reduce_472,
+ 1, 225, :_reduce_473,
+ 3, 225, :_reduce_474,
+ 2, 225, :_reduce_475,
+ 3, 228, :_reduce_476,
+ 2, 228, :_reduce_477,
+ 6, 264, :_reduce_478,
+ 8, 264, :_reduce_479,
+ 4, 264, :_reduce_480,
+ 6, 264, :_reduce_481,
+ 4, 264, :_reduce_482,
+ 6, 264, :_reduce_483,
+ 2, 264, :_reduce_484,
+ 4, 264, :_reduce_485,
+ 6, 264, :_reduce_486,
+ 2, 264, :_reduce_487,
+ 4, 264, :_reduce_488,
+ 2, 264, :_reduce_489,
+ 4, 264, :_reduce_490,
+ 1, 264, :_reduce_491,
+ 0, 264, :_reduce_492,
+ 1, 260, :_reduce_493,
+ 1, 260, :_reduce_494,
+ 1, 260, :_reduce_495,
+ 1, 260, :_reduce_496,
+ 1, 247, :_reduce_none,
+ 1, 247, :_reduce_none,
+ 1, 288, :_reduce_499,
+ 3, 288, :_reduce_500,
+ 1, 251, :_reduce_501,
+ 3, 251, :_reduce_502,
+ 3, 289, :_reduce_503,
+ 3, 290, :_reduce_504,
+ 1, 252, :_reduce_505,
+ 3, 252, :_reduce_506,
+ 1, 287, :_reduce_507,
+ 3, 287, :_reduce_508,
+ 1, 291, :_reduce_none,
+ 1, 291, :_reduce_none,
+ 2, 253, :_reduce_511,
+ 1, 253, :_reduce_512,
+ 1, 292, :_reduce_none,
+ 1, 292, :_reduce_none,
+ 2, 255, :_reduce_515,
+ 2, 254, :_reduce_516,
+ 0, 254, :_reduce_517,
+ 1, 229, :_reduce_none,
+ 3, 229, :_reduce_519,
+ 0, 215, :_reduce_520,
+ 2, 215, :_reduce_none,
+ 1, 202, :_reduce_522,
+ 3, 202, :_reduce_523,
+ 3, 293, :_reduce_524,
+ 2, 293, :_reduce_525,
+ 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, 269, :_reduce_none,
+ 1, 269, :_reduce_none,
+ 1, 269, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 0, 141, :_reduce_none,
+ 1, 141, :_reduce_none,
+ 0, 167, :_reduce_none,
+ 1, 167, :_reduce_none,
+ 2, 181, :_reduce_542,
+ 2, 160, :_reduce_543,
+ 0, 201, :_reduce_none,
+ 1, 201, :_reduce_none,
+ 1, 201, :_reduce_none,
+ 1, 226, :_reduce_547,
+ 1, 226, :_reduce_none,
+ 1, 143, :_reduce_none,
+ 2, 143, :_reduce_none,
+ 0, 199, :_reduce_551 ]
+
+racc_reduce_n = 552
+
+racc_shift_n = 961
+
+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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "singleton",
+ "dot_or_colon",
+ "@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_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
+
+# 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
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_55(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ 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_internal(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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_296(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_297(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_298(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_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(:while, val[0], val[2], val[3],
+ val[5], val[6])
+
+ result
+end
+
+def _reduce_302(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_303(val, _values, result)
+ @lexer.cond.pop
+
+ result
+end
+
+def _reduce_304(val, _values, result)
+ result = @builder.loop(:until, val[0], val[2], val[3],
+ val[5], val[6])
+
+ result
+end
+
+def _reduce_305(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_306(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_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.for(val[0], val[1],
+ val[2], val[4],
+ val[5], val[7], val[8])
+
+ result
+end
+
+def _reduce_310(val, _values, result)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_311(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_312(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_313(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_314(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_315(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_316(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_317(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_318(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ result = @builder.def_singleton(val[0], val[1], val[2],
+ val[4], val[6], val[7], val[8])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 325 omitted
+
+def _reduce_326(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+# reduce 328 omitted
+
+# reduce 329 omitted
+
+def _reduce_330(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 331 omitted
+
+# reduce 332 omitted
+
+# reduce 333 omitted
+
+def _reduce_334(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 335 omitted
+
+def _reduce_336(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 337 omitted
+
+# reduce 338 omitted
+
+def _reduce_339(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_340(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_341(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_342(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 343 omitted
+
+def _reduce_344(val, _values, result)
+ @static_env.declare val[3][0]
+
+ result = val[0].
+ push(@builder.restarg(val[2], val[3]))
+
+ result
+end
+
+def _reduce_345(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_346(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2]))
+
+ result
+end
+
+def _reduce_347(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_349(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+def _reduce_351(val, _values, result)
+ result = [ @builder.restarg(val[0]),
+ *val[2] ]
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_354(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+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)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 357 omitted
+
+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)
+ 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_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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ 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[2]).
+ concat(val[3])
+
+ 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] ]
+
+ result
+end
+
+def _reduce_367(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_368(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_369(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_370(val, _values, result)
+ result = @builder.args(val[0], [], val[0])
+
+ result
+end
+
+def _reduce_371(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_372(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_373(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_374(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_375(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_376(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 377 omitted
+
+def _reduce_378(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_379(val, _values, result)
+ result = [ val[1], val[2] ]
+
+ @static_env.unextend
+
+ result
+end
+
+def _reduce_380(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_381(val, _values, result)
+ result = @builder.args(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_382(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_383(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_384(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_385(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_388(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_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)
+ lparen_t, args, rparen_t = val[1]
+ result = @builder.call_method(nil, nil, val[0],
+ 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[3]
+ result = @builder.call_method(val[0], val[1], val[2],
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_394(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_395(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_396(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_397(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_398(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_401(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_402(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_403(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_404(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_405(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 406 omitted
+
+def _reduce_407(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_408(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_409(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 410 omitted
+
+# reduce 411 omitted
+
+def _reduce_412(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 413 omitted
+
+def _reduce_414(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 415 omitted
+
+# reduce 416 omitted
+
+# reduce 417 omitted
+
+# reduce 418 omitted
+
+def _reduce_419(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_421(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_422(val, _values, result)
+ result = @builder.string_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_423(val, _values, result)
+ result = @builder.string(val[0])
+
+ result
+end
+
+def _reduce_424(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ result = @builder.xstring_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_426(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ 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.word(val[1])
+
+ result
+end
+
+def _reduce_430(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_431(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_432(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_433(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_434(val, _values, result)
+ result = val[0] << @builder.string_internal(val[1])
+
+ result
+end
+
+def _reduce_435(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ result = val[0] << 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 = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_442(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_443(val, _values, result)
+ @lexer.cond.push(false)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ @lexer.cond.lexpop
+ @lexer.cmdarg.lexpop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 448 omitted
+
+def _reduce_449(val, _values, result)
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_450(val, _values, result)
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_451(val, _values, result)
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_452(val, _values, result)
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_453(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_454(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_455(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_457(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_458(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_459(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_460(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_461(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_462(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_463(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_464(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_467(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_469(val, _values, result)
+ result = @builder.assignable(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
+
+# reduce 498 omitted
+
+def _reduce_499(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_500(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_501(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_502(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_503(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_504(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_505(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = val[0] << 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
+
+# reduce 509 omitted
+
+# reduce 510 omitted
+
+def _reduce_511(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_512(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 513 omitted
+
+# reduce 514 omitted
+
+def _reduce_515(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+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[1]
+
+ result
+end
+
+def _reduce_520(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 521 omitted
+
+def _reduce_522(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_523(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_524(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_525(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+# 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
+
+# reduce 539 omitted
+
+# reduce 540 omitted
+
+# reduce 541 omitted
+
+def _reduce_542(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_543(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 544 omitted
+
+# reduce 545 omitted
+
+# reduce 546 omitted
+
+def _reduce_547(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 548 omitted
+
+# reduce 549 omitted
+
+# reduce 550 omitted
+
+def _reduce_551(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby19
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby20.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby20.rb
new file mode 100644
index 000000000..e5481be08
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby20.rb
@@ -0,0 +1,6563 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-476,5,74,75,71,9,57,-476,-476,-476,63,64,-476,-476,-476,67,-476,65',
+'66,68,30,31,72,73,-476,267,-476,-476,-476,29,28,27,100,99,101,102,-476',
+'-476,19,-476,-476,-476,-476,-476,8,45,7,10,104,103,105,94,56,96,95,97',
+'962,98,106,107,556,92,93,42,43,41,-476,-476,-476,-476,-476,-476,-476',
+'-476,-476,-476,-476,-476,-476,-476,108,690,-476,-476,-476,40,-476,-476',
+'33,-100,-476,58,59,-476,-476,60,-476,35,-476,267,-476,44,-476,-476,216',
+'-476,-476,-476,-476,-476,20,-476,266,-476,-98,91,81,84,85,614,86,88',
+'87,89,-286,745,-101,-476,82,90,-476,-476,-476,-476,-572,-476,62,-476',
+'83,-476,-103,-572,-572,-572,690,217,-572,-572,-572,577,-572,-99,614',
+'-106,613,120,-102,213,214,-572,-572,-572,-572,-105,-286,535,555,-100',
+'535,535,-572,-572,579,-572,-572,-572,-572,-572,-101,535,535,259,213',
+'214,789,112,266,613,260,112,111,-101,525,205,111,527,614,690,-91,512',
+'-572,-572,-572,-572,-572,-572,-572,-572,-572,-572,-572,-572,-572,-572',
+'-103,576,-572,-572,-572,206,747,-572,614,-89,-572,213,214,-572,-572',
+'207,-572,613,-572,-568,-572,267,-572,-572,578,-572,-572,-572,-572,-572',
+'-101,-572,-572,-572,112,-101,-94,112,-105,111,-92,212,111,613,-103,441',
+'-90,-572,-97,-103,-572,-572,-572,-572,-289,-572,256,-572,-96,-102,-102',
+'-289,-289,-289,-491,-102,-289,-289,-289,112,-289,-100,112,112,111,820',
+'-100,111,111,788,-289,-289,-289,112,112,262,-92,112,111,111,-289,-289',
+'111,-289,-289,-289,-289,-289,-106,-102,314,-104,-94,209,564,217,-92',
+'267,266,-94,210,213,214,213,214,525,315,-99,524,208,-289,-289,-289,-289',
+'-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,217,564,-289,-289',
+'-289,-490,748,-289,-94,384,-289,-94,-92,-289,-289,-92,-289,-94,-289',
+'564,-289,-92,-289,-289,746,-289,-289,-289,-289,-289,-568,-289,-569,-289',
+'566,565,807,262,666,665,664,780,667,541,722,564,838,-289,-565,564,-289',
+'-289,-289,-289,-572,-289,397,-289,-98,-104,266,-572,-572,-572,440,566',
+'565,-572,-572,237,-572,217,-84,217,-93,724,-95,-103,-70,-572,-485,-479',
+'-566,566,565,567,81,-485,-479,442,-572,-572,731,-572,-572,-572,-572',
+'-572,82,-100,-476,234,507,508,443,236,235,-476,83,566,565,562,-565,566',
+'565,575,-476,216,885,474,-572,-572,-572,-572,-572,-572,-572,-572,-572',
+'-572,-572,-572,-572,-572,-479,-565,-572,-572,-572,-91,598,-479,-476',
+'512,-572,-100,-566,-572,564,-476,-479,483,-572,485,-572,564,-572,-572',
+'-572,-572,-572,-572,-572,-572,-289,-572,-572,-572,487,-566,547,-289',
+'-289,-289,548,551,-490,-289,-289,237,-289,-572,917,525,-572,-572,527',
+'-93,-481,-572,-96,552,-414,-102,112,-481,-105,-572,494,111,-289,-289',
+'515,-289,-289,-289,-289,-289,-69,516,-572,234,566,565,580,236,235,-572',
+'439,566,565,571,-568,-89,217,525,-572,966,527,-98,-289,-289,-289,-289',
+'-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-414,-572,-289,-289',
+'-289,-572,597,-414,217,112,-289,497,-572,-289,111,211,-414,-568,-289',
+'564,-289,-572,-289,-289,498,-289,-289,-289,-289,-289,-479,-289,505,-289',
+'-491,-414,271,-479,-479,-479,-572,592,-479,-479,-479,-489,-479,-289',
+'213,214,-289,-289,-489,-95,-479,-289,-479,-479,-479,-104,112,-489,-97',
+'815,780,111,-479,-479,-106,-479,-479,-479,-479,-479,807,-482,666,665',
+'664,-289,667,-90,-482,566,565,569,-289,-99,-92,683,682,-569,217,593',
+'-101,-289,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479',
+'-479,-479,262,762,-479,-479,-479,-290,-479,-479,437,509,-479,675,-290',
+'-479,-479,438,-479,513,-479,514,-479,-290,-479,-479,439,-479,-479,-479',
+'-479,-479,-94,-479,-489,-479,-487,-486,-103,237,112,-489,217,-487,-486',
+'111,683,682,981,-479,-489,676,-479,-479,-479,-479,-574,-479,528,-479',
+'259,-479,529,-574,-574,-574,673,260,-574,-574,-574,807,-574,666,665',
+'664,675,667,-488,237,-483,-574,-574,-574,-574,-488,112,-483,815,780',
+'487,111,-574,-574,-488,-574,-574,-574,-574,-574,-484,112,213,214,541',
+'237,111,-484,803,683,682,234,316,317,676,236,235,806,232,233,386,545',
+'-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574',
+'546,234,-574,-574,-574,236,235,-574,232,233,-574,581,584,-574,-574,-263',
+'-574,586,-574,217,-574,590,-574,-574,591,-574,-574,-574,-574,-574,543',
+'-574,-574,-574,262,601,807,544,666,665,664,604,667,237,237,237,542,-574',
+'237,551,-574,-574,-574,-574,217,-574,550,-574,5,74,75,71,9,57,394,552',
+'217,63,64,396,395,217,67,803,65,66,68,30,31,72,73,-84,943,632,217,518',
+'29,28,27,100,99,101,102,643,807,19,666,665,664,649,667,8,45,7,10,104',
+'103,105,94,56,96,95,97,650,98,106,107,551,92,93,42,43,41,807,917,666',
+'665,664,652,667,-290,803,807,552,666,665,664,-290,667,686,806,541,40',
+'-279,693,33,-290,721,58,59,-279,725,60,726,35,-264,732,474,44,-279,803',
+'474,807,217,666,665,664,20,667,803,750,256,91,81,84,85,485,86,88,87',
+'89,487,773,643,217,82,90,288,74,75,71,9,57,62,262,83,63,64,262,803,643',
+'67,237,65,66,68,30,31,72,73,115,116,117,118,119,29,28,27,100,99,101',
+'102,237,807,19,666,665,664,780,667,8,45,290,10,104,103,105,94,56,96',
+'95,97,217,98,106,107,791,92,93,42,43,41,237,807,-289,666,665,664,794',
+'667,803,-289,795,797,799,801,-569,810,251,252,-289,40,811,812,33,780',
+'819,58,59,217,217,60,828,35,234,-265,240,44,236,235,803,232,233,837',
+'840,238,20,239,794,843,845,91,81,84,85,847,86,88,87,89,849,217,851,852',
+'82,90,288,74,75,71,9,57,62,855,83,63,64,857,858,643,67,860,65,66,68',
+'30,31,72,73,115,116,117,118,119,29,28,27,100,99,101,102,-263,914,19',
+'666,665,664,864,667,8,45,290,10,104,103,105,94,56,96,95,97,866,98,106',
+'107,217,92,93,42,43,41,237,-591,-591,-591,-591,243,245,-488,-289,-591',
+'-591,971,883,217,-488,-289,251,252,972,40,-569,887,33,-488,-289,58,59',
+'970,889,60,895,35,234,898,240,44,236,235,217,232,233,244,242,238,20',
+'239,901,-266,911,91,81,84,85,918,86,88,87,89,919,930,794,932,82,90,288',
+'74,75,71,9,57,62,934,83,63,64,936,938,938,67,217,65,66,68,30,31,72,73',
+'115,116,117,118,119,29,28,27,100,99,101,102,716,717,19,944,718,106,107',
+'947,8,45,290,10,104,103,105,94,56,96,95,97,948,98,106,107,953,92,93',
+'42,43,41,237,241,246,247,248,243,245,253,254,249,250,-279,-591,-591',
+'-333,794,251,252,-279,40,956,-333,33,958,960,58,59,-279,962,60,-333',
+'35,234,962,240,44,236,235,973,232,233,244,242,238,20,239,974,975,983',
+'91,81,84,85,-569,86,88,87,89,-568,649,998,938,82,90,288,74,75,71,9,57',
+'62,938,83,63,64,938,1003,983,67,1006,65,66,68,30,31,72,73,1007,1008',
+'962,962,962,29,28,27,100,99,101,102,217,914,19,666,665,664,983,667,8',
+'45,290,10,104,103,105,94,56,96,95,97,938,98,106,107,983,92,93,42,43',
+'41,237,241,246,247,248,243,245,253,-290,249,250,503,,,,-290,251,252',
+'504,40,,,33,,-290,58,59,502,,60,,35,234,,240,44,236,235,,232,233,244',
+'242,238,20,239,,,,91,81,84,85,,86,88,87,89,,,,,82,90,288,74,75,71,9',
+'57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101',
+'102,,,19,,,,,602,8,45,290,10,104,103,105,94,56,96,95,97,,98,106,107',
+',92,93,42,43,41,237,241,246,247,248,243,245,253,254,249,250,,230,231',
+',,251,252,,40,,,33,,,58,59,,,60,,35,234,,240,44,236,235,,232,233,244',
+'242,238,20,239,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,255,-280,-240',
+',,62,,83,-280,-280,-280,,,-280,-280,-280,237,-280,,,,,,,,,,-280,-280',
+'-280,,,251,252,,,,-280,-280,,-280,-280,-280,-280,-280,,,,234,,240,,236',
+'235,,232,233,,,238,,239,,,,,,-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,288,74,75,71,9,57',
+',,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,',
+'19,,,,,,8,45,290,10,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,237,241,246,247,248,243,245,,,249,250,,,,,,251,252,,40,,,33,,',
+'58,59,,,60,,35,234,,240,44,236,235,,232,233,244,242,238,20,239,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290',
+'10,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,237,-591,-591',
+'-591,-591,243,245,,,-591,-591,,,,,,251,252,,40,,,33,,,58,59,,,60,,35',
+'234,,240,44,236,235,,232,233,244,242,238,20,239,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10,104,103,105',
+'94,56,96,95,97,,98,106,107,,92,93,42,43,41,237,-591,-591,-591,-591,243',
+'245,,,-591,-591,,,,,,251,252,,40,,,292,,,58,59,,,60,,35,234,,240,44',
+'236,235,,232,233,244,242,238,20,239,,,,91,81,84,85,,86,88,87,89,,,,',
+'82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,',
+',,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10,104,103,105,94,56,96',
+'95,97,,98,106,107,,92,93,42,43,41,237,241,246,247,248,243,245,253,254',
+'249,250,,-591,-591,,,251,252,,40,,,33,,,58,59,,,60,,35,234,,240,44,236',
+'235,,232,233,244,242,238,20,239,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+'288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28',
+'27,100,99,101,102,,,19,,,,,,8,45,290,10,104,103,105,94,56,96,95,97,',
+'98,106,107,,92,93,42,43,41,237,-591,-591,-591,-591,243,245,,,-591,-591',
+',,,,,251,252,,40,,,33,,,58,59,,,60,,35,234,,240,44,236,235,,232,233',
+'244,242,238,20,239,,,,91,81,84,85,,86,88,87,89,,,,,82,90,288,74,75,71',
+'9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101',
+'102,,,19,,,,,,8,45,290,10,104,103,105,94,56,96,95,97,,98,106,107,,92',
+'93,42,43,41,237,,,,,,,,,,,,,,,,251,252,,40,,,33,,,58,59,,,60,,35,234',
+',240,44,236,235,,232,233,,,238,20,239,,,,91,81,84,85,,86,88,87,89,,',
+',,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,',
+',,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10,104,103,105,94,56',
+'96,95,97,,98,106,107,,92,93,42,43,41,237,,,,,,,,,,,,,,,,251,252,,40',
+',,33,,,58,59,,,60,,35,234,,240,44,236,235,,232,233,,,238,20,239,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290',
+'10,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,237,-591,-591',
+'-591,-591,243,245,,,-591,-591,,,,,,251,252,,40,,,33,,,58,59,,,60,,35',
+'234,,240,44,236,235,,232,233,244,242,238,20,239,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10,104,103,105',
+'94,56,96,95,97,,98,106,107,,92,93,42,43,41,237,-591,-591,-591,-591,243',
+'245,,,-591,-591,,,,,,251,252,,40,,,33,,,58,59,,,60,,35,234,,240,44,236',
+'235,,232,233,244,242,238,20,239,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+'5,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28',
+'27,100,99,101,102,,,19,,,,,,8,45,7,10,104,103,105,94,56,96,95,97,,98',
+'106,107,,92,93,42,43,41,237,,,,,,,,,,,,,,,,251,252,,40,,,33,,,58,59',
+',,60,,35,234,,240,44,236,235,,232,233,,,,20,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10,104,103,105,94',
+'56,96,95,97,,98,106,107,,92,93,42,43,41,237,,,,,,,,,,,,,,,,251,252,',
+'40,,,33,,,58,59,,,60,,35,234,,240,44,236,235,,232,233,,,,20,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10',
+'104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,237,,,,,,,,,',
+',,,,,,251,252,,40,,,33,,,58,59,,,60,,35,234,,,44,236,235,,232,233,,',
+',20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,288,74,75,71,9,57,62,,83',
+'63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19',
+',,,,,8,45,290,10,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43',
+'41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,',
+',67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45',
+'290,10,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,',
+',,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10,104',
+'103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,',
+',,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10,104,103,105,94',
+'56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,292',
+',,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,100,99,101,102,,,19,,,,,,8,45,290,10,104,103,105,94,56,96,95,97',
+',98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60',
+',35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,288,74,75',
+'71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99',
+'101,102,,,19,,,,,,8,45,290,10,104,103,105,94,56,96,95,97,,98,106,107',
+',92,93,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,',
+',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,288,74,75,71,9,57,62',
+',83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,',
+',19,,,,,,8,45,290,10,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8',
+'45,290,10,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,',
+',,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10',
+'104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,',
+',,,,,,40,,,292,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10,104,103',
+'105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,40',
+',,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,288,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73',
+',,,,,29,28,27,100,99,101,102,,,19,,,,,602,8,45,290,10,104,103,105,94',
+'56,96,95,97,,98,106,107,,92,93,42,43,41,237,241,246,247,248,243,245',
+'253,254,249,250,,230,231,,,251,252,,40,,,33,,,58,59,,,60,,35,234,,240',
+'44,236,235,,232,233,244,242,238,20,239,,,,91,81,84,85,,86,88,87,89,',
+',,,82,90,,255,-573,,,,62,,83,-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,-573,-573,,,',
+',,,,,,,,,,-573,,,-573,-573,-573,-573,,-573,,-573,288,74,75,71,9,57,',
+',,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19',
+',,,,,8,45,290,10,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43',
+'41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67',
+',65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,',
+'45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,',
+',,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307',
+'308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105',
+'94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,',
+'228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,',
+',,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,',
+',,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95',
+'97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59',
+',,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74',
+'75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310',
+'100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107',
+',92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,',
+',,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83',
+'63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102',
+',,229,,,,,,,305,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,,,311',
+',,,,,,,,,,,,,,,,,,,301,,,297,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68',
+'307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103',
+'105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222',
+',,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,',
+',,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96',
+'95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58',
+'59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+'74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107',
+',92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,',
+',,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83',
+'63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102',
+',,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43',
+'41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,9,57,62,,83,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,,10',
+'104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,',
+',,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103,105,94,56',
+'96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,',
+'58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304',
+'310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106',
+'107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,626,',
+',,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57',
+'62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229,,,,,,,45,,,104,103',
+'105,94,56,96,95,97,282,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,',
+',222,,,228,,,58,59,,,60,,280,,278,,44,,,283,,,,,,227,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94',
+'56,96,95,97,282,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,',
+'228,,,58,59,,,60,,280,,278,,44,,,283,,,,,,227,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96',
+'95,97,282,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,',
+'58,59,,,60,,280,,278,,44,,,283,,,,,,227,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,',
+',,,,303,304,310,100,99,101,102,,,229,,,,,587,,305,,,104,103,105,94,56',
+'96,95,97,,98,106,107,,92,93,,,311,237,241,246,247,248,243,245,253,254',
+'249,250,,230,231,,,251,252,,301,,,228,,,58,59,,,60,,,234,,240,,236,235',
+',232,233,244,242,238,,239,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,255',
+',500,,,62,,83,74,75,71,,57,,,,63,64,,,,67,,65,66,68,307,308,72,73,,',
+',,,303,304,310,100,99,101,102,,,229,,,,,,,305,,,104,103,105,94,56,96',
+'95,97,,98,106,107,,92,93,,,311,,,,,,,,,,,,,,,,,,,,301,,,297,,,58,59',
+',,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71',
+',57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100',
+'99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,282,98,106,107',
+',92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,278,,44',
+',,283,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57',
+'62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,305,,,104',
+'103,105,94,56,96,95,97,,98,106,107,,92,93,,,311,,,,,,,,,,,,,,,,,,,,854',
+',,228,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303',
+'304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,',
+'98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60',
+',,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71',
+',57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,305,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,,,311,,,,,,',
+',,,,,,,,,,,,,925,,,228,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,',
+'86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94',
+'56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228',
+',,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28',
+'27,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106',
+'107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44',
+',,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62',
+',83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,305,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93',
+',,311,,,,,,,,,,,,,,,,,,,,301,,,297,,,58,59,,,60,,296,,,,,,,,,,,,,,,',
+',,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67',
+',65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,',
+'305,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,,,311,237,241,246',
+'247,248,243,245,253,254,249,250,,230,231,,,251,252,,301,,,228,,,58,59',
+',,60,,,234,,240,,236,235,,232,233,244,242,238,,239,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,255,,313,,,62,,83,74,75,71,,57,,,,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103',
+'105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222',
+',,228,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,',
+',,,82,90,217,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73',
+',,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45,7,10,104,103,105,94,56,96',
+'95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59',
+',,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74',
+'75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100',
+'99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,',
+'92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,',
+',,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83',
+'63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229',
+',,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,',
+',,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104',
+'103,105,94,56,96,95,97,282,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,',
+',,,,,222,,,228,,,58,59,,,60,,,,278,,44,,,283,,,,,,227,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307',
+'308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105',
+'94,56,96,95,97,282,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222',
+',,228,,,58,59,,,60,,626,,278,,44,,,283,,,,,,227,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308',
+'72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,305,,,104,103,105',
+'94,56,96,95,97,,98,106,107,,92,93,,,311,,,,,,,,,,,,,,,,,,,,301,,,297',
+',,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+'74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'100,99,101,102,,,19,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107',
+',92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,',
+',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83',
+'63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102',
+',,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43',
+'41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67',
+',65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,',
+'45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,',
+',,,,,,,,,,,222,,,228,,,58,59,,,60,,729,,,,44,,,,,,,,,227,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103,105',
+'94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,',
+'228,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,',
+',82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,100,99,101,102,,,19,,,,,,,45,,,104,103,105,94,56,96,95,97,,98',
+'106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,',
+',,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57',
+'62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102',
+',,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43',
+'41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,402,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,518,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103',
+'105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222',
+',,228,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,',
+',,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,',
+',29,28,27,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97',
+',98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60',
+',,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71',
+',57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,282,98,106,107,,92,93',
+'42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,280,,278,,44,,,283',
+',,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83',
+'63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229',
+',,,,,,45,,,104,103,105,94,56,96,95,97,282,98,106,107,,92,93,42,43,41',
+',,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,280,,278,,44,,,283,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,280,,,,44,,,,,,,,,227,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103',
+'105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222',
+',,228,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,',
+',,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,',
+',,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96',
+'95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58',
+'59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+'74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,282,98,106',
+'107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,280,',
+'278,,44,,,283,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75',
+'71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100',
+'99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,282,98,106,107',
+',92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,',
+'283,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62',
+',83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,282,98,106,107,,92,93',
+'42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,626,,,,44,,,283',
+',,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83',
+'63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229',
+',,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,',
+',,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229,,,,,,,45,,,104,103',
+'105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222',
+',,228,,,58,59,,,60,,402,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73',
+',,,,,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103,105,94,56,96,95',
+'97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59',
+',,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75',
+'71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100',
+'99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,',
+'92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,',
+',,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83',
+'63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229',
+',,,,,,45,,,104,103,105,94,56,96,95,97,282,98,106,107,,92,93,42,43,41',
+',,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,280,,278,,44,,,283,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,,45',
+',,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,',
+',,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308',
+'72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94',
+'56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228',
+',,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28',
+'27,100,99,101,102,,,19,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106',
+'107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44',
+',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,',
+'83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102',
+',,229,,,,,,,45,,,104,103,105,94,56,96,95,97,282,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,283,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104',
+'103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,',
+',,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72',
+'73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56',
+'96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,',
+'58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304',
+'310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106',
+'107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44',
+',,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62',
+',83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229,,,,,,,45,,,104,103',
+'105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222',
+',,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,',
+',,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96',
+'95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58',
+'59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+'74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304',
+'310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106',
+'107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44',
+',,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62',
+',83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104',
+'103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,',
+',,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72',
+'73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56',
+'96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,',
+'58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304',
+'310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106',
+'107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44',
+',,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62',
+',83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104',
+'103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,',
+',,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72',
+'73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56',
+'96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,',
+'58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304',
+'310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106',
+'107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44',
+',,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62',
+',83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104',
+'103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,',
+',,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72',
+'73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56',
+'96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,',
+'58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304',
+'310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106',
+'107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44',
+',,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62',
+',83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229,,,,,,,45',
+',,104,103,105,94,56,96,95,97,282,98,106,107,,92,93,42,43,41,,,,,,,,',
+',,,,,,,,,,,222,,,228,,,58,59,,,60,,280,,278,,44,,,283,,,,,,227,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229,,,,,,,45,,,104',
+'103,105,94,56,96,95,97,282,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,',
+',,,,,222,,,228,,,58,59,,,60,,280,,278,,44,,,283,,,,,,227,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229,,,,,,,45,,,104,103,105',
+'94,56,96,95,97,282,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222',
+',,228,,,58,59,,,60,,280,,278,,44,,,283,,,,,,227,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,217,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307',
+'308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,305,,,104,103',
+'105,94,56,96,95,97,,98,106,107,,92,93,,,311,,,,,,,,,,,,,,,,,,,,854,',
+',228,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303',
+'304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,',
+'98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60',
+',,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71',
+',57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100',
+'99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,',
+'92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,',
+',,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83',
+'63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102',
+',,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43',
+'41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67',
+',65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,',
+'45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,',
+',,,,,,,,,,,222,,,228,,,58,59,,,60,,402,,,,44,,,,,,,,,227,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68',
+'307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103',
+'105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222',
+',,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,',
+',,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96',
+'95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58',
+'59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+'74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'100,99,101,102,,,19,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107',
+',92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,',
+',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83',
+'63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19',
+',,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,',
+',,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103',
+'105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222',
+',,228,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,',
+',,,82,90,,74,75,71,9,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,',
+',,29,28,27,100,99,101,102,,,19,,,,,,8,45,290,10,104,103,105,94,56,96',
+'95,97,,98,106,107,,92,93,42,43,41,237,241,246,247,248,243,245,253,254',
+'249,250,,230,231,,,251,252,,40,,,33,,,58,59,,,60,,35,234,,240,44,236',
+'235,,232,233,244,242,238,20,239,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',255,,,,386,62,,83,74,75,71,,57,,,,63,64,,,,67,,65,66,68,307,308,72',
+'73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56',
+'96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,',
+'58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304',
+'310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,282,98',
+'106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,',
+',278,,44,,,283,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75',
+'71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100',
+'99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,282,98,106,107',
+',92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,626,,278',
+',44,,,283,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71',
+',57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101',
+'102,,,19,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,20,',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,',
+'67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,',
+',,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,',
+',,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103,105',
+'94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,',
+'228,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,',
+',82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,100,99,101,102,,,19,,,,,,,45,,,104,103,105,94,56,96,95,97,,98',
+'106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,',
+',,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,9',
+'57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101',
+'102,,,19,,,,,,8,45,7,10,104,103,105,94,56,96,95,97,,98,106,107,,92,93',
+'42,43,41,237,241,246,247,248,243,245,253,254,249,250,,230,231,,,251',
+'252,,40,,,33,,,58,59,,,60,,35,234,,240,44,236,235,,232,233,244,242,238',
+'20,239,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,255,,,,386,62,,83,74,75',
+'71,,57,,,,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99',
+'101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,282,98,106,107,',
+'92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,280,,,,44',
+',,283,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57',
+'62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104',
+'103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,',
+',,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96',
+'95,97,282,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,',
+'58,59,,,60,,280,,278,,44,,,283,,,,,,227,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,',
+',,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103,105,94,56,96,95,97',
+',98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60',
+',,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71',
+',57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100',
+'99,101,102,,,229,,,,,,,305,,,104,103,105,351,56,96,95,352,,98,106,107',
+',92,93,,,311,,,,,,,,,,,,,,,,,,,,353,,,228,,,58,59,,,60,,,,,,,,,,,,,',
+',,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64',
+',,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229',
+',,,,,,305,,,104,103,105,351,56,96,95,352,,98,106,107,,92,93,,,311,,',
+',,,,,,,,,,,,,,358,,,353,,,228,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66',
+'68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,,,,,,305,,,104',
+'103,105,94,56,96,95,97,,98,106,107,,92,93,,,311,,,,,,,,,,,,,,,,,,,,346',
+',,33,,,58,59,,,60,,35,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,',
+'82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,100,99,101,102,,,19,,,,,,,45,,,104,103,105,94,56,96,95,97,,98',
+'106,107,,92,93,42,43,41,237,241,246,247,248,243,245,253,254,249,250',
+',230,231,,,251,252,,222,,,228,,,58,59,,,60,,,234,,240,44,236,235,,232',
+'233,244,242,238,20,239,,,,91,81,84,85,,86,88,87,89,,,,,82,90,112,255',
+',,,111,62,,83,74,75,71,,57,,,,63,64,,,,67,,65,66,68,307,308,72,73,,',
+',,,303,304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96',
+'95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58',
+'59,,,60,,,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+'74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304',
+'310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106',
+'107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44',
+',,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62',
+',83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101',
+'102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42',
+'43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,,,,,44,,,,,,,,,227',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,',
+',67,,65,66,68,307,308,72,73,,,,,,303,304,310,100,99,101,102,,,229,,',
+',,,,305,,,104,103,105,94,56,96,95,97,,98,106,107,,92,93,,,311,,,,,,',
+',,,,,,,,,,,,,301,,,297,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,',
+'86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103,105,94',
+'56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228',
+',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303',
+'304,310,100,99,101,102,,,229,,,,,,,45,,,104,103,105,94,56,96,95,97,',
+'98,106,107,,92,93,42,43,41,,,,,,,,,,,,,,,,,,,,222,,,228,,,58,59,,,60',
+',,,,,44,,,,,,,,,227,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71',
+',57,62,,83,63,64,,,,67,,65,66,68,307,308,72,73,,,,,,303,304,310,100',
+'99,101,102,,,229,,,,,,,305,,,104,103,105,94,56,96,95,97,,98,106,107',
+',92,93,,,311,,,,,,,,,,,,,,,,,,,,301,,,297,,,58,59,,,60,,,,,,,,,,,,,',
+',,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,229,,,,,',
+',45,,,104,103,105,94,56,96,95,97,282,98,106,107,,92,93,42,43,41,,,,',
+',,,,,,,,,,,,,,,222,,,228,,,58,59,,,60,,280,,278,,44,,,283,,,,,,227,',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,,74,75,71,9,57,62,,83,63,64,,',
+',67,,65,66,68,30,31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,8,45',
+',10,104,103,105,94,56,96,95,97,,98,106,107,,92,93,42,43,41,,,,,,,,,',
+',,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,74,75,71,,57,62,,83,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,100,99,101,102,,,19,,,,,,,45,,,104,103,105,94',
+'56,96,95,97,,98,106,107,,92,93,42,43,41,237,241,246,247,248,243,245',
+'253,254,249,250,,230,231,,,251,252,,222,,,228,,,58,59,,,60,,,234,,240',
+'44,236,235,,232,233,244,242,238,20,239,,,,91,81,84,85,,86,88,87,89,',
+',,,82,90,,255,-246,,,,62,,83,-246,-246,-246,,,-246,-246,-246,761,-246',
+'666,665,664,762,667,,,,-246,-246,,,,675,,,,,,-246,-246,,-246,-246,-246',
+'-246,-246,,,,,,,,,671,,,,,,,,,680,679,683,682,,,,676,,,,,,,,,-246,,-246',
+',,,,-246,,-246,-246,-246,262,-246,-246,-246,-246,217,-246,,,,,,,,,-246',
+'-246,-246,,,,,,-246,-246,,-246,-246,,-246,-246,-246,-246,-246,,,,,-246',
+',,-246,,,,,-246,,,,,,,,,,-246,-246,-246,-246,-246,-246,-246,-246,-246',
+'-246,-246,-246,-246,-246,,,-246,-246,-246,,,-246,,262,-246,,,-246,-246',
+',-246,,-246,,-246,,-246,-246,,-246,-246,-246,-246,-246,,-246,-246,-246',
+',,,,,,,,,,,,,-246,,-413,-246,-246,,-246,,-246,-413,-413,-413,,,-413',
+'-413,-413,,-413,,,,,,,,,-413,-413,-413,,,,,,,,,-413,-413,,-413,-413',
+'-413,-413,-413,,,,,,,,,,,,,,,,,,,,,,,-413,-413,-413,-413,-413,-413,-413',
+'-413,-413,-413,-413,-413,-413,-413,,,-413,-413,-413,,,-413,,262,-413',
+',,-413,-413,,-413,,-413,,-413,,-413,-413,,-413,-413,-413,-413,-413,-296',
+'-413,-413,-413,,,,-296,-296,-296,,,-296,-296,-296,,-296,-413,,,-413',
+'-413,,-413,,-413,-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,,271,-296,,,-296,-296,,-296',
+',-296,,-296,,-296,-296,,-296,-296,-296,-296,-296,,-296,,-296,,,,,,,',
+',,,,,,-296,,,-296,-296,,-296,,-296,172,183,173,196,169,189,179,178,199',
+'200,194,177,176,171,197,201,202,181,170,184,188,190,182,175,,,,191,198',
+'193,192,185,195,180,168,187,186,,,,,,167,174,165,166,162,163,164,123',
+'125,,,124,,,,,,,,156,157,,153,135,136,137,144,141,143,,,138,139,,,,158',
+'159,145,146,,,,,,,,,,,,,,150,149,,134,155,152,151,160,147,148,142,140',
+'132,154,133,,,161,91,,,,,,,,,,,,,,90,172,183,173,196,169,189,179,178',
+'199,200,194,177,176,171,197,201,202,181,170,184,188,190,182,175,,,,191',
+'198,193,192,185,195,180,168,187,186,,,,,,167,174,165,166,162,163,164',
+'123,125,122,,124,,,,,,,,156,157,,153,135,136,137,144,141,143,,,138,139',
+',,,158,159,145,146,,,,,,,,,,,,,,150,149,,134,155,152,151,160,147,148',
+'142,140,132,154,133,,,161,91,,,,,,,,,,,,,,90,172,183,173,196,169,189',
+'179,178,199,200,194,177,176,171,197,201,202,181,170,184,188,190,182',
+'175,,,,191,198,193,192,185,195,180,168,187,186,,,,,,167,174,165,166',
+'162,163,164,123,125,,,124,,,,,,,,156,157,,153,135,136,137,144,141,143',
+',,138,139,,,,158,159,145,146,,,,,,,,,,,,,,150,149,,134,155,152,151,160',
+'147,148,142,140,132,154,133,,,161,91,,,,,,,,,,,,,,90,172,183,173,196',
+'169,189,179,178,199,200,194,177,176,171,197,201,202,181,170,184,188',
+'190,182,175,,,,191,198,193,192,185,195,180,168,187,186,,,,,,167,174',
+'165,166,162,163,164,123,125,,,124,,,,,,,,156,157,,153,135,136,137,144',
+'141,143,,,138,139,,,,158,159,145,146,,,,,,,,,,,,,,150,149,,134,155,152',
+'151,160,147,148,142,140,132,154,133,,,161,91,,,,,,,,,,,,,,90,172,183',
+'173,196,169,189,179,178,199,200,194,177,176,171,197,201,202,181,170',
+'184,188,190,182,175,,,,191,198,193,192,185,195,180,168,187,186,,,,,',
+'167,174,165,166,162,163,164,123,125,,,124,,,,,,,,156,157,,153,135,136',
+'137,144,141,143,,,138,139,,,,158,159,145,146,,,,,,,,,,,,,,150,149,,134',
+'155,152,151,160,147,148,142,140,132,154,133,,,161,172,183,173,196,169',
+'189,179,178,199,200,194,177,176,171,197,201,202,181,170,184,188,190',
+'182,175,,,,191,198,193,369,368,370,367,168,187,186,,,,,,167,174,165',
+'166,364,365,366,362,125,96,95,363,,98,,,,,,156,157,,153,135,136,137',
+'144,141,143,,,138,139,,,,158,159,145,146,,,,,,374,,,,,,,,150,149,,134',
+'155,152,151,160,147,148,142,140,132,154,133,,,161,237,241,246,247,248',
+'243,245,253,254,249,250,,230,231,,,251,252,,,807,,666,665,664,673,667',
+',,,,,234,,240,675,236,235,,232,233,244,242,238,,239,237,241,246,247',
+'248,243,245,253,254,249,250,671,230,231,,,251,252,,255,,,683,682,,,',
+'676,,,,,234,,240,,236,235,,232,233,244,242,238,,239,237,241,246,247',
+'248,243,245,253,254,249,250,,230,231,,,251,252,,255,807,,666,665,664',
+'762,667,,,,,,234,,240,675,236,235,,232,233,244,242,238,,239,237,241',
+'246,247,248,243,245,253,254,249,250,671,230,231,,,251,252,,255,,,683',
+'682,,,,676,,,,,234,,240,,236,235,,232,233,244,242,238,,239,237,241,246',
+'247,248,243,245,253,254,249,250,,230,231,,,251,252,217,255,807,,666',
+'665,664,673,667,,,,,,234,,240,675,236,235,,232,233,244,242,238,,239',
+'237,241,246,247,248,243,245,253,254,249,250,671,230,231,,,251,252,,255',
+',,683,682,,,,676,,,,,234,,240,,236,235,,232,233,244,242,238,,239,237',
+'241,246,247,248,243,245,253,254,249,250,,230,231,,,251,252,,255,669',
+',666,665,664,673,667,,,,,,234,,240,675,236,235,,232,233,244,242,238',
+',239,237,241,246,247,248,243,245,253,254,249,250,671,230,231,,,251,252',
+',255,680,679,683,682,,,,676,,,,,234,,240,,236,235,,232,233,244,242,238',
+',239,237,241,246,247,248,243,245,253,254,249,250,,230,231,,,251,252',
+',255,,,,,,,,,,,,,234,,240,,236,235,,232,233,244,242,238,,239,,,,,,417',
+'421,,,416,,,,,,,,156,157,255,153,135,136,137,144,141,143,,,138,139,',
+',,158,159,145,146,,,,,,262,,,,,,,,150,149,,134,155,152,151,160,147,148',
+'142,140,132,154,133,639,421,161,,640,,,,,,,,156,157,,153,135,136,137',
+'144,141,143,,,138,139,,,,158,159,145,146,,,,,,262,,,,,,,,150,149,,134',
+'155,152,151,160,147,148,142,140,132,154,133,605,414,161,,606,,,,,,,',
+'156,157,,153,135,136,137,144,141,143,,,138,139,,,,158,159,145,146,,',
+',,,262,,,,,,,,150,149,,134,155,152,151,160,147,148,142,140,132,154,133',
+'968,421,161,,967,,,,,,,,156,157,,153,135,136,137,144,141,143,,,138,139',
+',,,158,159,145,146,,,,,,262,,,,,,,,150,149,,134,155,152,151,160,147',
+'148,142,140,132,154,133,636,414,161,,637,,,,,,,,156,157,,153,135,136',
+'137,144,141,143,,,138,139,,,,158,159,145,146,,,,,,262,,,,,,,,150,149',
+',134,155,152,151,160,147,148,142,140,132,154,133,472,414,161,,473,,',
+',,,,,156,157,,153,135,136,137,144,141,143,,,138,139,,,,158,159,145,146',
+',,,,,,,,,,,,,150,149,,134,155,152,151,160,147,148,142,140,132,154,133',
+'994,414,161,,995,,,,,,,,156,157,,153,135,136,137,144,141,143,,,138,139',
+',,,158,159,145,146,,,,,,262,,,,,,,,150,149,,134,155,152,151,160,147',
+'148,142,140,132,154,133,607,421,161,,608,,,,,,,,156,157,,153,135,136',
+'137,144,141,143,,,138,139,,,,158,159,145,146,,,,,,262,,,,,,,,150,149',
+',134,155,152,151,160,147,148,142,140,132,154,133,605,414,161,,606,,',
+',,,,,156,157,,153,135,136,137,144,141,143,,,138,139,,,,158,159,145,146',
+',,,,,262,,,,,,,,150,149,,134,155,152,151,160,147,148,142,140,132,154',
+'133,996,421,161,,997,,,,,,,,156,157,,153,135,136,137,144,141,143,,,138',
+'139,,,,158,159,145,146,,,,,,262,,,,,,,,150,149,,134,155,152,151,160',
+'147,148,142,140,132,154,133,472,414,161,,473,,,,,,,,156,157,,153,135',
+'136,137,144,141,143,,,138,139,,,,158,159,145,146,,,,,,262,,,,,,,,150',
+'149,,134,155,152,151,160,147,148,142,140,132,154,133,701,421,161,,702',
+',,,,,,,156,157,,153,135,136,137,144,141,143,,,138,139,,,,158,159,145',
+'146,,,,,,262,,,,,,,,150,149,,134,155,152,151,160,147,148,142,140,132',
+'154,133,607,421,161,,608,,,,,,,,156,157,,153,135,136,137,144,141,143',
+',,138,139,,,,158,159,145,146,,,,,,262,,,,,,,,150,149,,134,155,152,151',
+'160,147,148,142,140,132,154,133,698,421,161,,699,,,,,,,,156,157,,153',
+'135,136,137,144,141,143,,,138,139,,,,158,159,145,146,,,,,,262,,,,,,',
+',150,149,,134,155,152,151,160,147,148,142,140,132,154,133,696,414,161',
+',697,,,,,,,,156,157,,153,135,136,137,144,141,143,,,138,139,,,,158,159',
+'145,146,,,,,,262,,,,,,,,150,149,,134,155,152,151,160,147,148,142,140',
+'132,154,133,410,414,161,,411,,,,,,,,156,157,,153,135,136,137,144,141',
+'143,,,138,139,,,,158,159,145,146,,,,,,262,,,,,,,,150,149,,134,155,152',
+'151,160,147,148,142,140,132,154,133,,807,161,666,665,664,762,667,807',
+',666,665,664,762,667,807,675,666,665,664,762,667,,675,,,,,,761,675,666',
+'665,664,762,667,,,671,,,,,,675,671,,,,683,682,,671,,676,,683,682,,,',
+'676,,683,682,,671,,676,,,,,,,680,679,683,682,,,807,676,666,665,664,673',
+'667,807,,666,665,664,673,667,,675,,,,,,669,675,666,665,664,673,667,',
+',,,,,,,675,671,,,,,,,671,,,,683,682,,,,676,,683,682,,671,,676,,,,,,',
+'680,679,683,682,,,669,676,666,665,664,673,667,,669,,666,665,664,673',
+'667,675,,,,,,,,675,,669,,666,665,664,673,667,,,,,,671,655,,675,,,,,671',
+'680,679,683,682,,,,676,680,679,683,682,,,,676,671,,669,,666,665,664',
+'673,667,680,679,683,682,,,,676,675,,807,,666,665,664,673,667,,669,,666',
+'665,664,673,667,675,,,,,671,,,675,,,,,,680,679,683,682,,,,676,671,,',
+',,,,,671,711,,683,682,,,,676,680,679,683,682,,,761,676,666,665,664,762',
+'667,,761,,666,665,664,762,667,675,,,,,,,,675,,807,,666,665,664,762,667',
+',,,,,671,,,675,,,,,671,680,679,683,682,,,,676,680,679,683,682,,,,676',
+'671,,669,,666,665,664,673,667,,,683,682,,,,676,675,,,,,,,,,,,,,,,,,',
+',,,,671,711,,,,,,,,680,679,683,682,,,,676' ]
+ racc_action_table = arr = ::Array.new(24856, 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 = [
+'94,120,120,120,120,120,120,94,94,94,120,120,94,94,94,120,94,120,120',
+'120,120,120,120,120,94,617,94,94,94,120,120,120,120,120,120,120,94,94',
+'120,94,94,94,94,94,120,120,120,120,120,120,120,120,120,120,120,120,1016',
+'120,120,120,357,120,120,120,120,120,94,94,94,94,94,94,94,94,94,94,94',
+'94,94,94,1,538,94,94,94,120,94,94,120,822,94,120,120,94,94,120,94,120',
+'94,61,94,120,94,94,19,94,94,94,94,94,120,94,617,94,343,120,120,120,120',
+'478,120,120,120,120,58,605,994,94,120,120,94,94,94,94,607,94,120,94',
+'120,94,995,607,607,607,823,19,607,607,607,381,607,344,479,347,478,7',
+'996,557,557,607,607,607,607,545,58,337,357,1013,694,888,607,607,382',
+'607,607,607,607,607,605,863,336,24,521,521,654,538,61,479,24,357,538',
+'696,331,10,357,331,618,537,822,440,607,607,607,607,607,607,607,607,607',
+'607,607,607,607,607,697,381,607,607,607,12,607,607,470,343,607,647,647',
+'607,607,13,607,618,607,996,607,306,607,607,382,607,607,607,607,607,994',
+'607,607,607,823,994,637,557,440,823,636,16,557,470,995,223,344,607,347',
+'995,607,607,607,607,608,607,22,607,545,607,996,608,608,608,221,996,608',
+'608,608,337,608,1013,694,888,337,694,1013,694,888,654,608,608,608,863',
+'336,306,696,537,863,336,608,608,537,608,608,608,608,608,223,698,37,699',
+'637,14,572,647,636,26,306,697,14,434,434,561,561,327,40,221,327,14,608',
+'608,608,608,608,608,608,608,608,608,608,608,608,608,45,574,608,608,608',
+'220,608,608,637,108,608,637,636,608,608,636,608,637,608,377,608,636',
+'608,608,606,608,608,608,608,608,698,608,699,608,572,572,806,26,806,806',
+'806,893,806,893,572,376,749,608,351,380,608,608,608,608,417,608,203',
+'608,220,608,26,417,417,417,222,574,574,417,417,446,417,434,631,561,698',
+'574,699,606,631,417,365,363,352,377,377,377,79,365,363,224,417,417,588',
+'417,417,417,417,417,79,749,351,446,311,311,225,446,446,351,79,376,376',
+'376,351,380,380,380,351,229,806,261,417,417,417,417,417,417,417,417',
+'417,417,417,417,417,417,352,351,417,417,417,588,417,352,362,315,417',
+'588,352,417,383,362,352,275,417,276,417,379,417,417,701,417,417,417',
+'417,417,416,417,417,417,279,352,353,416,416,416,353,853,38,416,416,447',
+'416,417,853,328,417,417,328,417,368,417,315,853,775,417,3,368,315,639',
+'290,3,416,416,318,416,416,416,416,416,291,318,701,447,383,383,383,447',
+'447,701,318,379,379,379,701,38,912,653,701,912,653,38,416,416,416,416',
+'416,416,416,416,416,416,416,416,416,416,775,701,416,416,416,639,416',
+'775,293,556,416,294,639,416,556,15,775,639,416,378,416,639,416,416,295',
+'416,416,416,416,416,97,416,301,416,39,775,304,97,97,97,639,410,97,97',
+'97,923,97,416,335,335,416,416,923,416,97,416,97,97,97,416,826,923,15',
+'984,984,826,97,97,15,97,97,97,97,97,943,369,943,943,943,997,943,39,369',
+'378,378,378,997,39,410,794,794,997,305,411,410,997,97,97,97,97,97,97',
+'97,97,97,97,97,97,97,97,310,840,97,97,97,505,97,97,219,312,97,840,505',
+'97,97,219,97,316,97,317,97,505,97,97,219,97,97,97,97,97,411,97,299,97',
+'366,364,411,320,286,299,325,366,364,286,840,840,943,97,299,840,97,97',
+'97,97,422,97,329,97,372,97,330,422,422,422,791,372,422,422,422,803,422',
+'803,803,803,791,803,298,465,370,422,422,422,422,298,340,370,685,685',
+'332,340,422,422,298,422,422,422,422,422,367,712,17,17,341,466,712,367',
+'803,791,791,465,41,41,791,465,465,803,465,465,342,346,422,422,422,422',
+'422,422,422,422,422,422,422,422,422,422,348,466,422,422,422,466,466',
+'422,466,466,422,392,398,422,422,400,422,403,422,406,422,408,422,422',
+'409,422,422,422,422,422,345,422,422,422,418,426,883,345,883,883,883',
+'436,883,448,449,450,345,422,451,355,422,422,422,422,476,422,355,422',
+'0,0,0,0,0,0,122,355,480,0,0,122,122,495,0,883,0,0,0,0,0,0,0,496,883',
+'499,501,506,0,0,0,0,0,0,0,510,671,0,671,671,671,519,671,0,0,0,0,0,0',
+'0,0,0,0,0,0,520,0,0,0,916,0,0,0,0,0,1003,916,1003,1003,1003,522,1003',
+'548,671,983,916,983,983,983,548,983,534,671,539,0,302,540,0,548,569',
+'0,0,302,577,0,579,0,585,589,594,0,302,1003,599,981,609,981,981,981,0',
+'981,983,611,616,0,0,0,0,623,0,0,0,0,625,630,633,635,0,0,228,228,228',
+'228,228,228,0,638,0,228,228,641,981,642,228,645,228,228,228,228,228',
+'228,228,6,6,6,6,6,228,228,228,228,228,228,228,646,944,228,944,944,944',
+'648,944,228,228,228,228,228,228,228,228,228,228,228,228,651,228,228',
+'228,657,228,228,228,228,228,459,885,702,885,885,885,658,885,944,702',
+'660,661,662,669,702,677,459,459,702,228,681,684,228,687,692,228,228',
+'695,704,228,709,228,459,728,459,228,459,459,885,459,459,733,751,459',
+'228,459,752,754,755,228,228,228,228,756,228,228,228,228,758,759,760',
+'761,228,228,710,710,710,710,710,710,228,765,228,710,710,769,770,774',
+'710,778,710,710,710,710,710,710,710,289,289,289,289,289,710,710,710',
+'710,710,710,710,781,966,710,966,966,966,782,966,710,710,710,710,710',
+'710,710,710,710,710,710,710,785,710,710,710,790,710,710,710,710,710',
+'461,461,461,461,461,461,461,922,640,461,461,924,805,808,922,640,461',
+'461,924,710,640,813,710,922,640,710,710,924,816,710,825,710,461,829',
+'461,710,461,461,830,461,461,461,461,461,710,461,833,834,850,710,710',
+'710,710,854,710,710,710,710,856,869,870,874,710,710,621,621,621,621',
+'621,621,710,875,710,621,621,877,878,880,621,882,621,621,621,621,621',
+'621,621,493,493,493,493,493,621,621,621,621,621,621,621,565,565,621',
+'884,565,565,565,890,621,621,621,621,621,621,621,621,621,621,621,621',
+'891,621,621,621,897,621,621,621,621,621,445,445,445,445,445,445,445',
+'445,445,445,445,926,445,445,46,902,445,445,926,621,905,46,621,906,907',
+'621,621,926,908,621,46,621,445,910,445,621,445,445,925,445,445,445,445',
+'445,621,445,928,929,945,621,621,621,621,967,621,621,621,621,968,969',
+'976,977,621,621,954,954,954,954,954,954,621,978,621,954,954,979,980',
+'982,954,985,954,954,954,954,954,954,954,986,987,988,989,990,954,954',
+'954,954,954,954,954,993,851,954,851,851,851,1004,851,954,954,954,954',
+'954,954,954,954,954,954,954,954,1014,954,954,954,1015,954,954,954,954',
+'954,468,468,468,468,468,468,468,468,973,468,468,300,,,,973,468,468,300',
+'954,,,954,,973,954,954,300,,954,,954,468,,468,954,468,468,,468,468,468',
+'468,468,954,468,,,,954,954,954,954,,954,954,954,954,,,,,954,954,620',
+'620,620,620,620,620,954,,954,620,620,,,,620,,620,620,620,620,620,620',
+'620,,,,,,620,620,620,620,620,620,620,,,620,,,,,429,620,620,620,620,620',
+'620,620,620,620,620,620,620,,620,620,620,,620,620,620,620,620,429,429',
+'429,429,429,429,429,429,429,429,429,,429,429,,,429,429,,620,,,620,,',
+'620,620,,,620,,620,429,,429,620,429,429,,429,429,429,429,429,620,429',
+',,,620,620,620,620,,620,620,620,620,,,,,620,620,,429,56,429,,,620,,620',
+'56,56,56,,,56,56,56,458,56,,,,,,,,,,56,56,56,,,458,458,,,,56,56,,56',
+'56,56,56,56,,,,458,,458,,458,458,,458,458,,,458,,458,,,,,,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,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,467,467',
+'467,467,467,467,467,,,467,467,,,,,,467,467,,615,,,615,,,615,615,,,615',
+',615,467,,467,615,467,467,,467,467,467,467,467,615,467,,,,615,615,615',
+'615,,615,615,615,615,,,,,615,615,323,323,323,323,323,323,615,,615,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,460,460,460,460,460,460,460,,,460,460,',
+',,,,460,460,,323,,,323,,,323,323,,,323,,323,460,,460,323,460,460,,460',
+'460,460,460,460,323,460,,,,323,323,323,323,,323,323,323,323,,,,,323',
+'323,297,297,297,297,297,297,323,,323,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',
+'463,463,463,463,463,463,463,,,463,463,,,,,,463,463,,297,,,297,,,297',
+'297,,,297,,297,463,,463,297,463,463,,463,463,463,463,463,297,463,,,',
+'297,297,297,297,,297,297,297,297,,,,,297,297,558,558,558,558,558,558',
+'297,,297,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,444,444,444,444,444,444,444,444',
+'444,444,444,,444,444,,,444,444,,558,,,558,,,558,558,,,558,,558,444,',
+'444,558,444,444,,444,444,444,444,444,558,444,,,,558,558,558,558,,558',
+'558,558,558,,,,,558,558,921,921,921,921,921,921,558,,558,921,921,,,',
+'921,,921,921,921,921,921,921,921,,,,,,921,921,921,921,921,921,921,,',
+'921,,,,,,921,921,921,921,921,921,921,921,921,921,921,921,,921,921,921',
+',921,921,921,921,921,462,462,462,462,462,462,462,,,462,462,,,,,,462',
+'462,,921,,,921,,,921,921,,,921,,921,462,,462,921,462,462,,462,462,462',
+'462,462,921,462,,,,921,921,921,921,,921,921,921,921,,,,,921,921,817',
+'817,817,817,817,817,921,,921,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,457,,',
+',,,,,,,,,,,,,457,457,,817,,,817,,,817,817,,,817,,817,457,,457,817,457',
+'457,,457,457,,,457,817,457,,,,817,817,817,817,,817,817,817,817,,,,,817',
+'817,818,818,818,818,818,818,817,,817,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',
+'456,,,,,,,,,,,,,,,,456,456,,818,,,818,,,818,818,,,818,,818,456,,456',
+'818,456,456,,456,456,,,456,818,456,,,,818,818,818,818,,818,818,818,818',
+',,,,818,818,860,860,860,860,860,860,818,,818,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,455,455,455,455,455,455,455,,,455,455,,,,,,455,455,,860,,,860',
+',,860,860,,,860,,860,455,,455,860,455,455,,455,455,455,455,455,860,455',
+',,,860,860,860,860,,860,860,860,860,,,,,860,860,536,536,536,536,536',
+'536,860,,860,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,464,464,464,464,464,464,464',
+',,464,464,,,,,,464,464,,536,,,536,,,536,536,,,536,,536,464,,464,536',
+'464,464,,464,464,464,464,464,536,464,,,,536,536,536,536,,536,536,536',
+'536,,,,,536,536,494,494,494,494,494,494,536,,536,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,452,,,,,,,,,,,,,,,,452,452,,494,,,494,,,494,494,,,494,,494',
+'452,,452,494,452,452,,452,452,,,,494,,,,,494,494,494,494,,494,494,494',
+'494,,,,,494,494,533,533,533,533,533,533,494,,494,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,453,,,,,,,,,,,,,,,,453,453,,533,,,533,,,533,533,,,533,,533',
+'453,,453,533,453,453,,453,453,,,,533,,,,,533,533,533,533,,533,533,533',
+'533,,,,,533,533,867,867,867,867,867,867,533,,533,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,454,,,,,,,,,,,,,,,,454,454,,867,,,867,,,867,867,,,867,,867',
+'454,,,867,454,454,,454,454,,,,867,,,,,867,867,867,867,,867,867,867,867',
+',,,,867,867,868,868,868,868,868,868,867,,867,868,868,,,,868,,868,868',
+'868,868,868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,868',
+'868,868,868,868,868,868,868,868,868,868,868,,868,868,868,,868,868,868',
+'868,868,,,,,,,,,,,,,,,,,,,,868,,,868,,,868,868,,,868,,868,,,,868,,,',
+',,,,,868,,,,,868,868,868,868,,868,868,868,868,,,,,868,868,821,821,821',
+'821,821,821,868,,868,821,821,,,,821,,821,821,821,821,821,821,821,,,',
+',,821,821,821,821,821,821,821,,,821,,,,,,821,821,821,821,821,821,821',
+'821,821,821,821,821,,821,821,821,,821,821,821,821,821,,,,,,,,,,,,,,',
+',,,,,821,,,821,,,821,821,,,821,,821,,,,821,,,,,,,,,821,,,,,821,821,821',
+'821,,821,821,821,821,,,,,821,821,205,205,205,205,205,205,821,,821,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,205,205,',
+',,,205,205,33,33,33,33,33,33,205,,205,33,33,,,,33,,33,33,33,33,33,33',
+'33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,33,33,33,33,33,33,33,33,33,33',
+'33,33,,33,33,33,,33,33,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,',
+',33,,33,,,,33,,,,,,,,,33,,,,,33,33,33,33,,33,33,33,33,,,,,33,33,780',
+'780,780,780,780,780,33,,33,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,780,780,,,,,780,780,946,946,946,946,946,946,780,,780',
+'946,946,,,,946,,946,946,946,946,946,946,946,,,,,,946,946,946,946,946',
+'946,946,,,946,,,,,,946,946,946,946,946,946,946,946,946,946,946,946,',
+'946,946,946,,946,946,946,946,946,,,,,,,,,,,,,,,,,,,,946,,,946,,,946',
+'946,,,946,,946,,,,946,,,,,,,,,946,,,,,946,946,946,946,,946,946,946,946',
+',,,,946,946,705,705,705,705,705,705,946,,946,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,952,952,952',
+'952,952,952,705,,705,952,952,,,,952,,952,952,952,952,952,952,952,,,',
+',,952,952,952,952,952,952,952,,,952,,,,,,952,952,952,952,952,952,952',
+'952,952,952,952,952,,952,952,952,,952,952,952,952,952,,,,,,,,,,,,,,',
+',,,,,952,,,952,,,952,952,,,952,,952,,,,952,,,,,,,,,952,,,,,952,952,952',
+'952,,952,952,952,952,,,,,952,952,292,292,292,292,292,292,952,,952,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,768,768,768,768,768,768,292,,292,768,768,,,,768,,768,768',
+'768,768,768,768,768,,,,,,768,768,768,768,768,768,768,,,768,,,,,,768',
+'768,768,768,768,768,768,768,768,768,768,768,,768,768,768,,768,768,768',
+'768,768,,,,,,,,,,,,,,,,,,,,768,,,768,,,768,768,,,768,,768,,,,768,,,',
+',,,,,768,,,,,768,768,768,768,,768,768,768,768,,,,,768,768,827,827,827',
+'827,827,827,768,,768,827,827,,,,827,,827,827,827,827,827,827,827,,,',
+',,827,827,827,827,827,827,827,,,827,,,,,610,827,827,827,827,827,827',
+'827,827,827,827,827,827,,827,827,827,,827,827,827,827,827,610,610,610',
+'610,610,610,610,610,610,610,610,,610,610,,,610,610,,827,,,827,,,827',
+'827,,,827,,827,610,,610,827,610,610,,610,610,610,610,610,827,610,,,',
+'827,827,827,827,,827,827,827,827,,,,,827,827,,610,421,,,,827,,827,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,,421,,421,720,720,720,720,720,720,,,,720,720,,,,720,,720',
+'720,720,720,720,720,720,,,,,,720,720,720,720,720,720,720,,,720,,,,,',
+'720,720,720,720,720,720,720,720,720,720,720,720,,720,720,720,,720,720',
+'720,720,720,,,,,,,,,,,,,,,,,,,,720,,,720,,,720,720,,,720,,720,,,,720',
+',,,,,,,,720,,,,,720,720,720,720,,720,720,720,720,,,,,720,720,,282,282',
+'282,,282,720,,720,282,282,,,,282,,282,282,282,282,282,282,282,,,,,,282',
+'282,282,282,282,282,282,,,282,,,,,,,282,,,282,282,282,282,282,282,282',
+'282,,282,282,282,,282,282,282,282,282,,,,,,,,,,,,,,,,,,,,282,,,282,',
+',282,282,,,282,,,,,,282,,,,,,,,,282,,,,,282,282,282,282,,282,282,282',
+'282,,,,,282,282,,283,283,283,,283,282,,282,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,,233,233,233,,233,283,,283',
+'233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233,233,233,233',
+'233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233,,233,233,233',
+',233,233,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233,,',
+',,,233,,,,,,,,,233,,,,,233,233,233,233,,233,233,233,233,,,,,233,233',
+',232,232,232,,232,233,,233,232,232,,,,232,,232,232,232,232,232,232,232',
+',,,,,232,232,232,232,232,232,232,,,232,,,,,,,232,,,232,232,232,232,232',
+'232,232,232,,232,232,232,,232,232,232,232,232,,,,,,,,,,,,,,,,,,,,232',
+',,232,,,232,232,,,232,,,,,,232,,,,,,,,,232,,,,,232,232,232,232,,232',
+'232,232,232,,,,,232,232,,643,643,643,,643,232,,232,643,643,,,,643,,643',
+'643,643,643,643,643,643,,,,,,643,643,643,643,643,643,643,,,643,,,,,',
+',643,,,643,643,643,643,643,643,643,643,,643,643,643,,643,643,,,643,',
+',,,,,,,,,,,,,,,,,,643,,,643,,,643,643,,,643,,,,,,,,,,,,,,,,,,,,643,643',
+'643,643,,643,643,643,643,,,,,643,643,,231,231,231,,231,643,,643,231',
+'231,,,,231,,231,231,231,231,231,231,231,,,,,,231,231,231,231,231,231',
+'231,,,231,,,,,,,231,,,231,231,231,231,231,231,231,231,,231,231,231,',
+'231,231,231,231,231,,,,,,,,,,,,,,,,,,,,231,,,231,,,231,231,,,231,,,',
+',,231,,,,,,,,,231,,,,,231,231,231,231,,231,231,231,231,,,,,231,231,',
+'230,230,230,,230,231,,231,230,230,,,,230,,230,230,230,230,230,230,230',
+',,,,,230,230,230,230,230,230,230,,,230,,,,,,,230,,,230,230,230,230,230',
+'230,230,230,,230,230,230,,230,230,230,230,230,,,,,,,,,,,,,,,,,,,,230',
+',,230,,,230,230,,,230,,,,,,230,,,,,,,,,230,,,,,230,230,230,230,,230',
+'230,230,230,,,,,230,230,,20,20,20,,20,230,,230,20,20,,,,20,,20,20,20',
+'20,20,20,20,,,,,,20,20,20,20,20,20,20,,,20,,,,,,,20,,,20,20,20,20,20',
+'20,20,20,,20,20,20,,20,20,20,20,20,,,,,,,,,,,,,,,,,,,,20,,,20,,,20,20',
+',,20,,,,,,20,,,,,,,,,20,,,,,20,20,20,20,,20,20,20,20,,,,,20,20,,801',
+'801,801,,801,20,,20,801,801,,,,801,,801,801,801,801,801,801,801,,,,',
+',801,801,801,801,801,801,801,,,801,,,,,,,801,,,801,801,801,801,801,801',
+'801,801,,801,801,801,,801,801,801,801,801,,,,,,,,,,,,,,,,,,,,801,,,801',
+',,801,801,,,801,,,,,,801,,,,,,,,,801,,,,,801,801,801,801,,801,801,801',
+'801,,,,,801,801,,288,288,288,288,288,801,,801,288,288,,,,288,,288,288',
+'288,288,288,288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,,288',
+'288,,288,288,288,288,288,288,288,288,288,,288,288,288,,288,288,288,288',
+'288,,,,,,,,,,,,,,,,,,,,288,,,288,,,288,288,,,288,,288,,,,288,,,,,,,',
+',288,,,,,288,288,288,288,,288,288,288,288,,,,,288,288,,815,815,815,',
+'815,288,,288,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',
+',,,,815,815,,820,820,820,,820,815,,815,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,,,,,,,,,,',
+',,,,,,,,,820,,,820,,,820,820,,,820,,820,,,,820,,,,,,,,,820,,,,,820,820',
+'820,820,,820,820,820,820,,,,,820,820,,247,247,247,,247,820,,820,247',
+'247,,,,247,,247,247,247,247,247,247,247,,,,,,247,247,247,247,247,247',
+'247,,,247,,,,,,,247,,,247,247,247,247,247,247,247,247,,247,247,247,',
+'247,247,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247,,,247,247,,,247,,,',
+',,247,,,,,,,,,247,,,,,247,247,247,247,,247,247,247,247,,,,,247,247,',
+'227,227,227,,227,247,,247,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,,29,29,29,,29,227,,227,29,29,,,,29,,29,29,29',
+'29,29,29,29,,,,,,29,29,29,29,29,29,29,,,29,,,,,,,29,,,29,29,29,29,29',
+'29,29,29,29,29,29,29,,29,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,,296,296,296,,296,31,,31,296,296,,,,296',
+',296,296,296,296,296,296,296,,,,,,296,296,296,296,296,296,296,,,296',
+',,,,405,,296,,,296,296,296,296,296,296,296,296,,296,296,296,,296,296',
+',,296,405,405,405,405,405,405,405,405,405,405,405,,405,405,,,405,405',
+',296,,,296,,,296,296,,,296,,,405,,405,,405,405,,405,405,405,405,405',
+',405,,,,296,296,296,296,,296,296,296,296,,,,,296,296,,405,,296,,,296',
+',296,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,,837,837,837,,837,632,,632,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,,,,,837,837,,838,838,838,,838,837',
+',837,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',
+',626,626,626,,626,838,,838,626,626,,,,626,,626,626,626,626,626,626,626',
+',,,,,626,626,626,626,626,626,626,,,626,,,,,,,626,,,626,626,626,626,626',
+'626,626,626,,626,626,626,,626,626,626,626,626,,,,,,,,,,,,,,,,,,,,626',
+',,626,,,626,626,,,626,,,,,,626,,,,,,,,,626,,,,,626,626,626,626,,626',
+'626,626,626,,,,,626,626,,852,852,852,,852,626,,626,852,852,,,,852,,852',
+'852,852,852,852,852,852,,,,,,852,852,852,852,852,852,852,,,852,,,,,',
+',852,,,852,852,852,852,852,852,852,852,,852,852,852,,852,852,,,852,',
+',,,,,,,,,,,,,,,,,,852,,,852,,,852,852,,,852,,,,,,,,,,,,,,,,,,,,852,852',
+'852,852,,852,852,852,852,,,,,852,852,,602,602,602,,602,852,,852,602',
+'602,,,,602,,602,602,602,602,602,602,602,,,,,,602,602,602,602,602,602',
+'602,,,602,,,,,,,602,,,602,602,602,602,602,602,602,602,,602,602,602,',
+'602,602,602,602,602,,,,,,,,,,,,,,,,,,,,602,,,602,,,602,602,,,602,,,',
+',,602,,,,,,,,,602,,,,,602,602,602,602,,602,602,602,602,,,,,602,602,',
+'601,601,601,,601,602,,602,601,601,,,,601,,601,601,601,601,601,601,601',
+',,,,,601,601,601,601,601,601,601,,,601,,,,,,,601,,,601,601,601,601,601',
+'601,601,601,,601,601,601,,601,601,601,601,601,,,,,,,,,,,,,,,,,,,,601',
+',,601,,,601,601,,,601,,,,,,601,,,,,,,,,601,,,,,601,601,601,601,,601',
+'601,601,601,,,,,601,601,,864,864,864,,864,601,,601,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,,598,598,598,,598,864,,864,598',
+'598,,,,598,,598,598,598,598,598,598,598,,,,,,598,598,598,598,598,598',
+'598,,,598,,,,,,,598,,,598,598,598,598,598,598,598,598,,598,598,598,',
+'598,598,598,598,598,,,,,,,,,,,,,,,,,,,,598,,,598,,,598,598,,,598,,,',
+',,598,,,,,,,,,598,,,,,598,598,598,598,,598,598,598,598,,,,,598,598,',
+'597,597,597,,597,598,,598,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,,34,34,34,,34,597,,597,34,34,,,,34,,34,34,34',
+'34,34,34,34,,,,,,34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34',
+'34,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,,,,,,,35,,,35,35,35,35,35,35,35,35,,35,35,35,,35,35,,,35,735',
+'735,735,735,735,735,735,735,735,735,735,,735,735,,,735,735,,35,,,35',
+',,35,35,,,35,,,735,,735,,735,735,,735,735,735,735,735,,735,,,,35,35',
+'35,35,,35,35,35,35,,,,,35,35,,735,,35,,,35,,35,216,216,216,,216,,,,216',
+'216,,,,216,,216,216,216,216,216,216,216,,,,,,216,216,216,216,216,216',
+'216,,,216,,,,,,,216,,,216,216,216,216,216,216,216,216,,216,216,216,',
+'216,216,216,216,216,,,,,,,,,,,,,,,,,,,,216,,,216,,,216,216,,,216,,,',
+',,216,,,,,,,,,216,,,,,216,216,216,216,,216,216,216,216,,,,,216,216,216',
+'5,5,5,5,5,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,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,,5,5,5,5,,,,,5,5,,593,593',
+'593,,593,5,,5,593,593,,,,593,,593,593,593,593,593,593,593,,,,,,593,593',
+'593,593,593,593,593,,,593,,,,,,,593,,,593,593,593,593,593,593,593,593',
+',593,593,593,,593,593,593,593,593,,,,,,,,,,,,,,,,,,,,593,,,593,,,593',
+'593,,,593,,,,,,593,,,,,,,,,593,,,,,593,593,593,593,,593,593,593,593',
+',,,,593,593,,592,592,592,,592,593,,593,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,,591,591,591,,591,592,,592,591',
+'591,,,,591,,591,591,591,591,591,591,591,,,,,,591,591,591,591,591,591',
+'591,,,591,,,,,,,591,,,591,591,591,591,591,591,591,591,591,591,591,591',
+',591,591,591,591,591,,,,,,,,,,,,,,,,,,,,591,,,591,,,591,591,,,591,,',
+',591,,591,,,591,,,,,,591,,,,,591,591,591,591,,591,591,591,591,,,,,591',
+'591,,590,590,590,,590,591,,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,,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,,313,313,313,,313,590,,590',
+'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,,215,215,215',
+',215,313,,313,215,215,,,,215,,215,215,215,215,215,215,215,,,,,,215,215',
+'215,215,215,215,215,,,215,,,,,,,215,,,215,215,215,215,215,215,215,215',
+',215,215,215,,215,215,215,215,215,,,,,,,,,,,,,,,,,,,,215,,,215,,,215',
+'215,,,215,,,,,,215,,,,,,,,,215,,,,,215,215,215,215,,215,215,215,215',
+',,,,215,215,,587,587,587,,587,215,,215,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,,586,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',
+',214,214,214,,214,586,,586,214,214,,,,214,,214,214,214,214,214,214,214',
+',,,,,214,214,214,214,214,214,214,,,214,,,,,,,214,,,214,214,214,214,214',
+'214,214,214,,214,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,214,,214,213,213,,,,213,,213',
+'213,213,213,213,213,213,,,,,,213,213,213,213,213,213,213,,,213,,,,,',
+',213,,,213,213,213,213,213,213,213,213,,213,213,213,,213,213,213,213',
+'213,,,,,,,,,,,,,,,,,,,,213,,,213,,,213,213,,,213,,,,,,213,,,,,,,,,213',
+',,,,213,213,213,213,,213,213,213,213,,,,,213,213,,212,212,212,,212,213',
+',213,212,212,,,,212,,212,212,212,212,212,212,212,,,,,,212,212,212,212',
+'212,212,212,,,212,,,,,,,212,,,212,212,212,212,212,212,212,212,,212,212',
+'212,,212,212,212,212,212,,,,,,,,,,,,,,,,,,,,212,,,212,,,212,212,,,212',
+',212,,,,212,,,,,,,,,212,,,,,212,212,212,212,,212,212,212,212,,,,,212',
+'212,,322,322,322,,322,212,,212,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,,324,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,,211,211,211',
+',211,324,,324,211,211,,,,211,,211,211,211,211,211,211,211,,,,,,211,211',
+'211,211,211,211,211,,,211,,,,,,,211,,,211,211,211,211,211,211,211,211',
+',211,211,211,,211,211,211,211,211,,,,,,,,,,,,,,,,,,,,211,,,211,,,211',
+'211,,,211,,,,,,211,,,,,,,,,211,,,,,211,211,211,211,,211,211,211,211',
+',,,,211,211,,552,552,552,,552,211,,211,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,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',
+'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,,,,,541,541,,700,700,700,,700,541,,541',
+'700,700,,,,700,,700,700,700,700,700,700,700,,,,,,700,700,700,700,700',
+'700,700,,,700,,,,,,,700,,,700,700,700,700,700,700,700,700,,700,700,700',
+',700,700,700,700,700,,,,,,,,,,,,,,,,,,,,700,,,700,,,700,700,,,700,,',
+',,,700,,,,,,,,,700,,,,,700,700,700,700,,700,700,700,700,,,,,700,700',
+',42,42,42,,42,700,,700,42,42,,,,42,,42,42,42,42,42,42,42,,,,,,42,42',
+'42,42,42,42,42,,,42,,,,,,,42,,,42,42,42,42,42,42,42,42,,42,42,42,,42',
+'42,42,42,42,,,,,,,,,,,,,,,,,,,,42,,,42,,,42,42,,,42,,,,,,42,,,,,,,,',
+'42,,,,,42,42,42,42,,42,42,42,42,,,,,42,42,,208,208,208,,208,42,,42,208',
+'208,,,,208,,208,208,208,208,208,208,208,,,,,,208,208,208,208,208,208',
+'208,,,208,,,,,,,208,,,208,208,208,208,208,208,208,208,208,208,208,208',
+',208,208,208,208,208,,,,,,,,,,,,,,,,,,,,208,,,208,,,208,208,,,208,,208',
+',208,,208,,,208,,,,,,208,,,,,208,208,208,208,,208,208,208,208,,,,,208',
+'208,,527,527,527,,527,208,,208,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,,524,524,524,,524,527,,527,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',
+',207,207,207,,207,524,,524,207,207,,,,207,,207,207,207,207,207,207,207',
+',,,,,207,207,207,207,207,207,207,,,207,,,,,,,207,,,207,207,207,207,207',
+'207,207,207,,207,207,207,,207,207,207,207,207,,,,,,,,,,,,,,,,,,,,207',
+',,207,,,207,207,,,207,,,,,,207,,,,,,,,,207,,,,,207,207,207,207,,207',
+'207,207,207,,,,,207,207,,206,206,206,,206,207,,207,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,,518,518,518,',
+'518,206,,206,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,,43,43,43,,43,518,,518,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,,502,502,502,,502',
+'43,,43,502,502,,,,502,,502,502,502,502,502,502,502,,,,,,502,502,502',
+'502,502,502,502,,,502,,,,,,,502,,,502,502,502,502,502,502,502,502,502',
+'502,502,502,,502,502,502,502,502,,,,,,,,,,,,,,,,,,,,502,,,502,,,502',
+'502,,,502,,502,,502,,502,,,502,,,,,,502,,,,,502,502,502,502,,502,502',
+'502,502,,,,,502,502,,374,374,374,,374,502,,502,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,,402,402,402,,402,374',
+',374,402,402,,,,402,,402,402,402,402,402,402,402,,,,,,402,402,402,402',
+'402,402,402,,,402,,,,,,,402,,,402,402,402,402,402,402,402,402,,402,402',
+'402,,402,402,402,402,402,,,,,,,,,,,,,,,,,,,,402,,,402,,,402,402,,,402',
+',,,,,402,,,,,,,,,402,,,,,402,402,402,402,,402,402,402,402,,,,,402,402',
+',63,63,63,,63,402,,402,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,,60,60,60,,60,63,,63,60,60',
+',,,60,,60,60,60,60,60,60,60,,,,,,60,60,60,60,60,60,60,,,60,,,,,,,60',
+',,60,60,60,60,60,60,60,60,60,60,60,60,,60,60,60,60,60,,,,,,,,,,,,,,',
+',,,,,60,,,60,,,60,60,,,60,,,,,,60,,,60,,,,,,60,,,,,60,60,60,60,,60,60',
+'60,60,,,,,60,60,,249,249,249,,249,60,,60,249,249,,,,249,,249,249,249',
+'249,249,249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249',
+'249,249,249,249,249,249,249,,249,249,249,,249,249,249,249,249,,,,,,',
+',,,,,,,,,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,,249,,,,,249',
+'249,249,249,,249,249,249,249,,,,,249,249,,246,246,246,,246,249,,249',
+'246,246,,,,246,,246,246,246,246,246,246,246,,,,,,246,246,246,246,246',
+'246,246,,,246,,,,,,,246,,,246,246,246,246,246,246,246,246,,246,246,246',
+',246,246,246,246,246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,',
+',,,246,,,,,,,,,246,,,,,246,246,246,246,,246,246,246,246,,,,,246,246',
+',245,245,245,,245,246,,246,245,245,,,,245,,245,245,245,245,245,245,245',
+',,,,,245,245,245,245,245,245,245,,,245,,,,,,,245,,,245,245,245,245,245',
+'245,245,245,,245,245,245,,245,245,245,245,245,,,,,,,,,,,,,,,,,,,,245',
+',,245,,,245,245,,,245,,,,,,245,,,,,,,,,245,,,,,245,245,245,245,,245',
+'245,245,245,,,,,245,245,,250,250,250,,250,245,,245,250,250,,,,250,,250',
+'250,250,250,250,250,250,,,,,,250,250,250,250,250,250,250,,,250,,,,,',
+',250,,,250,250,250,250,250,250,250,250,,250,250,250,,250,250,250,250',
+'250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250,,,,,,250,,,,,,,,,250',
+',,,,250,250,250,250,,250,250,250,250,,,,,250,250,,729,729,729,,729,250',
+',250,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',
+',244,244,244,,244,729,,729,244,244,,,,244,,244,244,244,244,244,244,244',
+',,,,,244,244,244,244,244,244,244,,,244,,,,,,,244,,,244,244,244,244,244',
+'244,244,244,,244,244,244,,244,244,244,244,244,,,,,,,,,,,,,,,,,,,,244',
+',,244,,,244,244,,,244,,,,,,244,,,,,,,,,244,,,,,244,244,244,244,,244',
+'244,244,244,,,,,244,244,,731,731,731,,731,244,,244,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,,251,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,251,251,,251,251',
+'251,,251,251,251,251,251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251,,,251',
+',,,,,251,,,,,,,,,251,,,,,251,251,251,251,,251,251,251,251,,,,,251,251',
+',243,243,243,,243,251,,251,243,243,,,,243,,243,243,243,243,243,243,243',
+',,,,,243,243,243,243,243,243,243,,,243,,,,,,,243,,,243,243,243,243,243',
+'243,243,243,,243,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,,242,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,,673,673,673,,673,242',
+',242,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',
+',241,241,241,,241,673,,673,241,241,,,,241,,241,241,241,241,241,241,241',
+',,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241,241,241',
+'241,241,241,,241,241,241,,241,241,241,241,241,,,,,,,,,,,,,,,,,,,,241',
+',,241,,,241,241,,,241,,,,,,241,,,,,,,,,241,,,,,241,241,241,241,,241',
+'241,241,241,,,,,241,241,,240,240,240,,240,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,,745,745,745,,745,240',
+',240,745,745,,,,745,,745,745,745,745,745,745,745,,,,,,745,745,745,745',
+'745,745,745,,,745,,,,,,,745,,,745,745,745,745,745,745,745,745,,745,745',
+'745,,745,745,745,745,745,,,,,,,,,,,,,,,,,,,,745,,,745,,,745,745,,,745',
+',,,,,745,,,,,,,,,745,,,,,745,745,745,745,,745,745,745,745,,,,,745,745',
+',746,746,746,,746,745,,745,746,746,,,,746,,746,746,746,746,746,746,746',
+',,,,,746,746,746,746,746,746,746,,,746,,,,,,,746,,,746,746,746,746,746',
+'746,746,746,,746,746,746,,746,746,746,746,746,,,,,,,,,,,,,,,,,,,,746',
+',,746,,,746,746,,,746,,,,,,746,,,,,,,,,746,,,,,746,746,746,746,,746',
+'746,746,746,,,,,746,746,,747,747,747,,747,746,,746,747,747,,,,747,,747',
+'747,747,747,747,747,747,,,,,,747,747,747,747,747,747,747,,,747,,,,,',
+',747,,,747,747,747,747,747,747,747,747,,747,747,747,,747,747,747,747',
+'747,,,,,,,,,,,,,,,,,,,,747,,,747,,,747,747,,,747,,,,,,747,,,,,,,,,747',
+',,,,747,747,747,747,,747,747,747,747,,,,,747,747,,748,748,748,,748,747',
+',747,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',
+',239,239,239,,239,748,,748,239,239,,,,239,,239,239,239,239,239,239,239',
+',,,,,239,239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239',
+'239,239,239,,239,239,239,,239,239,239,239,239,,,,,,,,,,,,,,,,,,,,239',
+',,239,,,239,239,,,239,,,,,,239,,,,,,,,,239,,,,,239,239,239,239,,239',
+'239,239,239,,,,,239,239,,750,750,750,,750,239,,239,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,,252,252,252,,252,750',
+',750,252,252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252',
+'252,252,252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,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,,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,,255,255,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,,,,,255,255',
+',238,238,238,,238,255,,255,238,238,,,,238,,238,238,238,238,238,238,238',
+',,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238,238,238,238,238',
+'238,238,238,,238,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,,237,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,,262,262,262,,262,237',
+',237,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,,,,,262,262,,263,263,263,,263,262,,262,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,,271,271,271,,271',
+'263,,263,271,271,,,,271,,271,271,271,271,271,271,271,,,,,,271,271,271',
+'271,271,271,271,,,271,,,,,,,271,,,271,271,271,271,271,271,271,271,271',
+'271,271,271,,271,271,271,271,271,,,,,,,,,,,,,,,,,,,,271,,,271,,,271',
+'271,,,271,,271,,271,,271,,,271,,,,,,271,,,,,271,271,271,271,,271,271',
+'271,271,,,,,271,271,271,762,762,762,,762,271,,271,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,,236,236,236,,236,762,,762,236',
+'236,,,,236,,236,236,236,236,236,236,236,,,,,,236,236,236,236,236,236',
+'236,,,236,,,,,,,236,,,236,236,236,236,236,236,236,236,,236,236,236,',
+'236,236,236,236,236,,,,,,,,,,,,,,,,,,,,236,,,236,,,236,236,,,236,,,',
+',,236,,,,,,,,,236,,,,,236,236,236,236,,236,236,236,236,,,,,236,236,',
+'235,235,235,,235,236,,236,235,235,,,,235,,235,235,235,235,235,235,235',
+',,,,,235,235,235,235,235,235,235,,,235,,,,,,,235,,,235,235,235,235,235',
+'235,235,235,,235,235,235,,235,235,235,235,235,,,,,,,,,,,,,,,,,,,,235',
+',,235,,,235,235,,,235,,,,,,235,,,,,,,,,235,,,,,235,235,235,235,,235',
+'235,235,235,,,,,235,235,,278,278,278,,278,235,,235,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,,649,649,649,,649,278',
+',278,649,649,,,,649,,649,649,649,649,649,649,649,,,,,,649,649,649,649',
+'649,649,649,,,649,,,,,,,649,,,649,649,649,649,649,649,649,649,,649,649',
+'649,,649,649,649,649,649,,,,,,,,,,,,,,,,,,,,649,,,649,,,649,649,,,649',
+',649,,,,649,,,,,,,,,649,,,,,649,649,649,649,,649,649,649,649,,,,,649',
+'649,,234,234,234,,234,649,,649,234,234,,,,234,,234,234,234,234,234,234',
+'234,,,,,,234,234,234,234,234,234,234,,,234,,,,,,,234,,,234,234,234,234',
+'234,234,234,234,,234,234,234,,234,234,234,234,234,,,,,,,,,,,,,,,,,,',
+',234,,,234,,,234,234,,,234,,,,,,234,,,,,,,,,234,,,,,234,234,234,234',
+',234,234,234,234,,,,,234,234,,280,280,280,,280,234,,234,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,,117,117,117',
+',117,280,,280,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,,338,338,338,,338,117,,117,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,,339,339,339,,339,338,,338,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,',
+'492,492,492,492,492,339,,339,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,740,740',
+'740,740,740,740,740,740,740,740,740,,740,740,,,740,740,,492,,,492,,',
+'492,492,,,492,,492,740,,740,492,740,740,,740,740,740,740,740,492,740',
+',,,492,492,492,492,,492,492,492,492,,,,,492,492,,740,,,,492,492,,492',
+'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,487,,485,485,485,,485,487,,487,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,,483,483,483,,483,485',
+',485,483,483,,,,483,,483,483,483,483,483,483,483,,,,,,483,483,483,483',
+'483,483,483,,,483,,,,,,,483,,,483,483,483,483,483,483,483,483,483,483',
+'483,483,,483,483,483,483,483,,,,,,,,,,,,,,,,,,,,483,,,483,,,483,483',
+',,483,,483,,483,,483,,,483,,,,,,483,,,,,483,483,483,483,,483,483,483',
+'483,,,,,483,483,,116,116,116,,116,483,,483,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,,248,248,248,,248,116,,116',
+'248,248,,,,248,,248,248,248,248,248,248,248,,,,,,248,248,248,248,248',
+'248,248,,,248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248,248,248',
+',248,248,248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,',
+',,,248,,,,,,,,,248,,,,,248,248,248,248,,248,248,248,248,,,,,248,248',
+',115,115,115,,115,248,,248,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,,706,706,706,,706,115,,115,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,706,706,706,,706,706,706,706,,,,,706,706,,110,110,110,110,110',
+'706,,706,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,742,742,742,742,742,742,742,742',
+'742,742,742,,742,742,,,742,742,,110,,,110,,,110,110,,,110,,110,742,',
+'742,110,742,742,,742,742,742,742,742,110,742,,,,110,110,110,110,,110',
+'110,110,110,,,,,110,110,,742,,,,110,110,,110,59,59,59,,59,,,,59,59,',
+',,59,,59,59,59,59,59,59,59,,,,,,59,59,59,59,59,59,59,,,59,,,,,,,59,',
+',59,59,59,59,59,59,59,59,59,59,59,59,,59,59,59,59,59,,,,,,,,,,,,,,,',
+',,,,59,,,59,,,59,59,,,59,,59,,,,59,,,59,,,,,,59,,,,,59,59,59,59,,59',
+'59,59,59,,,,,59,59,,443,443,443,,443,59,,59,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,,442,442,442,,442,443',
+',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,442,442,442,442,,,,,,,,,,,,,,,,,,,,442,,,442,,,442,442,,,442',
+',,,,,442,,,,,,,,,442,,,,,442,442,442,442,,442,442,442,442,,,,,442,442',
+',441,441,441,,441,442,,442,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,,439,439,439,,439,441,,441,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,,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,,358',
+'358,358,,358,439,,439,358,358,,,,358,,358,358,358,358,358,358,358,,',
+',,,358,358,358,358,358,358,358,,,358,,,,,,,358,,,358,358,358,358,358',
+'358,358,358,,358,358,358,,358,358,358,358,358,,,,,,,,,,,,,,,,,,,,358',
+',,358,,,358,358,,,358,,,,,,358,,,,,,,,,358,,,,,358,358,358,358,,358',
+'358,358,358,,,,,358,358,,70,70,70,,70,358,,358,70,70,,,,70,,70,70,70',
+'70,70,70,70,,,,,,70,70,70,70,70,70,70,,,70,,,,,,,70,,,70,70,70,70,70',
+'70,70,70,,70,70,70,,70,70,,,70,,,,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,',
+'70,,,,,,,,,,,,,,,,,,,,70,70,70,70,,70,70,70,70,,,,,70,70,,69,69,69,',
+'69,70,,70,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,,68,68,68,,68,69,,69,68,68,,,,68,,68,68,68,68',
+'68,68,68,,,,,,68,68,68,68,68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68',
+'68,68,,68,68,68,,68,68,,,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68',
+',68,,,,,,,,,,,,,,,,,,68,68,68,68,,68,68,68,68,,,,,68,68,,67,67,67,,67',
+'68,,68,67,67,,,,67,,67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,',
+',67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67,67,,67,67,67,67,67,744',
+'744,744,744,744,744,744,744,744,744,744,,744,744,,,744,744,,67,,,67',
+',,67,67,,,67,,,744,,744,67,744,744,,744,744,744,744,744,67,744,,,,67',
+'67,67,67,,67,67,67,67,,,,,67,67,67,744,,,,67,67,,67,514,514,514,,514',
+',,,514,514,,,,514,,514,514,514,514,514,514,514,,,,,,514,514,514,514',
+'514,514,514,,,514,,,,,,,514,,,514,514,514,514,514,514,514,514,,514,514',
+'514,,514,514,514,514,514,,,,,,,,,,,,,,,,,,,,514,,,514,,,514,514,,,514',
+',,,,,514,,,,,,,,,514,,,,,514,514,514,514,,514,514,514,514,,,,,514,514',
+',513,513,513,,513,514,,514,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,,512,512,512,,512,513,,513,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,,509,509,509,,509,512',
+',512,509,509,,,,509,,509,509,509,509,509,509,509,,,,,,509,509,509,509',
+'509,509,509,,,509,,,,,,,509,,,509,509,509,509,509,509,509,509,,509,509',
+'509,,509,509,,,509,,,,,,,,,,,,,,,,,,,,509,,,509,,,509,509,,,509,,,,',
+',,,,,,,,,,,,,,,509,509,509,509,,509,509,509,509,,,,,509,509,,64,64,64',
+',64,509,,509,64,64,,,,64,,64,64,64,64,64,64,64,,,,,,64,64,64,64,64,64',
+'64,,,64,,,,,,,64,,,64,64,64,64,64,64,64,64,,64,64,64,,64,64,64,64,64',
+',,,,,,,,,,,,,,,,,,,64,,,64,,,64,64,,,64,,,,,,64,,,,,,,,,64,,,,,64,64',
+'64,64,,64,64,64,64,,,,,64,64,,44,44,44,,44,64,,64,44,44,,,,44,,44,44',
+'44,44,44,44,44,,,,,,44,44,44,44,44,44,44,,,44,,,,,,,44,,,44,44,44,44',
+'44,44,44,44,,44,44,44,,44,44,44,44,44,,,,,,,,,,,,,,,,,,,,44,,,44,,,44',
+'44,,,44,,,,,,44,,,,,,,,,44,,,,,44,44,44,44,,44,44,44,44,,,,,44,44,,500',
+'500,500,,500,44,,44,500,500,,,,500,,500,500,500,500,500,500,500,,,,',
+',500,500,500,500,500,500,500,,,500,,,,,,,500,,,500,500,500,500,500,500',
+'500,500,,500,500,500,,500,500,,,500,,,,,,,,,,,,,,,,,,,,500,,,500,,,500',
+'500,,,500,,,,,,,,,,,,,,,,,,,,500,500,500,500,,500,500,500,500,,,,,500',
+'500,,970,970,970,,970,500,,500,970,970,,,,970,,970,970,970,970,970,970',
+'970,,,,,,970,970,970,970,970,970,970,,,970,,,,,,,970,,,970,970,970,970',
+'970,970,970,970,970,970,970,970,,970,970,970,970,970,,,,,,,,,,,,,,,',
+',,,,970,,,970,,,970,970,,,970,,970,,970,,970,,,970,,,,,,970,,,,,970',
+'970,970,970,,970,970,970,970,,,,,970,970,,119,119,119,119,119,970,,970',
+'119,119,,,,119,,119,119,119,119,119,119,119,,,,,,119,119,119,119,119',
+'119,119,,,119,,,,,,119,119,,119,119,119,119,119,119,119,119,119,,119',
+'119,119,,119,119,119,119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119,119',
+',,119,,119,,,,119,,,,,,,,,119,,,,,119,119,119,119,,119,119,119,119,',
+',,,119,119,,118,118,118,,118,119,,119,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,836,836,836',
+'836,836,836,836,836,836,836,836,,836,836,,,836,836,,118,,,118,,,118',
+'118,,,118,,,836,,836,118,836,836,,836,836,836,836,836,118,836,,,,118',
+'118,118,118,,118,118,118,118,,,,,118,118,,836,471,,,,118,,118,471,471',
+'471,,,471,471,471,613,471,613,613,613,613,613,,,,471,471,,,,613,,,,',
+',471,471,,471,471,471,471,471,,,,,,,,,613,,,,,,,,,613,613,613,613,,',
+',613,,,,,,,,,471,,412,,,,,471,,412,412,412,471,471,412,412,412,613,412',
+',,,,,,,,412,412,412,,,,,,471,471,,412,412,,412,412,412,412,412,,,,,471',
+',,471,,,,,471,,,,,,,,,,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,,27,412,412,,412',
+',412,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,,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,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',
+'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,8',
+'8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,,,,8,8,8,8,8,8,8,8,8,8',
+',,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8,,8,8,8,8,8,8,8,,,8,8,,,,8,8,8',
+'8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8,8,8,8,,,8,8,,,,,,,,,,,,,,8,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,,,393,393,,,,393,393,393,393,,,,,,,,,,,,,,393,393',
+',393,393,393,393,393,393,393,393,393,393,393,393,,,393,393,,,,,,,,,',
+',,,,393,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,,,,9,9,9,9,9',
+'9,9,9,9,9,,,,,,9,9,9,9,9,9,9,9,9,,,9,,,,,,,,9,9,,9,9,9,9,9,9,9,,,9,9',
+',,,9,9,9,9,,,,,,,,,,,,,,9,9,,9,9,9,9,9,9,9,9,9,9,9,9,,,9,9,,,,,,,,,',
+',,,,9,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,713,,,,713,713,713,713,,,,,,,,,,,,,,713',
+'713,,713,713,713,713,713,713,713,713,713,713,713,713,,,713,71,71,71',
+'71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,,,,71',
+'71,71,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,71,71,71,71,71',
+',71,,,,,,71,71,,71,71,71,71,71,71,71,,,71,71,,,,71,71,71,71,,,,,,71',
+',,,,,,,71,71,,71,71,71,71,71,71,71,71,71,71,71,71,,,71,644,644,644,644',
+'644,644,644,644,644,644,644,,644,644,,,644,644,,,938,,938,938,938,938',
+'938,,,,,,644,,644,938,644,644,,644,644,644,644,644,,644,517,517,517',
+'517,517,517,517,517,517,517,517,938,517,517,,,517,517,,644,,,938,938',
+',,,938,,,,,517,,517,,517,517,,517,517,517,517,517,,517,273,273,273,273',
+'273,273,273,273,273,273,273,,273,273,,,273,273,,517,1008,,1008,1008',
+'1008,1008,1008,,,,,,273,,273,1008,273,273,,273,273,273,273,273,,273',
+'469,469,469,469,469,469,469,469,469,469,469,1008,469,469,,,469,469,',
+'273,,,1008,1008,,,,1008,,,,,469,,469,,469,469,,469,469,469,469,469,',
+'469,424,424,424,424,424,424,424,424,424,424,424,,424,424,,,424,424,469',
+'469,998,,998,998,998,998,998,,,,,,424,,424,998,424,424,,424,424,424',
+'424,424,,424,21,21,21,21,21,21,21,21,21,21,21,998,21,21,,,21,21,,424',
+',,998,998,,,,998,,,,,21,,21,,21,21,,21,21,21,21,21,,21,839,839,839,839',
+'839,839,839,839,839,839,839,,839,839,,,839,839,,21,655,,655,655,655',
+'655,655,,,,,,839,,839,655,839,839,,839,839,839,839,839,,839,730,730',
+'730,730,730,730,730,730,730,730,730,655,730,730,,,730,730,,839,655,655',
+'655,655,,,,655,,,,,730,,730,,730,730,,730,730,730,730,730,,730,737,737',
+'737,737,737,737,737,737,737,737,737,,737,737,,,737,737,,730,,,,,,,,',
+',,,,737,,737,,737,737,,737,737,737,737,737,,737,,,,,,210,210,,,210,',
+',,,,,,210,210,737,210,210,210,210,210,210,210,,,210,210,,,,210,210,210',
+'210,,,,,,210,,,,,,,,210,210,,210,210,210,210,210,210,210,210,210,210',
+'210,210,504,504,210,,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,437,437,504,,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,917,917,437',
+',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,503,503,917,,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,258,258,503,,258,,,,,,,,258,258',
+',258,258,258,258,258,258,258,,,258,258,,,,258,258,258,258,,,,,,,,,,',
+',,,258,258,,258,258,258,258,258,258,258,258,258,258,258,258,971,971',
+'258,,971,,,,,,,,971,971,,971,971,971,971,971,971,971,,,971,971,,,,971',
+'971,971,971,,,,,,971,,,,,,,,971,971,,971,971,971,971,971,971,971,971',
+'971,971,971,971,516,516,971,,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,515,515,516,,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,972',
+'972,515,,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,551,551,972,,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,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,550',
+'438,438,550,,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,544,544,438,,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,543,543,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,543,543,543',
+'543,209,209,543,,209,,,,,,,,209,209,,209,209,209,209,209,209,209,,,209',
+'209,,,,209,209,209,209,,,,,,209,,,,,,,,209,209,,209,209,209,209,209',
+'209,209,209,209,209,209,209,,962,209,962,962,962,962,962,960,,960,960',
+'960,960,960,958,962,958,958,958,958,958,,960,,,,,,956,958,956,956,956',
+'956,956,,,962,,,,,,956,960,,,,962,962,,958,,962,,960,960,,,,960,,958',
+'958,,956,,958,,,,,,,956,956,956,956,,,936,956,936,936,936,936,936,934',
+',934,934,934,934,934,,936,,,,,,932,934,932,932,932,932,932,,,,,,,,,932',
+'936,,,,,,,934,,,,936,936,,,,936,,934,934,,932,,934,,,,,,,932,932,932',
+'932,,,532,932,532,532,532,532,532,,795,,795,795,795,795,795,532,,,,',
+',,,795,,711,,711,711,711,711,711,,,,,,532,532,,711,,,,,795,532,532,532',
+'532,,,,532,795,795,795,795,,,,795,711,,797,,797,797,797,797,797,711',
+'711,711,711,,,,711,797,,799,,799,799,799,799,799,,559,,559,559,559,559',
+'559,799,,,,,797,,,559,,,,,,797,797,797,797,,,,797,799,,,,,,,,559,559',
+',799,799,,,,799,559,559,559,559,,,843,559,843,843,843,843,843,,845,',
+'845,845,845,845,845,843,,,,,,,,845,,847,,847,847,847,847,847,,,,,,843',
+',,847,,,,,845,843,843,843,843,,,,843,845,845,845,845,,,,845,847,,900',
+',900,900,900,900,900,,,847,847,,,,847,900,,,,,,,,,,,,,,,,,,,,,,900,900',
+',,,,,,,900,900,900,900,,,,900' ]
+ racc_action_check = arr = ::Array.new(24856, 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 = [
+ 893, 80, nil, 412, nil, 9058, 1007, 43, 22436, 22692,
+ 81, nil, 80, 143, 240, 521, 116, 766, nil, 15,
+ 5946, 23212, 243, nil, 104, nil, 296, 22064, 22174, 6849,
+ 6978, 7107, nil, 3742, 8663, 8792, nil, 181, 438, 540,
+ 275, 751, 11509, 12412, 21208, 218, 1283, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 1670, nil, 34, 19265,
+ 13057, 74, nil, 12928, 21079, nil, nil, 20426, 20297, 20168,
+ 20039, 22933, nil, nil, nil, nil, nil, nil, nil, 318,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 0, nil, nil, 622, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 357, nil,
+ 19128, nil, nil, nil, nil, 18870, 18612, 17701, 21724, 21595,
+ 0, nil, 847, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 271, nil, 3613, 12154, 12025, 11638, 24331,
+ 23416, 10864, 10477, 10348, 10219, 9832, 8929, nil, nil, 633,
+ 267, 192, 357, 173, 298, 366, nil, 6720, 1022, 376,
+ 5817, 5688, 5430, 5301, 17443, 17056, 16927, 16282, 16153, 15379,
+ 14734, 14605, 14347, 14218, 13831, 13444, 13315, 6591, 18741, 13186,
+ 13573, 14089, 15637, 15766, 15895, 16024, nil, nil, 23721, nil,
+ nil, 371, 16411, 16540, nil, nil, nil, nil, nil, nil,
+ nil, 16669, nil, 23074, nil, 366, 368, nil, 17185, 429,
+ 17572, nil, 5043, 5172, nil, nil, 610, nil, 6204, 1136,
+ 434, 417, 4387, 470, 513, 483, 7236, 2065, 701, 657,
+ 1409, 569, 902, nil, 539, 554, 210, nil, nil, nil,
+ 613, 389, 578, 9703, nil, 405, 653, 655, 473, nil,
+ 673, nil, 10606, 1936, 10735, 612, nil, 199, 401, 664,
+ 649, 62, 703, nil, nil, 604, 168, 153, 17830, 17959,
+ 656, 788, 685, 90, 127, 789, 766, 129, 812, nil,
+ nil, 371, 405, 467, nil, 808, nil, 59, 19910, nil,
+ nil, nil, 413, 352, 660, 351, 659, 723, 459, 590,
+ 703, nil, 683, nil, 12670, nil, 333, 307, 551, 443,
+ 337, 89, 112, 436, nil, nil, nil, nil, nil, nil,
+ nil, nil, 734, 22564, nil, nil, nil, nil, 735, nil,
+ 718, nil, 12799, 720, nil, 7236, 725, nil, 724, 727,
+ 547, 599, 21935, nil, nil, nil, 512, 402, 781, nil,
+ nil, 4777, 756, nil, 23166, nil, 732, nil, nil, 1538,
+ nil, nil, nil, nil, 289, nil, 787, 23538, 24148, 19781,
+ 113, 19652, 19523, 19394, 2194, 1280, 351, 461, 813, 814,
+ 815, 818, 2968, 3097, 3226, 2710, 2581, 2452, 1619, 1022,
+ 1936, 1151, 2323, 2065, 2839, 713, 739, 1807, 1409, 23120,
+ 148, 21856, nil, nil, nil, nil, 760, nil, 45, 78,
+ 772, nil, nil, 18483, nil, 18354, nil, 18225, nil, nil,
+ nil, nil, 18088, 1265, 2968, 777, 784, nil, nil, 786,
+ 21337, 790, 12541, 23660, 23477, 630, 832, nil, nil, 20950,
+ 796, nil, 20821, 20692, 20563, 23904, 23843, 23028, 12283, 928,
+ 940, 146, 874, nil, 11896, nil, nil, 11767, nil, nil,
+ nil, nil, 24546, 3097, 963, nil, 2839, 171, 55, 961,
+ 971, 11251, 11122, 24270, 24209, 139, nil, nil, 889, nil,
+ 24087, 24026, 10993, nil, nil, nil, 471, 121, 2194, 24635,
+ nil, 291, nil, nil, nil, 1263, nil, nil, nil, 864,
+ nil, nil, 258, nil, 289, nil, nil, 853, nil, 855,
+ nil, nil, nil, 22308, nil, 858, 10090, 9961, 354, 898,
+ 9574, 9445, 9316, 9187, 897, nil, nil, 8534, 8405, 901,
+ nil, 8147, 8018, nil, nil, 39, 286, 134, 268, 869,
+ 4645, 874, nil, 21820, nil, 1807, 980, 0, 122, nil,
+ 1538, 1280, nil, 879, nil, 930, 7760, nil, nil, nil,
+ 905, 287, 7373, 886, nil, 890, 230, 226, 941, 520,
+ 1148, 945, 903, 5559, 22982, 972, 992, 189, 1050, 17314,
+ nil, 948, nil, 443, 156, 23293, nil, 949, 961, nil,
+ 965, 966, 967, nil, nil, nil, nil, nil, nil, 962,
+ nil, 879, nil, 14476, nil, nil, nil, 1052, nil, nil,
+ nil, 1057, nil, nil, 1058, 775, nil, 1097, nil, nil,
+ nil, nil, 1103, nil, 156, 985, 167, 190, 289, 291,
+ 11380, 481, 1013, nil, 986, 4129, 18999, nil, nil, 1109,
+ 1151, 24571, 671, 22820, nil, nil, nil, nil, nil, nil,
+ 4914, nil, nil, nil, nil, nil, nil, nil, 988, 13702,
+ 23304, 13960, nil, 996, nil, 8792, nil, 23350, nil, nil,
+ 18088, nil, 19128, nil, 20426, 14863, 14992, 15121, 15250, 308,
+ 15508, 997, 1001, nil, 1002, 1003, 1008, nil, 1037, 1017,
+ 1013, 1010, 16798, nil, nil, 1150, nil, nil, 4516, 1050,
+ 1155, nil, nil, nil, 1032, 515, nil, nil, 1159, nil,
+ 3871, 1054, 1106, nil, nil, 1117, nil, nil, nil, nil,
+ 1081, 710, nil, nil, 582, 24554, nil, 24610, nil, 24627,
+ nil, 6075, nil, 720, nil, 1096, 333, nil, 1100, nil,
+ nil, nil, nil, 1229, nil, 6333, 1236, 2452, 2581, nil,
+ 6462, 3484, 65, 118, nil, 1238, 522, 4645, nil, 1241,
+ 1125, nil, nil, 1136, 1131, nil, 21724, 7502, 7631, 23258,
+ 647, nil, nil, 24687, nil, 24695, nil, 24712, nil, nil,
+ 1156, 1395, 7889, 446, 1215, nil, 1162, nil, nil, nil,
+ 2710, nil, nil, 167, 8276, nil, nil, 3226, 3355, 1186,
+ 1144, nil, nil, nil, 1145, 1155, nil, 1159, 1160, nil,
+ 1161, nil, 1166, 821, 1186, 1038, nil, nil, 157, nil,
+ 1314, 1327, nil, 375, nil, nil, nil, 1331, nil, nil,
+ 24751, nil, 1228, nil, nil, 1233, 1236, 1237, 1241, nil,
+ 1246, nil, 442, nil, nil, nil, 876, 23599, nil, nil,
+ nil, 2323, 1147, 560, 1151, 1329, 1280, nil, 1279, 1384,
+ nil, nil, 24494, nil, 24480, nil, 24473, nil, 23017, nil,
+ nil, nil, nil, 615, 1008, 1261, 4000, nil, nil, nil,
+ nil, nil, 4258, nil, 1409, nil, 24421, nil, 24407, nil,
+ 24400, nil, 24393, nil, nil, nil, 1137, 1310, 1315, 1398,
+ 21466, 23782, 23965, 1406, nil, nil, 1273, 1274, 1284, 1288,
+ 1289, 947, 1290, 917, 642, 1416, 1424, 1301, 1302, 1303,
+ 1304, nil, nil, 1315, 114, 128, 144, 594, 23201, nil,
+ nil, nil, nil, 908, 1318, nil, nil, nil, 23109, nil,
+ nil, nil, nil, 155, 1332, 1336, -77, nil, nil ]
+
+racc_action_default = [
+ -3, -591, -1, -577, -4, -591, -7, -591, -591, -591,
+ -591, -29, -591, -591, -591, -279, -591, -41, -44, -579,
+ -591, -49, -51, -52, -53, -57, -258, -258, -258, -293,
+ -329, -330, -69, -11, -73, -81, -83, -591, -488, -489,
+ -591, -591, -591, -591, -591, -579, -239, -270, -271, -272,
+ -273, -274, -275, -276, -277, -278, -567, -281, -283, -590,
+ -558, -301, -303, -591, -591, -307, -310, -577, -591, -591,
+ -591, -591, -331, -332, -334, -335, -431, -432, -433, -434,
+ -435, -456, -438, -439, -458, -460, -443, -448, -452, -454,
+ -470, -458, -472, -473, -565, -477, -478, -566, -480, -481,
+ -482, -483, -484, -485, -486, -487, -492, -493, -591, -2,
+ -578, -586, -587, -588, -6, -591, -591, -591, -591, -591,
+ -3, -17, -591, -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, -591, -591, -248, -591,
+ -591, -591, -591, -591, -591, -591, -579, -580, -48, -591,
+ -488, -489, -591, -279, -591, -591, -231, -591, -11, -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, -400, -402, -591, -575,
+ -576, -58, -248, -591, -300, -406, -415, -417, -64, -412,
+ -65, -579, -66, -240, -253, -262, -262, -257, -591, -263,
+ -591, -560, -591, -591, -67, -68, -577, -12, -591, -15,
+ -591, -71, -11, -579, -591, -74, -77, -11, -89, -90,
+ -591, -591, -97, -293, -296, -579, -591, -329, -330, -333,
+ -413, -591, -79, -591, -85, -290, -474, -475, -591, -216,
+ -217, -232, -591, -11, -591, -579, -241, -583, -583, -591,
+ -591, -583, -591, -302, -392, -50, -591, -591, -591, -591,
+ -577, -591, -578, -488, -489, -591, -591, -279, -591, -345,
+ -346, -107, -108, -591, -110, -591, -279, -591, -591, -488,
+ -489, -322, -112, -113, -154, -155, -156, -172, -177, -184,
+ -187, -324, -591, -556, -591, -436, -591, -591, -591, -591,
+ -591, -591, -591, -591, 1019, -5, -589, -23, -24, -25,
+ -26, -27, -591, -591, -19, -20, -21, -122, -591, -30,
+ -39, -40, -591, -591, -31, -197, -579, -249, -262, -262,
+ -568, -569, -258, -410, -570, -571, -569, -568, -258, -409,
+ -411, -570, -571, -37, -205, -38, -591, -42, -43, -195,
+ -263, -45, -46, -47, -579, -299, -591, -591, -591, -248,
+ -290, -591, -591, -591, -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, -579,
+ -381, -258, -568, -569, -55, -59, -579, -259, -381, -381,
+ -579, -295, -254, -591, -255, -591, -260, -591, -264, -563,
+ -564, -10, -578, -14, -3, -579, -70, -288, -86, -75,
+ -591, -579, -248, -591, -591, -96, -591, -474, -475, -591,
+ -82, -87, -591, -591, -591, -591, -591, -237, -591, -423,
+ -591, -284, -591, -242, -585, -584, -244, -585, -291, -292,
+ -559, -304, -520, -11, -336, -337, -11, -591, -591, -591,
+ -591, -591, -248, -591, -591, -290, -315, -107, -108, -109,
+ -591, -591, -248, -318, -494, -495, -591, -591, -11, -520,
+ -326, -579, -437, -457, -462, -591, -464, -440, -459, -591,
+ -461, -442, -591, -445, -591, -447, -450, -591, -451, -591,
+ -471, -8, -18, -591, -28, -269, -591, -591, -414, -591,
+ -250, -252, -591, -591, -60, -247, -407, -591, -591, -62,
+ -408, -591, -591, -298, -581, -568, -569, -568, -569, -579,
+ -195, -591, -382, -579, -384, -11, -54, -403, -381, -245,
+ -11, -11, -294, -262, -261, -265, -591, -561, -562, -13,
+ -591, -72, -591, -78, -84, -579, -568, -569, -246, -93,
+ -95, -591, -80, -591, -204, -214, -215, -579, -590, -590,
+ -282, -579, -287, -583, -591, -520, -395, -555, -555, -503,
+ -505, -505, -505, -519, -521, -522, -523, -524, -525, -526,
+ -527, -591, -529, -591, -535, -537, -538, -540, -545, -547,
+ -548, -550, -551, -552, -591, -590, -338, -590, -308, -339,
+ -340, -311, -591, -314, -591, -579, -568, -569, -572, -289,
+ -591, -107, -108, -111, -579, -11, -591, -497, -320, -591,
+ -11, -520, -591, -591, -557, -463, -466, -467, -468, -469,
+ -11, -441, -444, -446, -449, -453, -455, -123, -267, -591,
+ -198, -591, -582, -262, -33, -200, -34, -201, -61, -35,
+ -203, -36, -202, -63, -196, -591, -591, -591, -591, -414,
+ -591, -555, -555, -363, -365, -365, -365, -380, -591, -579,
+ -386, -526, -591, -533, -543, -591, -405, -404, -11, -591,
+ -591, -256, -266, -16, -76, -91, -88, -297, -590, -343,
+ -11, -424, -590, -425, -426, -591, -243, -393, -396, -398,
+ -579, -591, -501, -502, -591, -591, -512, -591, -515, -591,
+ -517, -591, -347, -591, -349, -351, -358, -526, -579, -531,
+ -539, -549, -553, -591, -341, -591, -591, -11, -11, -313,
+ -591, -11, -414, -591, -414, -591, -591, -11, -323, -591,
+ -579, -499, -327, -591, -268, -32, -199, -251, -591, -238,
+ -591, -361, -362, -371, -373, -591, -376, -591, -378, -383,
+ -591, -591, -591, -532, -591, -401, -591, -416, -418, -9,
+ -11, -430, -344, -591, -591, -428, -285, -11, -11, -591,
+ -555, -536, -554, -504, -505, -505, -530, -505, -505, -546,
+ -505, -541, -579, -591, -356, -591, -528, -305, -591, -306,
+ -591, -591, -265, -590, -316, -319, -496, -591, -325, -498,
+ -520, -465, -555, -534, -364, -365, -365, -365, -365, -544,
+ -365, -385, -579, -388, -390, -391, -542, -591, -290, -56,
+ -429, -11, -98, -99, -591, -591, -106, -427, -591, -591,
+ -394, -500, -591, -508, -591, -510, -591, -513, -591, -516,
+ -518, -348, -350, -354, -591, -359, -11, -309, -312, -419,
+ -420, -421, -11, -321, -11, -360, -591, -368, -591, -370,
+ -591, -374, -591, -377, -379, -387, -591, -289, -572, -423,
+ -248, -591, -591, -105, -397, -399, -505, -505, -505, -505,
+ -352, -591, -357, -591, -590, -591, -591, -365, -365, -365,
+ -365, -389, -422, -579, -568, -569, -572, -104, -591, -506,
+ -509, -511, -514, -591, -355, -342, -317, -328, -591, -366,
+ -369, -372, -375, -414, -505, -353, -365, -507, -367 ]
+
+clist = [
+'215,406,295,265,269,14,333,126,126,326,14,274,274,274,412,418,257,113',
+'2,648,371,520,484,533,536,219,322,540,258,428,121,204,129,129,219,219',
+'219,710,14,300,300,336,337,510,588,340,335,335,131,131,335,110,6,475',
+'813,476,656,6,663,261,268,270,752,471,627,401,549,109,219,219,126,425',
+'219,345,355,355,312,275,275,275,624,113,624,218,755,663,913,435,688',
+'691,808,778,915,387,388,389,390,909,335,335,335,335,758,615,357,361',
+'627,327,700,523,526,620,621,530,563,14,570,573,573,114,219,219,219,219',
+'14,14,276,276,276,293,816,341,377,952,942,705,879,876,392,383,572,574',
+'481,756,827,558,559,713,900,324,323,372,757,553,348,484,328,331,531',
+'330,291,759,6,373,496,617,329,792,793,583,627,391,6,912,1,654,787,532',
+'618,790,867,663,868,470,478,876,413,624,624,479,274,949,309,309,782',
+'863,431,432,433,434,375,991,376,378,272,284,285,915,909,422,14,219,219',
+'219,379,393,219,219,219,219,219,219,882,380,385,692,309,309,309,381',
+'633,382,609,14,942,830,715,663,720,642,870,706,412,418,274,274,350,749',
+'850,203,874,768,629,274,403,871,709,903,859,325,403,841,842,703,802',
+'945,651,219,219,399,404,879,334,775,423,427,219,338,817,869,876,511',
+'339,265,818,,506,269,,902,,,752,14,752,635,752,14,,,113,300,14,,876',
+'603,522,521,638,,723,275,723,,905,,537,538,300,275,638,335,335,,982',
+'875,,877,14,219,,,,822,492,695,950,499,,,493,557,824,219,219,704,,619',
+'638,,491,622,,1005,113,,638,561,,,276,1004,774,219,,,631,,276,771,,554',
+'634,906,894,907,560,,954,219,931,821,294,1015,,,738,589,495,595,,743',
+'126,501,,600,802,,,884,,,,825,539,752,,752,829,752,,752,955,,413,582',
+'627,129,428,291,,274,,,291,38,663,,,,38,,714,131,624,786,,422,477,,',
+',,,219,594,480,,595,,611,599,,,309,,,752,38,298,298,,976,,753,,,,511',
+'992,,309,,,,,802,511,802,771,413,,,,274,,987,,,,,,413,343,359,359,359',
+'14,,14,,647,,422,616,300,,219,783,,,,630,,300,422,,,777,,413,,,219,274',
+'897,,,413,,,,,,274,38,980,802,14,,,14,,422,38,38,6,219,,422,921,689',
+'689,,398,,,219,,,,,767,14,,,,,,,707,708,,,802,946,802,294,,951,623,',
+'126,,,,,,,694,589,,,,760,,802,219,219,784,511,,219,219,,727,219,129',
+',,766,776,,,,595,589,,600,,14,653,,131,,14,14,844,846,848,38,1013,785',
+',,,,300,,26,,294,872,,26,872,294,,300,,,,986,38,,734,736,,309,26,739',
+'741,832,,427,,,309,26,26,26,,26,,,,589,,823,886,,,,335,826,589,,733',
+',335,,872,,,753,,753,403,753,,,899,26,26,,219,26,,,,14,219,126,38,,14',
+',38,,,,298,38,,,14,831,,861,,,,865,,,,219,,298,,760,,,,,,,,38,26,,,',
+'941,26,26,26,26,26,26,,,,993,,,,853,,,,760,,14,,,638,,957,959,961,963',
+',964,,14,,,,,309,,,888,835,,,,335,,,309,,,,754,,753,,753,,753,,753,',
+',,,,,219,,14,14,,,14,,,,,,14,,,,,689,,,896,,,,26,26,26,26,,,26,26,26',
+'26,26,26,,916,,753,1009,1010,1011,1012,,14,,26,,924,,,14,14,,,,,,,,',
+'685,,,687,,,,1018,,,,965,,,,,,,,26,26,,,,,,,,26,,,,,,422,38,,38,309',
+',,,,298,14,26,,,,26,39,,298,,26,39,,,,,,,,,,,413,,,14,274,,,,,14,38',
+'14,,38,26,26,765,39,299,299,,769,770,422,,,589,219,,26,26,,,,,38,,,',
+'16,332,878,,880,16,,,,,26,,,344,360,360,360,,,,,,,309,,,26,,,,,,,16',
+',309,,,,,,,,,,,,,,,908,,910,38,,39,,,38,38,796,798,800,,39,39,,,349',
+',298,,,,,,,,,,,298,833,,,,,,,,,26,,,,,,,,,,,,,,,,,,,16,,,,,,,,,16,16',
+',,,,,,,,,856,,,,,,,977,,978,,979,862,38,26,,26,400,38,,39,,,430,26,',
+',,38,,,988,,989,,990,,,,,26,,,39,,,,,,890,891,,,893,,26,,,26,,,,,,26',
+',,,,,359,,,1014,26,16,38,,,,26,,426,1016,,,,,38,486,,488,920,489,490',
+',,,16,928,929,,,39,,,,39,,,,299,39,,26,26,,,,26,26,,,26,,38,38,,299',
+'38,,,,,,38,,26,39,,,,26,26,933,935,,937,939,,940,,,969,,,,,16,,359,',
+'16,,,,,16,38,,,,922,,,38,38,,984,,,,,,985,,,,,,,,,16,,,,,,,,,,,,,15',
+',,,,15,,585,,,,,,,,,26,,,,13,26,26,38,,13,26,,,,,,,15,302,302,26,,,',
+'999,1000,1001,1002,,,,26,38,,,,,13,38,,38,,,,,,,,,,,,347,356,356,,,',
+',,,,1017,,,,,,26,,,,625,,332,,628,,,,26,,,,,39,,39,,,,,,299,15,,,,,',
+',,299,15,15,,,,,,,,,625,13,26,332,26,26,,,26,,13,13,,39,26,,39,430,',
+',,,,,,,,16,,16,,,,,,,,,39,,,,,,,,,26,,,,,,,26,26,,,,,,,728,,,,625,332',
+'16,,,16,,,,,15,,,,,,,,,,,,,,,,,16,,39,13,,,15,39,39,772,,,,,,26,,,,299',
+',,,,,,13,,,,299,,781,,,,,,,,26,,,426,,,26,,26,,,,,,,,809,16,,,,,16,16',
+'26,,15,,,,15,,,,302,15,,,,,,,,,,,13,,,,13,302,39,,,13,,39,,,,15,,,,',
+',39,,,,,834,,,,,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,16,,360,,,16,,,39,,',
+',,,,16,,,,,39,,,,,,,,,,,,,,,,,881,,,,,,,,,,,,,,,,,,,892,39,39,,,39,',
+'16,,,,39,,,,,,332,,16,,,,,,,,,,,,,,,,,360,,,,,,,,39,,,,923,,,39,39,',
+',,16,16,,,16,,,,,,16,15,,15,,,,,,302,,,,,,,,,302,,,13,,13,,,,,,,,,,16',
+',,,927,,39,16,16,15,,,15,,,,,,,,,,,,,,,,,13,,39,13,,15,,,39,,39,,719',
+',,,,,,,,,,,,13,,,,,,,16,,,,,,,,,,,,,,,,,,,,,,,,,16,,,,,15,16,,16,,15',
+'15,,,,,,,,,,,302,,,13,,,,,13,13,,302,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,15,,,,,15,,,,,,,,,,15,,,,,13,,,,,13,,',
+',,,,,,,13,,,,,,,,,,,,,,,,,,,,,,356,,,,,,15,,,,226,,,,,,,,15,273,273',
+'273,,,,,13,,,,,,319,320,321,,,,13,,,,,,,,,,,273,273,,,,,15,15,,,15,',
+',,,,15,,,,,,,,,,13,13,,,13,,,,,,13,,,,,356,,,,,,,,15,,,,926,,,15,15',
+',,,,,,,,,,,13,,,,,,,13,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,15,,,,,,,',
+',,,,,,,,,,,,13,,,,,15,,,,,,15,,15,,,,273,405,273,,,424,429,,13,,,,,',
+'13,,13,,,,,226,,,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,469,,,,,,,273,273,,',
+',,,,,273,,,,,,,273,,273,,273,273,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,517,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,273,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,273,,424,610',
+'405,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,273,,273,,273,,,,,,,,,,,',
+',,,273,,,,,,,,,,644,645,646,,,,,,,,,,273,,,273,,,,,,,,,,,,,,273,273',
+',,,,,,,,,273,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,273,730,,,273,273,735',
+'737,,,,740,742,,,610,744,,,,,,,,,,,,,,,,,,,,,,,,273,,,,,,,,,,,,,,,,',
+',,,,,,273,,,,,,,,,,,,,,,,,,,,,,,,273,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,273,,836,,,,,,,,,,,,,,735,737,742,740,,839,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,273,,,,,,,,,,,,,,,',
+',,,273,,,,,,,,,,,,,,,,,273,836,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,273' ]
+ racc_goto_table = arr = ::Array.new(3046, 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,23,49,69,69,22,84,57,57,65,22,33,33,33,37,37,138,94,2,10,56,8,71',
+'87,87,22,31,90,36,18,15,15,60,60,22,22,22,96,22,22,22,17,17,51,24,17',
+'29,29,61,61,29,6,7,39,88,23,137,7,163,38,38,38,121,37,175,27,54,4,22',
+'22,57,27,22,22,22,22,50,66,66,66,72,94,72,20,127,163,132,47,89,89,117',
+'11,133,17,17,17,17,172,29,29,29,29,130,40,55,55,175,66,107,67,67,40',
+'40,67,156,22,156,156,156,5,22,22,22,22,22,22,68,68,68,46,11,4,152,108',
+'115,109,171,167,2,152,155,155,47,128,110,111,112,113,114,99,98,97,119',
+'93,91,71,68,68,86,83,45,125,7,82,47,70,64,122,122,62,175,7,7,131,1,134',
+'135,136,42,137,139,163,140,141,143,167,69,72,72,144,33,145,63,63,146',
+'147,29,29,29,29,150,132,151,153,44,44,44,133,172,57,22,22,22,22,154',
+'30,22,22,22,22,22,22,117,157,5,90,63,63,63,158,51,159,23,22,115,137',
+'160,163,161,51,121,162,37,37,33,33,19,24,130,16,166,40,14,33,66,168',
+'8,169,12,101,66,122,122,54,116,118,100,22,22,20,20,171,102,24,20,20',
+'22,103,104,130,167,49,105,69,106,,31,69,,121,,,121,22,121,23,121,22',
+',,94,22,22,,167,47,31,29,37,,156,66,156,,127,,17,17,22,66,37,29,29,',
+'118,128,,128,22,22,,,,24,6,23,11,50,,,7,29,24,22,22,23,,47,37,,4,47',
+',88,94,,37,29,,,68,118,51,22,,,47,,68,71,,94,47,128,89,128,36,,96,22',
+'122,87,9,118,,,39,31,46,69,,39,57,46,,69,116,,,116,,,,8,4,121,,121,8',
+'121,,121,122,,69,15,175,60,18,45,,33,,,45,52,163,,,,52,,47,61,72,67',
+',57,44,,,,,,22,38,44,,69,,31,38,,,63,,,121,52,52,52,,128,,123,,,,49',
+'10,,63,,,,,116,49,116,71,69,,,,33,,128,,,,,,69,52,52,52,52,22,,22,,29',
+',57,38,22,,22,27,,,,2,,22,57,,,47,,69,,,22,33,8,,,69,,,,,,33,52,116',
+'116,22,,,22,,57,52,52,7,22,,57,87,94,94,,9,,,22,,,,,84,22,,,,,,,94,94',
+',,116,87,116,9,,90,68,,57,,,,,,,66,31,,,,31,,116,22,22,65,49,,22,22',
+',15,22,60,,,138,49,,,,69,31,,69,,22,68,,61,,22,22,124,124,124,52,24',
+'31,,,,,22,,41,,9,123,,41,123,9,,22,,,,8,52,,20,20,,63,41,20,20,56,,20',
+',,63,41,41,41,,41,,,,31,,17,47,,,,29,17,31,,68,,29,,123,,,123,,123,66',
+'123,,,47,41,41,,22,41,,,,22,22,57,52,,22,,52,,,,52,52,,,22,94,,65,,',
+',65,,,,22,,52,,31,,,,,,,,52,41,,,,47,41,41,41,41,41,41,,,,23,,,,22,',
+',,31,,22,,,37,,124,124,124,124,,124,,22,,,,,63,,,17,20,,,,29,,,63,,',
+',126,,123,,123,,123,,123,,,,,,,22,,22,22,,,22,,,,,,22,,,,,94,,,94,,',
+',41,41,41,41,,,41,41,41,41,41,41,,22,,123,124,124,124,124,,22,,41,,22',
+',,22,22,,,,,,,,,9,,,9,,,,124,,,,31,,,,,,,,41,41,,,,,,,,41,,,,,,57,52',
+',52,63,,,,,52,22,41,,,,41,53,,52,,41,53,,,,,,,,,,,69,,,22,33,,,,,22',
+'52,22,,52,41,41,9,53,53,53,,9,9,57,,,31,22,,41,41,,,,,52,,,,26,28,126',
+',126,26,,,,,41,,,53,53,53,53,,,,,,,63,,,41,,,,,,,26,,63,,,,,,,,,,,,',
+',,126,,126,52,,53,,,52,52,165,165,165,,53,53,,,26,,52,,,,,,,,,,,52,9',
+',,,,,,,,41,,,,,,,,,,,,,,,,,,,26,,,,,,,,,26,26,,,,,,,,,,9,,,,,,,126,',
+'126,,126,9,52,41,,41,28,52,,53,,,28,41,,,,52,,,126,,126,,126,,,,,41',
+',,53,,,,,,9,9,,,9,,41,,,41,,,,,,41,,,,,,52,,,126,41,26,52,,,,41,,26',
+'126,,,,,52,28,,28,9,28,28,,,,26,9,9,,,53,,,,53,,,,53,53,,41,41,,,,41',
+'41,,,41,,52,52,,53,52,,,,,,52,,41,53,,,,41,41,165,165,,165,165,,165',
+',,9,,,,,26,,52,,26,,,,,26,52,,,,52,,,52,52,,9,,,,,,9,,,,,,,,,26,,,,',
+',,,,,,,,25,,,,,25,,28,,,,,,,,,41,,,,21,41,41,52,,21,41,,,,,,,25,25,25',
+'41,,,,165,165,165,165,,,,41,52,,,,,21,52,,52,,,,,,,,,,,,25,25,25,,,',
+',,,,165,,,,,,41,,,,28,,28,,28,,,,41,,,,,53,,53,,,,,,53,25,,,,,,,,53',
+'25,25,,,,,,,,,28,21,41,28,41,41,,,41,,21,21,,53,41,,53,28,,,,,,,,,,26',
+',26,,,,,,,,,53,,,,,,,,,41,,,,,,,41,41,,,,,,,28,,,,28,28,26,,,26,,,,',
+'25,,,,,,,,,,,,,,,,,26,,53,21,,,25,53,53,28,,,,,,41,,,,53,,,,,,,21,,',
+',53,,28,,,,,,,,41,,,26,,,41,,41,,,,,,,,28,26,,,,,26,26,41,,25,,,,25',
+',,,25,25,,,,,,,,,,,21,,,,21,25,53,,,21,,53,,,,25,,,,,,53,,,,,28,,,,',
+',,,,21,,,,,,,,,,,,,,,,,,,,,,,,,,26,,53,,,26,,,53,,,,,,,26,,,,,53,,,',
+',,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,28,53,53,,,53,,26,,,,53,,,,,,28,,26',
+',,,,,,,,,,,,,,,,53,,,,,,,,53,,,,53,,,53,53,,,,26,26,,,26,,,,,,26,25',
+',25,,,,,,25,,,,,,,,,25,,,21,,21,,,,,,,,,,26,,,,26,,53,26,26,25,,,25',
+',,,,,,,,,,,,,,,,21,,53,21,,25,,,53,,53,,25,,,,,,,,,,,,,21,,,,,,,26,',
+',,,,,,,,,,,,,,,,,,,,,,,26,,,,,25,26,,26,,25,25,,,,,,,,,,,25,,,21,,,',
+',21,21,,25,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,25,,,,,25,,,,,,,,,,25,,,,,21,,,,,21,,,,,,,,,,21,,,,,,,,,,,,,,,,',
+',,,,,25,,,,,,25,,,,32,,,,,,,,25,32,32,32,,,,,21,,,,,,32,32,32,,,,21',
+',,,,,,,,,,32,32,,,,,25,25,,,25,,,,,,25,,,,,,,,,,21,21,,,21,,,,,,21,',
+',,,25,,,,,,,,25,,,,25,,,25,25,,,,,,,,,,,,21,,,,,,,21,21,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,25,,,,,,,,,,,,,,,,,,,,21,,,,,25,,,,,,25,,25,,,,32',
+'32,32,,,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,,,,,,,,,,,,,,,32,,,,,,,,,,32,32',
+'32,,,,,,,,,,32,,,32,,,,,,,,,,,,,,32,32,,,,,,,,,,32,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,32,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(3046, 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, 174, 18, nil, 64, 114, 48, 52, -302, 349,
+ -500, -557, -520, nil, -240, 22, 240, -22, -183, 178,
+ 63, 1343, 5, -207, -362, 1323, 987, -141, 928, -17,
+ 94, -19, 2075, -18, nil, nil, 4, -195, 33, -208,
+ -367, 639, -296, nil, 175, 127, 96, -129, nil, -32,
+ 41, -270, 425, 932, -287, 35, -51, -1, nil, nil,
+ 24, 40, -228, 158, 107, -50, 48, -218, 97, -23,
+ -306, -254, -403, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, 92, 99, -55, nil, -176, -313, -631, -449,
+ -314, 86, nil, -204, 14, nil, -522, 80, 93, 91,
+ -255, 201, 210, 212, -410, 216, -407, -438, -761, -418,
+ -564, -216, -225, -413, -684, -749, -407, -581, -620, -461,
+ nil, -551, -490, -149, -127, -452, 192, -529, -470, nil,
+ -511, -678, -765, -759, -357, -478, -157, -476, -6, -608,
+ -607, -73, nil, -82, -78, -702, -455, -587, nil, nil,
+ 121, 121, 48, 118, 128, -239, -262, 136, 141, 142,
+ -329, -328, -314, -474, nil, 387, -545, -658, -536, -583,
+ nil, -661, -748, nil, nil, -421 ]
+
+racc_goto_default = [
+ nil, nil, nil, 3, nil, 4, 342, 289, nil, 519,
+ nil, 814, nil, 286, 287, nil, nil, nil, 11, 12,
+ 18, 225, 318, nil, nil, 223, 224, nil, 279, 17,
+ nil, 436, 21, 22, 23, 24, nil, 641, nil, nil,
+ nil, 306, nil, 25, 407, 32, nil, nil, 34, 37,
+ 36, nil, 220, 221, 354, nil, 128, 415, 127, 130,
+ 77, 78, nil, 46, nil, 779, 408, nil, 409, 420,
+ 596, 482, 277, 263, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, nil, 264, 61, nil, nil, nil, nil,
+ nil, nil, 69, nil, 534, 70, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 804, 670, nil, 805, 904,
+ 751, 658, nil, 659, nil, nil, 660, nil, 662, 612,
+ nil, nil, nil, 668, nil, nil, nil, 712, nil, nil,
+ nil, nil, 419, nil, nil, nil, nil, nil, 76, 79,
+ 80, nil, nil, nil, nil, nil, 568, nil, nil, nil,
+ nil, nil, nil, 873, 657, nil, 661, 672, 674, 763,
+ 677, 678, 764, 681, 684, 281 ]
+
+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, 239, :_reduce_281,
+ 4, 204, :_reduce_282,
+ 0, 240, :_reduce_283,
+ 0, 241, :_reduce_284,
+ 6, 204, :_reduce_285,
+ 0, 242, :_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,
+ 0, 243, :_reduce_303,
+ 3, 204, :_reduce_304,
+ 6, 204, :_reduce_305,
+ 6, 204, :_reduce_306,
+ 0, 244, :_reduce_307,
+ 0, 245, :_reduce_308,
+ 7, 204, :_reduce_309,
+ 0, 246, :_reduce_310,
+ 0, 247, :_reduce_311,
+ 7, 204, :_reduce_312,
+ 5, 204, :_reduce_313,
+ 4, 204, :_reduce_314,
+ 0, 248, :_reduce_315,
+ 0, 249, :_reduce_316,
+ 9, 204, :_reduce_317,
+ 0, 250, :_reduce_318,
+ 6, 204, :_reduce_319,
+ 0, 251, :_reduce_320,
+ 7, 204, :_reduce_321,
+ 0, 252, :_reduce_322,
+ 5, 204, :_reduce_323,
+ 0, 253, :_reduce_324,
+ 6, 204, :_reduce_325,
+ 0, 254, :_reduce_326,
+ 0, 255, :_reduce_327,
+ 9, 204, :_reduce_328,
+ 1, 204, :_reduce_329,
+ 1, 204, :_reduce_330,
+ 1, 204, :_reduce_331,
+ 1, 204, :_reduce_332,
+ 1, 163, :_reduce_none,
+ 1, 233, :_reduce_334,
+ 1, 236, :_reduce_335,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_none,
+ 2, 228, :_reduce_338,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 5, 229, :_reduce_342,
+ 1, 152, :_reduce_none,
+ 2, 152, :_reduce_344,
+ 1, 232, :_reduce_none,
+ 1, 232, :_reduce_none,
+ 1, 256, :_reduce_347,
+ 3, 256, :_reduce_348,
+ 1, 259, :_reduce_349,
+ 3, 259, :_reduce_350,
+ 1, 258, :_reduce_none,
+ 4, 258, :_reduce_352,
+ 6, 258, :_reduce_353,
+ 3, 258, :_reduce_354,
+ 5, 258, :_reduce_355,
+ 2, 258, :_reduce_356,
+ 4, 258, :_reduce_357,
+ 1, 258, :_reduce_358,
+ 3, 258, :_reduce_359,
+ 4, 260, :_reduce_360,
+ 2, 260, :_reduce_361,
+ 2, 260, :_reduce_362,
+ 1, 260, :_reduce_363,
+ 2, 265, :_reduce_364,
+ 0, 265, :_reduce_365,
+ 6, 266, :_reduce_366,
+ 8, 266, :_reduce_367,
+ 4, 266, :_reduce_368,
+ 6, 266, :_reduce_369,
+ 4, 266, :_reduce_370,
+ 2, 266, :_reduce_none,
+ 6, 266, :_reduce_372,
+ 2, 266, :_reduce_373,
+ 4, 266, :_reduce_374,
+ 6, 266, :_reduce_375,
+ 2, 266, :_reduce_376,
+ 4, 266, :_reduce_377,
+ 2, 266, :_reduce_378,
+ 4, 266, :_reduce_379,
+ 1, 266, :_reduce_none,
+ 0, 181, :_reduce_381,
+ 1, 181, :_reduce_382,
+ 3, 270, :_reduce_383,
+ 1, 270, :_reduce_384,
+ 4, 270, :_reduce_385,
+ 1, 271, :_reduce_386,
+ 4, 271, :_reduce_387,
+ 1, 272, :_reduce_388,
+ 3, 272, :_reduce_389,
+ 1, 273, :_reduce_390,
+ 1, 273, :_reduce_none,
+ 0, 277, :_reduce_392,
+ 3, 227, :_reduce_393,
+ 4, 275, :_reduce_394,
+ 1, 275, :_reduce_395,
+ 0, 280, :_reduce_396,
+ 4, 276, :_reduce_397,
+ 0, 281, :_reduce_398,
+ 4, 276, :_reduce_399,
+ 0, 282, :_reduce_400,
+ 5, 279, :_reduce_401,
+ 2, 176, :_reduce_402,
+ 4, 176, :_reduce_403,
+ 5, 176, :_reduce_404,
+ 5, 176, :_reduce_405,
+ 2, 226, :_reduce_406,
+ 4, 226, :_reduce_407,
+ 4, 226, :_reduce_408,
+ 3, 226, :_reduce_409,
+ 3, 226, :_reduce_410,
+ 3, 226, :_reduce_411,
+ 2, 226, :_reduce_412,
+ 1, 226, :_reduce_413,
+ 4, 226, :_reduce_414,
+ 0, 284, :_reduce_415,
+ 5, 225, :_reduce_416,
+ 0, 285, :_reduce_417,
+ 5, 225, :_reduce_418,
+ 5, 231, :_reduce_419,
+ 1, 286, :_reduce_420,
+ 1, 286, :_reduce_none,
+ 6, 151, :_reduce_422,
+ 0, 151, :_reduce_423,
+ 1, 287, :_reduce_424,
+ 1, 287, :_reduce_none,
+ 1, 287, :_reduce_none,
+ 2, 288, :_reduce_427,
+ 1, 288, :_reduce_none,
+ 2, 153, :_reduce_429,
+ 1, 153, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 216, :_reduce_434,
+ 1, 290, :_reduce_435,
+ 2, 290, :_reduce_436,
+ 3, 291, :_reduce_437,
+ 1, 291, :_reduce_438,
+ 1, 291, :_reduce_439,
+ 3, 217, :_reduce_440,
+ 4, 218, :_reduce_441,
+ 3, 219, :_reduce_442,
+ 0, 295, :_reduce_443,
+ 3, 295, :_reduce_444,
+ 1, 296, :_reduce_445,
+ 2, 296, :_reduce_446,
+ 3, 221, :_reduce_447,
+ 0, 298, :_reduce_448,
+ 3, 298, :_reduce_449,
+ 3, 220, :_reduce_450,
+ 3, 222, :_reduce_451,
+ 0, 299, :_reduce_452,
+ 3, 299, :_reduce_453,
+ 0, 300, :_reduce_454,
+ 3, 300, :_reduce_455,
+ 0, 292, :_reduce_456,
+ 2, 292, :_reduce_457,
+ 0, 293, :_reduce_458,
+ 2, 293, :_reduce_459,
+ 0, 294, :_reduce_460,
+ 2, 294, :_reduce_461,
+ 1, 297, :_reduce_462,
+ 2, 297, :_reduce_463,
+ 0, 302, :_reduce_464,
+ 4, 297, :_reduce_465,
+ 1, 301, :_reduce_466,
+ 1, 301, :_reduce_467,
+ 1, 301, :_reduce_468,
+ 1, 301, :_reduce_none,
+ 1, 201, :_reduce_470,
+ 3, 202, :_reduce_471,
+ 1, 289, :_reduce_472,
+ 1, 289, :_reduce_473,
+ 2, 289, :_reduce_474,
+ 2, 289, :_reduce_475,
+ 1, 193, :_reduce_476,
+ 1, 193, :_reduce_477,
+ 1, 193, :_reduce_478,
+ 1, 193, :_reduce_479,
+ 1, 193, :_reduce_480,
+ 1, 194, :_reduce_481,
+ 1, 194, :_reduce_482,
+ 1, 194, :_reduce_483,
+ 1, 194, :_reduce_484,
+ 1, 194, :_reduce_485,
+ 1, 194, :_reduce_486,
+ 1, 194, :_reduce_487,
+ 1, 223, :_reduce_488,
+ 1, 223, :_reduce_489,
+ 1, 162, :_reduce_490,
+ 1, 162, :_reduce_491,
+ 1, 166, :_reduce_492,
+ 1, 166, :_reduce_493,
+ 1, 234, :_reduce_494,
+ 0, 303, :_reduce_495,
+ 4, 234, :_reduce_496,
+ 2, 234, :_reduce_497,
+ 3, 237, :_reduce_498,
+ 2, 237, :_reduce_499,
+ 4, 304, :_reduce_500,
+ 2, 304, :_reduce_501,
+ 2, 304, :_reduce_502,
+ 1, 304, :_reduce_503,
+ 2, 306, :_reduce_504,
+ 0, 306, :_reduce_505,
+ 6, 278, :_reduce_506,
+ 8, 278, :_reduce_507,
+ 4, 278, :_reduce_508,
+ 6, 278, :_reduce_509,
+ 4, 278, :_reduce_510,
+ 6, 278, :_reduce_511,
+ 2, 278, :_reduce_512,
+ 4, 278, :_reduce_513,
+ 6, 278, :_reduce_514,
+ 2, 278, :_reduce_515,
+ 4, 278, :_reduce_516,
+ 2, 278, :_reduce_517,
+ 4, 278, :_reduce_518,
+ 1, 278, :_reduce_519,
+ 0, 278, :_reduce_520,
+ 1, 274, :_reduce_521,
+ 1, 274, :_reduce_522,
+ 1, 274, :_reduce_523,
+ 1, 274, :_reduce_524,
+ 1, 257, :_reduce_none,
+ 1, 257, :_reduce_none,
+ 1, 308, :_reduce_527,
+ 3, 308, :_reduce_528,
+ 1, 267, :_reduce_529,
+ 3, 267, :_reduce_530,
+ 2, 309, :_reduce_531,
+ 2, 310, :_reduce_532,
+ 1, 261, :_reduce_533,
+ 3, 261, :_reduce_534,
+ 1, 305, :_reduce_535,
+ 3, 305, :_reduce_536,
+ 1, 311, :_reduce_none,
+ 1, 311, :_reduce_none,
+ 2, 262, :_reduce_539,
+ 1, 262, :_reduce_540,
+ 3, 312, :_reduce_541,
+ 3, 313, :_reduce_542,
+ 1, 268, :_reduce_543,
+ 3, 268, :_reduce_544,
+ 1, 307, :_reduce_545,
+ 3, 307, :_reduce_546,
+ 1, 314, :_reduce_none,
+ 1, 314, :_reduce_none,
+ 2, 269, :_reduce_549,
+ 1, 269, :_reduce_550,
+ 1, 315, :_reduce_none,
+ 1, 315, :_reduce_none,
+ 2, 264, :_reduce_553,
+ 2, 263, :_reduce_554,
+ 0, 263, :_reduce_555,
+ 1, 238, :_reduce_none,
+ 3, 238, :_reduce_557,
+ 0, 224, :_reduce_558,
+ 2, 224, :_reduce_none,
+ 1, 209, :_reduce_560,
+ 3, 209, :_reduce_561,
+ 3, 316, :_reduce_562,
+ 2, 316, :_reduce_563,
+ 2, 316, :_reduce_564,
+ 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, 283, :_reduce_none,
+ 1, 283, :_reduce_none,
+ 1, 283, :_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_581,
+ 2, 165, :_reduce_582,
+ 0, 208, :_reduce_none,
+ 1, 208, :_reduce_none,
+ 1, 208, :_reduce_none,
+ 1, 235, :_reduce_586,
+ 1, 235, :_reduce_none,
+ 1, 147, :_reduce_none,
+ 2, 147, :_reduce_none,
+ 0, 206, :_reduce_590 ]
+
+racc_reduce_n = 591
+
+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,
+ :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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "singleton",
+ "@5",
+ "@6",
+ "@7",
+ "@8",
+ "@9",
+ "@10",
+ "@11",
+ "@12",
+ "@13",
+ "@14",
+ "@15",
+ "@16",
+ "@17",
+ "@18",
+ "@19",
+ "@20",
+ "@21",
+ "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",
+ "@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",
+ "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.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
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_56(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ 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_internal(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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_304(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ 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)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ 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])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ 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)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_335(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+# reduce 336 omitted
+
+# reduce 337 omitted
+
+def _reduce_338(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 339 omitted
+
+# reduce 340 omitted
+
+# reduce 341 omitted
+
+def _reduce_342(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 343 omitted
+
+def _reduce_344(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 345 omitted
+
+# reduce 346 omitted
+
+def _reduce_347(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_349(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 351 omitted
+
+def _reduce_352(val, _values, result)
+ @static_env.declare val[3][0]
+
+ result = val[0].
+ push(@builder.restarg(val[2], val[3]))
+
+ result
+end
+
+def _reduce_353(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_354(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2]))
+
+ result
+end
+
+def _reduce_355(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_356(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_357(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_358(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+def _reduce_359(val, _values, result)
+ result = [ @builder.restarg(val[0]),
+ *val[2] ]
+
+ 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[1])
+
+ result
+end
+
+def _reduce_363(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_364(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_365(val, _values, result)
+ result = []
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_368(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+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)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 371 omitted
+
+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)
+ 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_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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ 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
+
+def _reduce_378(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_379(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 380 omitted
+
+def _reduce_381(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_382(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_383(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_384(val, _values, result)
+ result = @builder.args(val[0], [], val[0])
+
+ result
+end
+
+def _reduce_385(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 391 omitted
+
+def _reduce_392(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_393(val, _values, result)
+ result = [ val[1], val[2] ]
+
+ @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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_401(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ 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)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_416(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_417(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_418(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_419(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 421 omitted
+
+def _reduce_422(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_423(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_424(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 425 omitted
+
+# reduce 426 omitted
+
+def _reduce_427(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 428 omitted
+
+def _reduce_429(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 430 omitted
+
+# reduce 431 omitted
+
+# reduce 432 omitted
+
+# reduce 433 omitted
+
+def _reduce_434(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_435(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_437(val, _values, result)
+ result = @builder.string_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_438(val, _values, result)
+ result = @builder.string(val[0])
+
+ result
+end
+
+def _reduce_439(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_440(val, _values, result)
+ result = @builder.xstring_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_441(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_442(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_443(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ result = @builder.symbols_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 = @builder.words_compose(val[0], val[1], val[2])
+
+ 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.string_internal(val[1])
+
+ result
+end
+
+def _reduce_454(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_455(val, _values, result)
+ result = val[0] << @builder.symbol_internal(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 = []
+
+ result
+end
+
+def _reduce_461(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_462(val, _values, result)
+ result = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_463(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_464(val, _values, result)
+ @lexer.cond.push(false)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ @lexer.cond.lexpop
+ @lexer.cmdarg.lexpop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_467(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 469 omitted
+
+def _reduce_470(val, _values, result)
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_471(val, _values, result)
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ 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)
+ 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_475(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_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 = @builder.args(nil, val[0], 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
+
+# reduce 526 omitted
+
+def _reduce_527(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_528(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_529(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_530(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_531(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_532(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_533(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_534(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_535(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_536(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 537 omitted
+
+# reduce 538 omitted
+
+def _reduce_539(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_540(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ result
+end
+
+def _reduce_541(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_542(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ 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.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_550(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 551 omitted
+
+# reduce 552 omitted
+
+def _reduce_553(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+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[1]
+
+ result
+end
+
+def _reduce_558(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 559 omitted
+
+def _reduce_560(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_561(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_562(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_563(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_564(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# 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
+
+# reduce 578 omitted
+
+# reduce 579 omitted
+
+# reduce 580 omitted
+
+def _reduce_581(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_582(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 583 omitted
+
+# reduce 584 omitted
+
+# reduce 585 omitted
+
+def _reduce_586(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 587 omitted
+
+# reduce 588 omitted
+
+# reduce 589 omitted
+
+def _reduce_590(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby20
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby21.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby21.rb
new file mode 100644
index 000000000..f6a875367
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby21.rb
@@ -0,0 +1,6611 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-579,444,536,594,270,216,217,-579,-579,-579,557,536,-105,-579,-579,-83',
+'-579,-286,219,536,-99,578,536,-69,-482,-579,580,-102,216,217,-494,-482',
+'526,216,217,528,-579,-579,-100,-579,-579,-579,-579,-579,536,-102,836',
+'-490,-93,-91,-93,-101,963,-488,-490,691,-105,-286,-102,220,-488,-99',
+'867,-100,813,781,-579,-579,-579,-579,-579,-579,-579,-579,-579,-579,-579',
+'-579,-579,-579,111,-104,-579,-579,-579,-98,599,577,-97,-98,-579,269',
+'579,-579,781,691,542,691,-579,115,-579,-99,-579,-579,114,-579,-579,-579',
+'-579,-579,-289,-579,-579,-579,-93,-91,556,-289,-289,-289,115,-96,220',
+'-289,-289,114,-289,-579,-575,115,-579,-579,818,-92,114,-579,-93,115',
+'-99,115,115,-101,114,-99,114,114,-289,-289,270,-289,-289,-289,-289,-289',
+'-93,-91,-100,-93,-91,115,-101,-100,115,-102,114,-93,-91,114,-102,-101',
+'-90,866,-91,-103,-101,123,-289,-289,-289,-289,-289,-289,-289,-289,-289',
+'-289,-289,-289,-289,-289,-95,270,-289,-289,-289,208,598,-88,-89,115',
+'-289,115,565,-289,114,209,114,565,-289,565,-289,526,-289,-289,525,-289',
+'-289,-289,-289,-289,-289,-289,514,-289,-493,-575,210,-289,-289,-289',
+'216,217,-289,-289,-289,269,-289,-289,-576,115,-289,-289,215,-94,114',
+'-289,-289,-289,-289,216,217,-103,259,747,-493,265,-289,-289,-489,-289',
+'-289,-289,-289,-289,548,-489,567,566,549,-92,565,567,566,567,566,563',
+'723,-104,269,-97,615,725,-94,746,93,94,-289,-289,-289,-289,-289,-289',
+'-289,-289,-289,-289,-289,-289,-289,-289,270,-88,-289,-289,-289,317,749',
+'-289,-102,-97,-289,93,94,-289,-289,614,-289,318,-289,565,-289,220,-289',
+'-289,220,-289,-289,-289,-289,-289,565,-289,-482,-289,567,566,568,386',
+'-100,-482,-482,-482,615,220,-482,-482,-482,-289,-482,115,-289,-289,-289',
+'-289,114,-289,-482,-289,-482,-482,-482,-103,95,96,265,-573,593,526,-482',
+'-482,528,-482,-482,-482,-482,-482,669,614,666,665,664,552,667,567,566',
+'570,-487,269,918,95,96,399,-572,-487,567,566,572,553,-482,-482,-482',
+'-482,-482,-482,-482,-482,-482,-482,-482,-482,-482,-482,615,-91,-482',
+'-482,-482,-482,-482,-482,615,-100,-482,514,-482,-482,-482,443,-482,-573',
+'-482,-415,-482,-482,-482,-482,445,-482,-482,-482,-482,-482,262,-482',
+'-479,-482,-479,614,446,263,565,-479,-573,-479,219,614,-572,565,885,-482',
+'-479,-579,-482,-482,-482,-482,115,-482,-579,-482,-95,114,-494,-482,477',
+'-579,-579,-579,-104,-572,-579,-579,-579,-415,-579,669,486,666,665,664',
+'-415,667,396,-579,-579,-579,-579,398,397,-415,220,-579,214,967,-579',
+'-579,488,-579,-579,-579,-579,-579,490,-579,567,566,576,-290,-415,-89',
+'-579,567,566,581,-290,-575,497,-98,-68,-579,220,732,500,-290,-579,-579',
+'-579,-579,-579,-579,-579,-579,-579,-579,-579,-579,-579,-579,-579,-96',
+'-579,-579,-579,-579,748,-579,262,-105,-579,501,-579,-579,-579,263,-579',
+'-575,-579,982,-579,-579,-579,-579,81,-579,-579,-579,-579,-579,-90,-579',
+'-579,-579,-486,-485,82,-484,-99,508,-579,-486,-485,115,-484,274,83,-579',
+'114,115,-579,-579,-579,-579,114,-579,-479,-579,74,75,71,-101,57,-479',
+'-479,-479,63,64,-479,-479,-479,67,-479,65,66,68,310,311,72,73,-479,220',
+'-479,-479,-479,306,307,313,103,102,104,105,-479,-479,232,-479,-479,-479',
+'-479,-479,526,45,265,528,107,106,108,97,56,99,98,100,511,101,109,110',
+'515,93,94,42,43,41,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479',
+'-479,-479,-479,-479,216,217,-479,-479,-479,225,-479,-479,231,240,-479',
+'58,59,-479,-479,60,-479,220,-479,115,-479,44,-479,-479,114,-479,-479',
+'-479,-479,-479,230,-479,529,-479,530,91,81,84,85,490,86,88,87,89,813',
+'781,542,-479,82,90,-479,-479,-479,-479,388,-479,62,-479,83,95,96,-479',
+'5,74,75,71,9,57,216,217,-333,63,64,684,683,546,67,-333,65,66,68,30,31',
+'72,73,547,-333,582,585,-261,29,28,27,103,102,104,105,717,718,19,587',
+'719,109,110,603,8,45,7,10,107,106,108,97,56,99,98,100,220,101,109,110',
+'591,93,94,42,43,41,240,244,249,250,251,246,248,256,257,252,253,544,233',
+'234,-290,592,254,255,545,40,265,-290,33,602,605,58,59,543,240,60,-290',
+'35,237,240,243,44,239,238,673,235,236,247,245,241,20,242,240,240,676',
+'91,81,84,85,552,86,88,87,89,220,220,551,220,82,90,-83,258,633,-238,220',
+'553,62,519,83,95,96,291,74,75,71,9,57,684,683,-279,63,64,677,644,649',
+'67,-279,65,66,68,30,31,72,73,650,-279,652,687,542,29,28,27,103,102,104',
+'105,694,712,19,722,726,727,-262,588,8,45,293,10,107,106,108,97,56,99',
+'98,100,733,101,109,110,477,93,94,42,43,41,240,244,249,250,251,246,248',
+'256,257,252,253,972,233,234,-492,477,254,255,973,40,220,-492,33,673',
+'751,58,59,971,259,60,-492,35,237,676,243,44,239,238,488,235,236,247',
+'245,241,20,242,490,774,644,91,81,84,85,440,86,88,87,89,220,265,441,265',
+'82,90,644,258,684,683,240,442,62,677,83,95,96,291,74,75,71,9,57,781',
+'220,-491,63,64,790,793,794,67,-491,65,66,68,30,31,72,73,796,-491,798',
+'800,808,29,28,27,103,102,104,105,809,810,19,781,817,220,220,603,8,45',
+'293,10,107,106,108,97,56,99,98,100,826,101,109,110,-263,93,94,42,43',
+'41,240,244,249,250,251,246,248,256,257,252,253,-289,233,234,-290,835',
+'254,255,-289,40,838,-290,33,-576,793,58,59,-289,841,60,-290,35,237,843',
+'243,44,239,238,845,235,236,247,245,241,20,242,847,220,849,91,81,84,85',
+'516,86,88,87,89,850,853,517,855,82,90,856,258,644,858,-261,442,62,862',
+'83,95,96,291,74,75,71,9,57,864,220,-279,63,64,883,220,887,67,-279,65',
+'66,68,30,31,72,73,889,-279,895,898,220,29,28,27,103,102,104,105,902',
+'915,19,666,665,664,-264,667,8,45,293,10,107,106,108,97,56,99,98,100',
+'912,101,109,110,919,93,94,42,43,41,240,244,249,250,251,246,248,256,257',
+'252,253,-289,233,234,506,920,254,255,-289,40,931,507,33,-576,793,58',
+'59,-289,933,60,505,35,237,935,243,44,239,238,937,235,236,247,245,241',
+'20,242,939,939,220,91,81,84,85,-492,86,88,87,89,945,948,-492,949,82',
+'90,954,258,712,793,957,-492,62,959,83,95,96,291,74,75,71,9,57,961,963',
+'-491,63,64,963,974,984,67,-491,65,66,68,30,31,72,73,-576,-491,-575,649',
+'999,29,28,27,103,102,104,105,1000,915,19,666,665,664,1001,667,8,45,293',
+'10,107,106,108,97,56,99,98,100,939,101,109,110,939,93,94,42,43,41,240',
+'244,249,250,251,246,248,256,257,252,253,552,233,234,212,939,254,255',
+'918,40,1006,213,33,984,1009,58,59,553,1010,60,211,35,237,1011,243,44',
+'239,238,963,235,236,247,245,241,20,242,963,963,220,91,81,84,85,984,86',
+'88,87,89,939,984,,,82,90,,258,,,,,62,,83,95,96,5,74,75,71,9,57,,,,63',
+'64,,,,67,,65,66,68,30,31,72,73,118,119,120,121,122,29,28,27,103,102',
+'104,105,,,19,118,119,120,121,122,8,45,7,10,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,240,244,249,250,251,246,248,256,257,252',
+'253,-289,233,234,,,254,255,-289,40,,,33,-576,,58,59,-289,,60,,35,237',
+',243,44,239,238,,235,236,247,245,241,20,242,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,258,,,,,62,,83,95,96,5,74,75,71,9,57,,,,63,64,,,,67,,65',
+'66,68,30,31,72,73,118,119,120,121,122,29,28,27,103,102,104,105,,,19',
+',,,,,8,45,7,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,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',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83,95,96,291,74,75',
+'71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83',
+'95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',258,,,,,62,,83,95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,293,10,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,258,,,,,62,,83,95,96,291,74,75,71,9,57,,,,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45',
+'293,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,240',
+'244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,40,,,295',
+',,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83,95,96,291,74,75,71',
+'9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83',
+'95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+'220,258,,,,,62,,83,95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,293,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,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,,,,91,81,84,85,',
+'86,88,87,89,,,,,82,90,,258,,,,,62,,83,95,96,291,74,75,71,9,57,,,,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,',
+',,,8,45,293,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,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',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83,95,96,291,74,75',
+'71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83',
+'95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',258,,,,,62,,83,95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,669,19,666,665,664,,667,8,45',
+'293,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,669',
+',666,665,664,,667,,802,,,240,,,,,,805,,40,,,295,,,58,59,,,60,,35,,,',
+'44,,802,,,,,,237,20,,944,239,238,91,81,84,85,,86,88,87,89,,,,,82,90',
+',669,,666,665,664,62,667,83,95,96,291,74,75,71,9,57,,,,63,64,,,,67,',
+'65,66,68,30,31,72,73,,,,,802,29,28,27,103,102,104,105,240,805,19,,,',
+'240,,8,45,293,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42',
+'43,41,240,,237,,,,239,238,237,235,236,,239,238,,,254,255,,40,,,33,,',
+'58,59,,240,60,,35,237,,243,44,239,238,,235,236,,,241,20,242,,,,91,81',
+'84,85,,86,88,87,89,,,237,,82,90,239,238,,235,236,,62,,83,95,96,291,74',
+'75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,669,19,666,665,664,,667,8,45,293,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,240,669,,666,665,664,,667,802,669,',
+'666,665,664,,667,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238',
+'802,235,236,,,241,20,242,802,,,91,81,84,85,,86,88,87,89,,,,,82,90,,669',
+',666,665,664,62,667,83,95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,802,29,28,27,103,102,104,105,,669,19,666,665,664',
+',667,8,45,293,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42',
+'43,41,240,244,249,250,251,246,248,,802,252,253,,,,,,254,255,,40,,,33',
+',,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,291,74,75,71,9',
+'57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105',
+',,19,,,,,,8,45,293,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'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',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,291,74,75,71',
+'9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,291',
+'74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83',
+'95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',,,,,,62,,83,95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,293,10,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88,87,89,',
+',,,82,90,,,,,,,62,,83,95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,293,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,291,74,75,71,9,57,,,,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,293,10',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,240,,,,,,,',
+',,,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236',
+',,241,20,242,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96',
+'291,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,240,,,,,,,,,,,,,,,,254,255,,40,,,33,,,58,59',
+',,60,,35,237,,243,44,239,238,,235,236,,,241,20,242,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,,,,62,,83,95,96,291,74,75,71,9,57,,,,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45',
+'293,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,240',
+'-598,-598,-598,-598,246,248,,,-598,-598,,,,,,254,255,,40,,,295,,,58',
+'59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,291,74,75,71,9,57,,',
+',63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19',
+',,,,,8,45,293,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,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',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,240,-598,-598,-598,-598,246,248,,,-598,-598,,,,,,254,255,,225,,,231',
+',,58,59,,,60,,,237,,243,44,239,238,,235,236,247,245,241,230,242,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,240',
+',,,,,,,,,,,,,,,254,255,,225,,,231,,,58,59,,,60,,,237,,243,44,239,238',
+',235,236,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103',
+'102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,240,,,,,,,,,,,,,,,,254,255,,225,,,231,,,58,59,,,60,',
+',237,,243,44,239,238,,235,236,,,,230,,,,,91,81,84,85,,86,88,87,89,,',
+',,82,90,,,,,,,62,,83,95,96,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,,10,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,240,,,,,,,,,,,,,,,,254',
+'255,,40,,,33,,,58,59,,,60,,35,237,,,44,239,238,,235,236,,,,20,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,',
+',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,627,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,404,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,285,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,283,,281,,44,,,286,,,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,285,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,283,,281,,44,,,286,,,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,285,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,283,,281,,44,,,286,,,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,285,101,109,110,,93,94,42,43,41,,,,,,,,,,,,',
+',,,,,,,225,,,231,,,58,59,,,60,,,,281,,44,,,286,,,,,,230,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310',
+'311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,308,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,,,314,,,,,,,,,,,,,,,,,,,,304',
+',,300,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,',
+',,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58',
+'59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306',
+'307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,',
+'60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307',
+'313,103,102,104,105,,,232,,,,,,,308,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,,,314,,,,,,,,,,,,,,,,,,,,304,,,231,,,58,59,,,60,,,669',
+',666,665,664,673,667,,,,,,,,,676,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',,,503,,671,62,,83,95,96,74,75,71,,57,684,683,,63,64,677,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311',
+'72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,308,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,,,314,,,,,,,,,,,,,,,,,,,,852,,,231',
+',,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306',
+'307,313,103,102,104,105,,,232,,,,,,,308,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,,,314,,,,,,,,,,,,,,,,,,,,926,,,231,,,58,59,,,60',
+',,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103',
+'102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,',
+',,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104',
+'105,,,232,,,,,,,308,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+',,314,,,,,,,,,,,,,,,,,,,,304,,,300,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,',
+',,,,308,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,314,,,,',
+',,,,,,,,,,,,,,,304,,,300,,,58,59,,,60,,299,,,,,,,,,,,,,,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,308',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,314,,,,,,,,,,,,',
+',,,,,,,304,,,231,,,58,59,,,60,,,669,,666,665,664,673,667,,,,,,,,,676',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,316,,671,62,,83,95,96,74,75,71',
+'9,57,684,683,,63,64,677,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,19,,,,,,8,45,7,10,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44',
+',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102',
+'104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,286',
+',,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,74,75,71,9,57,,,',
+'63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19',
+',,,,,8,45,7,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,388,62,,83,95,96,74,75,71,,57',
+',,,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,',
+',,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,',
+',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310',
+'311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311',
+'72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72',
+'73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,',
+',,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58',
+'59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306',
+'307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,',
+'60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307',
+'313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,',
+',,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102',
+'104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,',
+',107,106,108,97,56,99,98,100,285,101,109,110,,93,94,42,43,41,,,,,,,',
+',,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,286,,,,,,230,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,',
+',,45,,,107,106,108,97,56,99,98,100,285,101,109,110,,93,94,42,43,41,',
+',,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,286,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,',
+'232,,,,,,,308,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,314',
+',,,,,,,,,,,,,,,,,,,852,,,231,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,285,101,109,110,,93,94,42,43,41,,,,,,,,,,,,',
+',,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,286,,,,,,230,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,220,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310',
+'311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311',
+'72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72',
+'73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,',
+',,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58',
+'59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306',
+'307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,',
+'60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307',
+'313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,',
+',,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,',
+',,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,',
+',,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,',
+',,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56',
+'99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,220,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,',
+',,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59',
+',,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102',
+'104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,281,,44',
+',,286,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103',
+'102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,627,',
+'281,,44,,,286,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102',
+'104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,730,,,,44,,,,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,404,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310',
+'311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,285,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,283,,281,,44,,,286,,,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72',
+'73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,',
+',29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,',
+'60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75',
+'71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,',
+',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105',
+',,232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,286',
+',,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105',
+',,232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,286',
+',,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,,,44,,,,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,286',
+',,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105',
+',,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,286,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,627,,,,44,,,286,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,404,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,',
+',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310',
+'311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311',
+'72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,308,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,,,314,,,,,,,,,,,,,,,,,,,,304,,,300',
+',,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,285',
+'101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60',
+',283,,281,,44,,,286,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',,,,,,62,,83,95,96,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73',
+',,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,,10,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58',
+'59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,',
+'306,307,313,103,102,104,105,,,232,,,,,,,308,,,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,,,314,,,,,,,,,,,,,,,,,,,,304,,,300,,,58,59,',
+',60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,',
+',,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311',
+'72,73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58',
+'59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,',
+',74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28',
+'27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,',
+',,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283',
+',,,44,,,286,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75',
+'71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,',
+',,,44,,,286,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75',
+'71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,',
+',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,115,,,,,114,62,,83,95,96,74,75,71,,57,,,,63,64,,',
+',67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,,232,',
+',,,,,308,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,314,,,',
+',,,,,,,,,,,,,,,,348,,,33,,,58,59,,,60,,35,669,,666,665,664,673,667,',
+',,,,,,,676,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,671,62,,83,95,96',
+'74,75,71,9,57,684,683,,63,64,677,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,293,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59',
+',,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,',
+',,388,62,,83,95,96,74,75,71,,57,,,,63,64,,,,67,,65,66,68,310,311,72',
+'73,,,,,,306,307,313,103,102,104,105,,,232,,,,,,,308,,,107,106,108,353',
+'56,99,98,354,,101,109,110,,93,94,,,314,,,,,,,,,,,,,,,,,360,,,355,,,231',
+',,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306',
+'307,313,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,',
+'60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307',
+'313,103,102,104,105,,,232,,,,,,,308,,,107,106,108,353,56,99,98,354,',
+'101,109,110,,93,94,,,314,,,,,,,,,,,,,,,,,,,,355,,,231,,,58,59,,,60,',
+',,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103',
+'102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,281',
+',44,,,286,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,285,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,627',
+',281,,44,,,286,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102',
+'104,105,,,232,,,,,,,308,,,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,,,314,,,,,,,,,,,,,,,,,,,,304,,,300,,,58,59,,,60,,,,,,,,,,,,,,',
+',,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,310,311,72,73,,,,,,306,307,313,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,519,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,-580,,62,,83,95,96,-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,-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,-581,-581,,,,,,,,,,,,,,-581,,,-581',
+'-581,-581,-581,-280,-581,,-581,,,,-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,669,,666',
+'665,664,673,667,,,,,,,-280,,676,-280,-280,-280,-280,-244,-280,,-280',
+',,,-244,-244,-244,,,-244,-244,-244,,-244,671,,,,,,,,-244,-244,-244,684',
+'683,,,,677,,,-244,-244,,-244,-244,-244,-244,-244,,,,,,,,,,,,,,,,,,,',
+',,,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244',
+'-244,,,-244,-244,-244,,,-244,,265,-244,,,-244,-244,,-244,,-244,,-244',
+',-244,-244,,-244,-244,-244,-244,-244,,-244,-244,-244,,,,,,,,,,,,,,-244',
+',-414,-244,-244,,-244,,-244,-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,,265,-414,,,-414,-414,,-414',
+',-414,,-414,,-414,-414,,-414,-414,-414,-414,-414,,-414,-414,-414,,,',
+',,,,,,,,,,-414,,-244,-414,-414,,-414,,-414,-244,-244,-244,,,-244,-244',
+'-244,669,-244,666,665,664,673,667,,,,-244,-244,,,,676,,,,,,-244,-244',
+',-244,-244,-244,-244,-244,,,,,,,,,671,,,,,,,,,681,680,684,683,,,,677',
+',,,,,,,,-244,,-296,,,,,-244,,-296,-296,-296,265,-244,-296,-296,-296',
+'220,-296,,,,,,,,,,-296,-296,,,,,,-244,-244,,-296,-296,,-296,-296,-296',
+'-296,-296,,,,,-244,,,-244,,,,,-244,,,,,,,,,,-296,-296,-296,-296,-296',
+'-296,-296,-296,-296,-296,-296,-296,-296,-296,,,-296,-296,-296,,,-296',
+',274,-296,,,-296,-296,,-296,,-296,,-296,,-296,-296,,-296,-296,-296,-296',
+'-296,,-296,,-296,,,,,,,,,,,,,,-296,,,-296,-296,,-296,,-296,175,186,176',
+'199,172,192,182,181,202,203,197,180,179,174,200,204,205,184,173,187',
+'191,193,185,178,,,,194,201,196,195,188,198,183,171,190,189,,,,,,170',
+'177,168,169,165,166,167,126,128,,,127,,,,,,,,159,160,,156,138,139,140',
+'147,144,146,,,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153,152,,137,158',
+'155,154,163,150,151,145,143,135,157,136,,,164,91,,,,,,,,,,,,,,90,175',
+'186,176,199,172,192,182,181,202,203,197,180,179,174,200,204,205,184',
+'173,187,191,193,185,178,,,,194,201,196,195,188,198,183,171,190,189,',
+',,,,170,177,168,169,165,166,167,126,128,,,127,,,,,,,,159,160,,156,138',
+'139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153,152',
+',137,158,155,154,163,150,151,145,143,135,157,136,,,164,91,,,,,,,,,,',
+',,,90,175,186,176,199,172,192,182,181,202,203,197,180,179,174,200,204',
+'205,184,173,187,191,193,185,178,,,,194,201,196,195,188,198,183,171,190',
+'189,,,,,,170,177,168,169,165,166,167,126,128,,,127,,,,,,,,159,160,,156',
+'138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153',
+'152,,137,158,155,154,163,150,151,145,143,135,157,136,,,164,91,,,,,,',
+',,,,,,,90,175,186,176,199,172,192,182,181,202,203,197,180,179,174,200',
+'204,205,184,173,187,191,193,185,178,,,,194,201,196,195,188,198,183,171',
+'190,189,,,,,,170,177,168,169,165,166,167,126,128,125,,127,,,,,,,,159',
+'160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,',
+',,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136,,,164',
+'91,,,,,,,,,,,,,,90,175,186,176,199,172,192,182,181,202,203,197,180,179',
+'174,200,204,205,184,173,187,191,193,185,178,,,,194,201,196,371,370,372',
+'369,171,190,189,,,,,,170,177,168,169,366,367,368,364,128,99,98,365,',
+'101,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148',
+'149,,,,,,376,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135',
+'157,136,,,164,175,186,176,199,172,192,182,181,202,203,197,180,179,174',
+'200,204,205,184,173,187,191,193,185,178,,,,194,201,196,195,188,198,183',
+'171,190,189,,,,,,170,177,168,169,165,166,167,126,128,,,127,,,,,,,,159',
+'160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,',
+',,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136,697',
+'417,164,,698,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,',
+',,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163,150,151',
+'145,143,135,157,136,475,417,164,,476,,,,,,,,159,160,,156,138,139,140',
+'147,144,146,,,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153,152,,137,158',
+'155,154,163,150,151,145,143,135,157,136,608,424,164,,609,,,,,,,,159',
+'160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,265',
+',,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136,606',
+'417,164,,607,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,',
+',,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163,150,151',
+'145,143,135,157,136,637,417,164,,638,,,,,,,,159,160,,156,138,139,140',
+'147,144,146,,,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137',
+'158,155,154,163,150,151,145,143,135,157,136,640,424,164,,641,,,,,,,',
+'159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,',
+',,,265,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136',
+'969,424,164,,968,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142',
+',,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163,150',
+'151,145,143,135,157,136,606,417,164,,607,,,,,,,,159,160,,156,138,139',
+'140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152',
+',137,158,155,154,163,150,151,145,143,135,157,136,608,424,164,,609,,',
+',,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149',
+',,,,,265,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157',
+'136,995,417,164,,996,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141',
+'142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163',
+'150,151,145,143,135,157,136,997,424,164,,998,,,,,,,,159,160,,156,138',
+'139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153',
+'152,,137,158,155,154,163,150,151,145,143,135,157,136,420,424,164,,419',
+',,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148',
+'149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135',
+'157,136,475,417,164,,476,,,,,,,,159,160,,156,138,139,140,147,144,146',
+',,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154',
+'163,150,151,145,143,135,157,136,702,424,164,,703,,,,,,,,159,160,,156',
+'138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,265,,,,,,',
+',153,152,,137,158,155,154,163,150,151,145,143,135,157,136,699,424,164',
+',700,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162',
+'148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143',
+'135,157,136,413,417,164,,414,,,,,,,,159,160,,156,138,139,140,147,144',
+'146,,,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155',
+'154,163,150,151,145,143,135,157,136,,669,164,666,665,664,673,667,,669',
+',666,665,664,673,667,676,,,,,,,,676,,669,,666,665,664,673,667,,,,,,671',
+',,676,,,,,671,681,680,684,683,,,,677,681,680,684,683,,,,677,671,,669',
+',666,665,664,673,667,681,680,684,683,,,,677,676,,669,,666,665,664,673',
+'667,,669,,666,665,664,673,667,676,,,,,671,,,676,,,,,,681,680,684,683',
+',,,677,671,,,,,,,,671,,,684,683,,,,677,681,680,684,683,,,669,677,666',
+'665,664,673,667,669,,666,665,664,673,667,669,676,666,665,664,673,667',
+'669,676,666,665,664,673,667,,676,,,,,,,676,671,,,,,,,671,,,,684,683',
+',671,,677,,684,683,,671,,677,,684,683,,,,677,,684,683,,,669,677,666',
+'665,664,673,667,,669,,666,665,664,673,667,676,,,,,,,,676,,669,,666,665',
+'664,673,667,,,,,,671,655,,676,,,,,671,681,680,684,683,,,,677,681,680',
+'684,683,,,,677,671,,669,,666,665,664,673,667,681,680,684,683,,,,677',
+'676,,669,,666,665,664,673,667,,669,,666,665,664,673,667,676,,,,,671',
+',,676,,,,,,,,684,683,,,,677,671,,,,,,,,671,681,680,684,683,,,,677,681',
+'680,684,683,,,,677' ]
+ racc_action_table = arr = ::Array.new(24863, 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 = [
+'420,226,338,414,618,558,558,420,420,420,359,695,349,420,420,632,420',
+'58,19,861,1016,383,888,632,365,420,384,698,647,647,224,365,330,337,337',
+'330,420,420,995,420,420,420,420,420,339,996,750,368,638,637,414,997',
+'1019,367,368,538,226,58,414,19,367,820,788,697,686,686,420,420,420,420',
+'420,420,420,420,420,420,420,420,420,420,1,546,420,420,420,224,420,383',
+'345,346,420,618,384,420,893,821,893,539,420,558,420,750,420,420,558',
+'420,420,420,420,420,419,420,420,420,638,637,359,419,419,419,338,349',
+'647,419,419,338,419,420,997,695,420,420,695,420,695,420,698,861,1016',
+'359,888,420,861,1016,359,888,419,419,61,419,419,419,419,419,638,637',
+'995,638,637,538,699,995,339,996,538,638,637,339,996,997,820,788,697',
+'700,997,7,419,419,419,419,419,419,419,419,419,419,419,419,419,419,546',
+'309,419,419,419,10,419,345,346,821,419,539,573,419,821,12,539,575,419',
+'378,419,329,419,419,329,419,419,419,419,419,609,419,443,419,223,699',
+'13,609,609,609,562,562,609,609,609,61,609,419,700,557,419,419,16,419',
+'557,419,609,609,609,437,437,419,22,607,38,309,609,609,366,609,609,609',
+'609,609,355,366,573,573,355,699,379,575,575,378,378,378,573,443,309',
+'223,619,575,700,606,314,314,609,609,609,609,609,609,609,609,609,609',
+'609,609,609,609,26,38,609,609,609,37,609,609,607,38,609,41,41,609,609',
+'619,609,40,609,380,609,45,609,609,562,609,609,609,609,609,381,609,100',
+'609,379,379,379,111,606,100,100,100,481,437,100,100,100,609,100,342',
+'609,609,609,609,342,609,100,609,100,100,100,609,314,314,26,354,413,653',
+'100,100,653,100,100,100,100,100,805,481,805,805,805,917,805,380,380',
+'380,369,26,917,41,41,206,353,369,381,381,381,917,100,100,100,100,100',
+'100,100,100,100,100,100,100,100,100,473,413,100,100,100,354,100,100',
+'482,413,100,318,354,100,100,225,100,354,100,776,100,354,100,100,227',
+'100,100,100,100,100,374,100,353,100,364,473,228,374,382,353,354,364',
+'232,482,353,385,805,100,353,640,100,100,100,100,3,100,608,100,318,3',
+'39,100,264,608,608,608,318,353,608,608,608,776,608,944,278,944,944,944',
+'776,944,125,608,608,608,608,125,125,776,913,702,15,913,608,608,279,608',
+'608,608,608,608,282,640,382,382,382,549,776,39,640,385,385,385,549,640',
+'293,39,294,640,296,589,297,549,608,608,608,608,608,608,608,608,608,608',
+'608,608,608,608,640,15,608,608,608,702,608,608,24,15,608,298,702,608',
+'608,24,608,702,608,944,608,702,608,608,79,608,608,608,608,608,589,608',
+'608,608,372,371,79,370,589,304,702,372,371,829,370,307,79,608,829,824',
+'608,608,608,608,824,608,97,608,240,240,240,608,240,97,97,97,240,240',
+'97,97,97,240,97,240,240,240,240,240,240,240,97,308,97,97,97,240,240',
+'240,240,240,240,240,97,97,240,97,97,97,97,97,333,240,313,333,240,240',
+'240,240,240,240,240,240,315,240,240,240,319,240,240,240,240,240,97,97',
+'97,97,97,97,97,97,97,97,97,97,97,97,522,522,97,97,97,240,97,97,240,322',
+'97,240,240,97,97,240,97,327,97,289,97,240,97,97,289,97,97,97,97,97,240',
+'97,331,97,332,240,240,240,240,334,240,240,240,240,985,985,343,97,240',
+'240,97,97,97,97,344,97,240,97,240,240,240,97,497,497,497,497,497,497',
+'17,17,46,497,497,793,793,348,497,46,497,497,497,497,497,497,497,350',
+'46,394,400,403,497,497,497,497,497,497,497,566,566,497,405,566,566,566',
+'432,497,497,497,497,497,497,497,497,497,497,497,497,409,497,497,497',
+'411,497,497,497,497,497,432,432,432,432,432,432,432,432,432,432,432',
+'347,432,432,974,412,432,432,347,497,421,974,497,429,439,497,497,347',
+'451,497,974,497,432,452,432,497,432,432,790,432,432,432,432,432,497',
+'432,453,454,790,497,497,497,497,357,497,497,497,497,479,483,357,498',
+'497,497,499,432,502,432,504,357,497,509,497,497,497,922,922,922,922',
+'922,922,790,790,927,922,922,790,512,520,922,927,922,922,922,922,922',
+'922,922,521,927,523,535,540,922,922,922,922,922,922,922,541,560,922',
+'570,578,580,586,408,922,922,922,922,922,922,922,922,922,922,922,922',
+'590,922,922,922,595,922,922,922,922,922,408,408,408,408,408,408,408',
+'408,408,408,408,925,408,408,924,600,408,408,925,922,610,924,922,838',
+'612,922,922,925,617,922,924,922,408,838,408,922,408,408,624,408,408',
+'408,408,408,922,408,626,631,634,922,922,922,922,222,922,922,922,922',
+'636,639,222,642,922,922,643,408,838,838,646,222,922,838,922,922,922',
+'711,711,711,711,711,711,648,651,923,711,711,657,658,660,711,923,711',
+'711,711,711,711,711,711,661,923,662,670,678,711,711,711,711,711,711',
+'711,682,685,711,688,693,696,705,611,711,711,711,711,711,711,711,711',
+'711,711,711,711,710,711,711,711,729,711,711,711,711,711,611,611,611',
+'611,611,611,611,611,611,611,611,998,611,611,508,734,611,611,998,711',
+'752,508,711,998,753,711,711,998,755,711,508,711,611,756,611,711,611',
+'611,757,611,611,611,611,611,711,611,759,760,761,711,711,711,711,320',
+'711,711,711,711,762,766,320,770,711,711,771,611,775,779,782,320,711',
+'783,711,711,711,706,706,706,706,706,706,786,789,305,706,706,804,806',
+'811,706,305,706,706,706,706,706,706,706,814,305,823,827,828,706,706',
+'706,706,706,706,706,831,849,706,849,849,849,832,849,706,706,706,706',
+'706,706,706,706,706,706,706,706,848,706,706,706,852,706,706,706,706',
+'706,645,645,645,645,645,645,645,645,645,645,645,703,645,645,303,854',
+'645,645,703,706,868,303,706,703,869,706,706,703,873,706,303,706,645',
+'874,645,706,645,645,876,645,645,645,645,645,706,645,877,879,882,706',
+'706,706,706,302,706,706,706,706,884,890,302,891,706,706,897,645,901',
+'903,906,302,706,907,706,706,706,769,769,769,769,769,769,908,909,301',
+'769,769,911,926,946,769,301,769,769,769,769,769,769,769,968,301,969',
+'970,975,769,769,769,769,769,769,769,976,967,769,967,967,967,977,967',
+'769,769,769,769,769,769,769,769,769,769,769,769,978,769,769,769,979',
+'769,769,769,769,769,834,834,834,834,834,834,834,834,834,834,834,851',
+'834,834,14,980,834,834,851,769,981,14,769,983,986,769,769,851,987,769',
+'14,769,834,988,834,769,834,834,989,834,834,834,834,834,769,834,990,991',
+'994,769,769,769,769,1007,769,769,769,769,1017,1018,,,769,769,,834,,',
+',,769,,769,769,769,123,123,123,123,123,123,,,,123,123,,,,123,,123,123',
+'123,123,123,123,123,496,496,496,496,496,123,123,123,123,123,123,123',
+',,123,6,6,6,6,6,123,123,123,123,123,123,123,123,123,123,123,123,,123',
+'123,123,,123,123,123,123,123,427,427,427,427,427,427,427,427,427,427',
+'427,641,427,427,,,427,427,641,123,,,123,641,,123,123,641,,123,,123,427',
+',427,123,427,427,,427,427,427,427,427,123,427,,,,123,123,123,123,,123',
+'123,123,123,,,,,123,123,,427,,,,,123,,123,123,123,0,0,0,0,0,0,,,,0,0',
+',,,0,,0,0,0,0,0,0,0,292,292,292,292,292,0,0,0,0,0,0,0,,,0,,,,,,0,0,0',
+'0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,731,731,731,731,731,731,731,731',
+'731,731,731,,731,731,,,731,731,,0,,,0,,,0,0,,,0,,0,731,,731,0,731,731',
+',731,731,731,731,731,0,731,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,731,,,,,0,,0',
+'0,0,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,736,736',
+'736,736,736,736,736,736,736,736,736,,736,736,,,736,736,,721,,,721,,',
+'721,721,,,721,,721,736,,736,721,736,736,,736,736,736,736,736,721,736',
+',,,721,721,721,721,,721,721,721,721,,,,,721,721,,736,,,,,721,,721,721',
+'721,955,955,955,955,955,955,,,,955,955,,,,955,,955,955,955,955,955,955',
+'955,,,,,,955,955,955,955,955,955,955,,,955,,,,,,955,955,955,955,955',
+'955,955,955,955,955,955,955,,955,955,955,,955,955,955,955,955,738,738',
+'738,738,738,738,738,738,738,738,738,,738,738,,,738,738,,955,,,955,,',
+'955,955,,,955,,955,738,,738,955,738,738,,738,738,738,738,738,955,738',
+',,,955,955,955,955,,955,955,955,955,,,,,955,955,,738,,,,,955,,955,955',
+'955,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,741,741',
+'741,741,741,741,741,741,741,741,741,,741,741,,,741,741,,534,,,534,,',
+'534,534,,,534,,534,741,,741,534,741,741,,741,741,741,741,741,534,741',
+',,,534,534,534,534,,534,534,534,534,,,,,534,534,,741,,,,,534,,534,534',
+'534,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,743,743',
+'743,743,743,743,743,743,743,743,743,,743,743,,,743,743,,300,,,300,,',
+'300,300,,,300,,300,743,,743,300,743,743,,743,743,743,743,743,300,743',
+',,,300,300,300,300,,300,300,300,300,,,,,300,300,,743,,,,,300,,300,300',
+'300,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,745,745',
+'745,745,745,745,745,745,745,745,745,,745,745,,,745,745,,325,,,325,,',
+'325,325,,,325,,325,745,,745,325,745,745,,745,745,745,745,745,325,745',
+',,,325,325,325,325,,325,325,325,325,,,,,325,325,,745,,,,,325,,325,325',
+'325,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,472,472',
+'472,472,472,472,472,472,472,472,472,,472,472,,,472,472,,858,,,858,,',
+'858,858,,,858,,858,472,,472,858,472,472,,472,472,472,472,472,858,472',
+',,,858,858,858,858,,858,858,858,858,,,,,858,858,472,472,,,,,858,,858',
+'858,858,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,518',
+'518,518,518,518,518,518,518,518,518,518,,518,518,,,518,518,,616,,,616',
+',,616,616,,,616,,616,518,,518,616,518,518,,518,518,518,518,518,616,518',
+',,,616,616,616,616,,616,616,616,616,,,,,616,616,,518,,,,,616,,616,616',
+'616,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,21,21',
+'21,21,21,21,21,21,21,21,21,,21,21,,,21,21,,208,,,208,,,208,208,,,208',
+',208,21,,21,208,21,21,,21,21,21,21,21,208,21,,,,208,208,208,208,,208',
+'208,208,208,,,,,208,208,,21,,,,,208,,208,208,208,231,231,231,231,231',
+'231,,,,231,231,,,,231,,231,231,231,231,231,231,231,,,,,,231,231,231',
+'231,231,231,231,,,231,,,,,,231,231,231,231,231,231,231,231,231,231,231',
+'231,,231,231,231,,231,231,231,231,231,276,276,276,276,276,276,276,276',
+'276,276,276,,276,276,,,276,276,,231,,,231,,,231,231,,,231,,231,276,',
+'276,231,276,276,,276,276,276,276,276,231,276,,,,231,231,231,231,,231',
+'231,231,231,,,,,231,231,,276,,,,,231,,231,231,231,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,837,837,837,837,837,837,837,837',
+'837,837,837,,837,837,,,837,837,,781,,,781,,,781,781,,,781,,781,837,',
+'837,781,837,837,,837,837,837,837,837,781,837,,,,781,781,781,781,,781',
+'781,781,781,,,,,781,781,,837,,,,,781,,781,781,781,33,33,33,33,33,33',
+',,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,802',
+'33,802,802,802,,802,33,33,33,33,33,33,33,33,33,33,33,33,,33,33,33,,33',
+'33,33,33,33,883,,883,883,883,,883,,802,,,449,,,,,,802,,33,,,33,,,33',
+'33,,,33,,33,,,,33,,883,,,,,,449,33,,883,449,449,33,33,33,33,,33,33,33',
+'33,,,,,33,33,,671,,671,671,671,33,671,33,33,33,953,953,953,953,953,953',
+',,,953,953,,,,953,,953,953,953,953,953,953,953,,,,,671,953,953,953,953',
+'953,953,953,468,671,953,,,,450,,953,953,953,953,953,953,953,953,953',
+'953,953,953,,953,953,953,,953,953,953,953,953,462,,468,,,,468,468,450',
+'468,468,,450,450,,,462,462,,953,,,953,,,953,953,,469,953,,953,462,,462',
+'953,462,462,,462,462,,,462,953,462,,,,953,953,953,953,,953,953,953,953',
+',,469,,953,953,469,469,,469,469,,953,,953,953,953,815,815,815,815,815',
+'815,,,,815,815,,,,815,,815,815,815,815,815,815,815,,,,,,815,815,815',
+'815,815,815,815,,984,815,984,984,984,,984,815,815,815,815,815,815,815',
+'815,815,815,815,815,,815,815,815,,815,815,815,815,815,461,982,,982,982',
+'982,,982,984,1006,,1006,1006,1006,,1006,461,461,,815,,,815,,,815,815',
+',,815,,815,461,,461,815,461,461,982,461,461,,,461,815,461,1006,,,815',
+'815,815,815,,815,815,815,815,,,,,815,815,,885,,885,885,885,815,885,815',
+'815,815,816,816,816,816,816,816,,,,816,816,,,,816,,816,816,816,816,816',
+'816,816,,,,,885,816,816,816,816,816,816,816,,945,816,945,945,945,,945',
+'816,816,816,816,816,816,816,816,816,816,816,816,,816,816,816,,816,816',
+'816,816,816,470,470,470,470,470,470,470,,945,470,470,,,,,,470,470,,816',
+',,816,,,816,816,,,816,,816,470,,470,816,470,470,,470,470,470,470,470',
+'816,470,,,,816,816,816,816,,816,816,816,816,,,,,816,816,,,,,,,816,,816',
+'816,816,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,471',
+'471,471,471,471,471,471,471,,471,471,,,,,,471,471,,621,,,621,,,621,621',
+',,621,,621,471,,471,621,471,471,,471,471,471,471,471,621,471,,,,621',
+'621,621,621,,621,621,621,621,,,,,621,621,,,,,,,621,,621,621,621,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,467,467,467,467',
+'467,467,467,,,467,467,,,,,,467,467,,537,,,537,,,537,537,,,537,,537,467',
+',467,537,467,467,,467,467,467,467,467,537,467,,,,537,537,537,537,,537',
+'537,537,537,,,,,537,537,,,,,,,537,,537,537,537,819,819,819,819,819,819',
+',,,819,819,,,,819,,819,819,819,819,819,819,819,,,,,,819,819,819,819',
+'819,819,819,,,819,,,,,,819,819,819,819,819,819,819,819,819,819,819,819',
+',819,819,819,,819,819,819,819,819,448,448,448,448,448,448,448,448,448',
+'448,448,,448,448,,,448,448,,819,,,819,,,819,819,,,819,,819,448,,448',
+'819,448,448,,448,448,448,448,448,819,448,,,,819,819,819,819,,819,819',
+'819,819,,,,,819,819,,,,,,,819,,819,819,819,947,947,947,947,947,947,',
+',,947,947,,,,947,,947,947,947,947,947,947,947,,,,,,947,947,947,947,947',
+'947,947,,,947,,,,,,947,947,947,947,947,947,947,947,947,947,947,947,',
+'947,947,947,,947,947,947,947,947,447,447,447,447,447,447,447,447,447',
+'447,447,,447,447,,,447,447,,947,,,947,,,947,947,,,947,,947,447,,447',
+'947,447,447,,447,447,447,447,447,947,447,,,,947,947,947,947,,947,947',
+'947,947,,,,,947,947,,,,,,,947,,947,947,947,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,458,458,458,458,458,458,458,,,458,458',
+',,,,,458,458,,622,,,622,,,622,622,,,622,,622,458,,458,622,458,458,,458',
+'458,458,458,458,622,458,,,,622,622,622,622,,622,622,622,622,,,,,622',
+'622,,,,,,,622,,622,622,622,930,930,930,930,930,930,,,,930,930,,,,930',
+',930,930,930,930,930,930,930,,,,,,930,930,930,930,930,930,930,,,930',
+',,,,,930,930,930,930,930,930,930,930,930,930,930,930,,930,930,930,,930',
+'930,930,930,930,466,466,466,466,466,466,466,,,466,466,,,,,,466,466,',
+'930,,,930,,,930,930,,,930,,930,466,,466,930,466,466,,466,466,466,466',
+'466,930,466,,,,930,930,930,930,,930,930,930,930,,,,,930,930,,,,,,,930',
+',930,930,930,929,929,929,929,929,929,,,,929,929,,,,929,,929,929,929',
+'929,929,929,929,,,,,,929,929,929,929,929,929,929,,,929,,,,,,929,929',
+'929,929,929,929,929,929,929,929,929,929,,929,929,929,,929,929,929,929',
+'929,459,,,,,,,,,,,,,,,,459,459,,929,,,929,,,929,929,,,929,,929,459,',
+'459,929,459,459,,459,459,,,459,929,459,,,,929,929,929,929,,929,929,929',
+'929,,,,,929,929,,,,,,,929,,929,929,929,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,460,,,,,,,,,,,,,,,,460,460,,825,,,825,',
+',825,825,,,825,,825,460,,460,825,460,460,,460,460,,,460,825,460,,,,825',
+'825,825,825,,825,825,825,825,,,,,825,825,,,,,,,825,,825,825,825,295',
+'295,295,295,295,295,,,,295,295,,,,295,,295,295,295,295,295,295,295,',
+',,,,295,295,295,295,295,295,295,,,295,,,,,,295,295,295,295,295,295,295',
+'295,295,295,295,295,,295,295,295,,295,295,295,295,295,465,465,465,465',
+'465,465,465,,,465,465,,,,,,465,465,,295,,,295,,,295,295,,,295,,295,465',
+',465,295,465,465,,465,465,465,465,465,295,465,,,,295,295,295,295,,295',
+'295,295,295,,,,,295,295,,,,,,,295,,295,295,295,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,464,464,464,464,464,464,464,,,464',
+'464,,,,,,464,464,,559,,,559,,,559,559,,,559,,559,464,,464,559,464,464',
+',464,464,464,464,464,559,464,,,,559,559,559,559,,559,559,559,559,,,',
+',559,559,,,,800,800,800,559,800,559,559,559,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',
+'463,463,463,463,463,463,463,,,463,463,,,,,,463,463,,800,,,800,,,800',
+'800,,,800,,,463,,463,800,463,463,,463,463,463,463,463,800,463,,,,800',
+'800,800,800,,800,800,800,800,,,,,800,800,,,,239,239,239,800,239,800',
+'800,800,239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239,239,239',
+'239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239,239,,239',
+'239,239,,239,239,239,239,239,455,,,,,,,,,,,,,,,,455,455,,239,,,239,',
+',239,239,,,239,,,455,,455,239,455,455,,455,455,,,,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,456,,,,,,,,,,,,,,,,456,456,,238,,,238,,,238,238',
+',,238,,,456,,456,238,456,456,,456,456,,,,238,,,,,238,238,238,238,,238',
+'238,238,238,,,,,238,238,,,,,,,238,,238,238,238,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,457,,,,,,,,,,,,,,,,457,457,,291,,,291,',
+',291,291,,,291,,291,457,,,291,457,457,,457,457,,,,291,,,,,291,291,291',
+'291,,291,291,291,291,,,,,291,291,,,,237,237,237,291,237,291,291,291',
+'237,237,,,,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237',
+'237,237,,,237,,,,,,,237,,,237,237,237,237,237,237,237,237,,237,237,237',
+',237,237,237,237,237,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,237,,,237,,',
+',,,237,,,,,,,,,237,,,,,237,237,237,237,,237,237,237,237,,,,,237,237',
+',,,813,813,813,237,813,237,237,237,813,813,,,,813,,813,813,813,813,813',
+'813,813,,,,,,813,813,813,813,813,813,813,,,813,,,,,,,813,,,813,813,813',
+'813,813,813,813,813,,813,813,813,,813,813,813,813,813,,,,,,,,,,,,,,',
+',,,,,813,,,813,,,813,813,,,813,,,,,,813,,,,,,,,,813,,,,,813,813,813',
+'813,,813,813,813,813,,,,,813,813,,,,818,818,818,813,818,813,813,813',
+'818,818,,,,818,,818,818,818,818,818,818,818,,,,,,818,818,818,818,818',
+'818,818,,,818,,,,,,,818,,,818,818,818,818,818,818,818,818,,818,818,818',
+',818,818,818,818,818,,,,,,,,,,,,,,,,,,,,818,,,818,,,818,818,,,818,,818',
+',,,818,,,,,,,,,818,,,,,818,818,818,818,,818,818,818,818,,,,,818,818',
+',,,649,649,649,818,649,818,818,818,649,649,,,,649,,649,649,649,649,649',
+'649,649,,,,,,649,649,649,649,649,649,649,,,649,,,,,,,649,,,649,649,649',
+'649,649,649,649,649,,649,649,649,,649,649,649,649,649,,,,,,,,,,,,,,',
+',,,,,649,,,649,,,649,649,,,649,,649,,,,649,,,,,,,,,649,,,,,649,649,649',
+'649,,649,649,649,649,,,,,649,649,,,,29,29,29,649,29,649,649,649,29,29',
+',,,29,,29,29,29,29,29,29,29,,,,,,29,29,29,29,29,29,29,,,29,,,,,,,29',
+',,29,29,29,29,29,29,29,29,29,29,29,29,,29,29,29,29,29,,,,,,,,,,,,,,',
+',,,,,29,,,29,,,29,29,,,29,,29,,29,,29,,,29,,,,,,29,,,,,29,29,29,29,',
+'29,29,29,29,,,,,29,29,,,,236,236,236,29,236,29,29,29,236,236,,,,236',
+',236,236,236,236,236,236,236,,,,,,236,236,236,236,236,236,236,,,236',
+',,,,,,236,,,236,236,236,236,236,236,236,236,,236,236,236,,236,236,236',
+'236,236,,,,,,,,,,,,,,,,,,,,236,,,236,,,236,236,,,236,,,,,,236,,,,,,',
+',,236,,,,,236,236,236,236,,236,236,236,236,,,,,236,236,,,,30,30,30,236',
+'30,236,236,236,30,30,,,,30,,30,30,30,30,30,30,30,,,,,,30,30,30,30,30',
+'30,30,,,30,,,,,,,30,,,30,30,30,30,30,30,30,30,30,30,30,30,,30,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,,,,835,835,835,31,835,31,31,31,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',
+',,,836,836,836,835,836,835,835,835,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,,,,235,235,235,836,235,836,836,836',
+'235,235,,,,235,,235,235,235,235,235,235,235,,,,,,235,235,235,235,235',
+'235,235,,,235,,,,,,,235,,,235,235,235,235,235,235,235,235,,235,235,235',
+',235,235,235,235,235,,,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,,',
+',,,235,,,,,,,,,235,,,,,235,235,235,235,,235,235,235,235,,,,,235,235',
+',,,644,644,644,235,644,235,235,235,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,,,,234,234,234,644,234,644,644,644,234,234,,,,234,,234',
+'234,234,234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,',
+',234,,,234,234,234,234,234,234,234,234,,234,234,234,,234,234,234,234',
+'234,,,,,,,,,,,,,,,,,,,,234,,,234,,,234,234,,,234,,,,,,234,,,,,,,,,234',
+',,,,234,234,234,234,,234,234,234,234,,,,,234,234,,,,233,233,233,234',
+'233,234,234,234,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233',
+'233,233,233,233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233',
+'233,,233,233,233,,233,233,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,',
+',233,233,,,233,,,,,,233,,,,,,,,,233,,,,,233,233,233,233,,233,233,233',
+'233,,,,,233,233,,,,299,299,299,233,299,233,233,233,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,,,845,,845,845,845,845,845',
+',,,,,,,,845,,299,299,299,299,,299,299,299,299,,,,,299,299,,,,299,,845',
+'299,,299,299,299,20,20,20,,20,845,845,,20,20,845,,,20,,20,20,20,20,20',
+'20,20,,,,,,20,20,20,20,20,20,20,,,20,,,,,,,20,,,20,20,20,20,20,20,20',
+'20,,20,20,20,,20,20,20,20,20,,,,,,,,,,,,,,,,,,,,20,,,20,,,20,20,,,20',
+',,,,,20,,,,,,,,,20,,,,,20,20,20,20,,20,20,20,20,,,,,20,20,,,,850,850',
+'850,20,850,20,20,20,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,850,850,,,,,850',
+'850,,,,862,862,862,850,862,850,850,850,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,,,,230,230,230,862,230,862,862,862,230,230,',
+',,230,,230,230,230,230,230,230,230,,,,,,230,230,230,230,230,230,230',
+',,230,,,,,,,230,,,230,230,230,230,230,230,230,230,,230,230,230,,230',
+'230,230,230,230,,,,,,,,,,,,,,,,,,,,230,,,230,,,230,230,,,230,,,,,,230',
+',,,,,,,,230,,,,,230,230,230,230,,230,230,230,230,,,,,230,230,,,,633',
+'633,633,230,633,230,230,230,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,,,,34,34,34,633,34,633,633,633,34,34,,,,34,,34,34,34',
+'34,34,34,34,,,,,,34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34',
+'34,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,,,959,,959,959,959,959,959',
+',,,,,,,,959,,35,35,35,35,,35,35,35,35,,,,,35,35,,,,35,,959,35,,35,35',
+'35,5,5,5,5,5,959,959,,5,5,959,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5,5',
+',,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,,,,,,,,,,,',
+',,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,,5,5,5,5,,,,,5,5,,,',
+'627,627,627,5,627,5,5,5,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,,,,442,442,442,627,442,627,627,627,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,,,,,,,446,,446,446,446,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,,,,,113,113,,,,,,113,113,,113,113,113,252,252,252,,252,,,,252',
+'252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252,252,252',
+'252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,252,252,',
+'252,252,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,,',
+',,252,,,,,,,,,252,,,,,252,252,252,252,,252,252,252,252,,,,,252,252,',
+',,730,730,730,252,730,252,252,252,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,730,,,,732,732,732,730,732,730,730,730',
+'732,732,,,,732,,732,732,732,732,732,732,732,,,,,,732,732,732,732,732',
+'732,732,,,732,,,,,,,732,,,732,732,732,732,732,732,732,732,,732,732,732',
+',732,732,732,732,732,,,,,,,,,,,,,,,,,,,,732,,,732,,,732,732,,,732,,',
+',,,732,,,,,,,,,732,,,,,732,732,732,732,,732,732,732,732,,,,,732,732',
+',,,253,253,253,732,253,732,732,732,253,253,,,,253,,253,253,253,253,253',
+'253,253,,,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253,253,253',
+'253,253,253,253,253,,253,253,253,,253,253,253,253,253,,,,,,,,,,,,,,',
+',,,,,253,,,253,,,253,253,,,253,,,,,,253,,,,,,,,,253,,,,,253,253,253',
+'253,,253,253,253,253,,,,,253,253,,,,249,249,249,253,249,253,253,253',
+'249,249,,,,249,,249,249,249,249,249,249,249,,,,,,249,249,249,249,249',
+'249,249,,,249,,,,,,,249,,,249,249,249,249,249,249,249,249,,249,249,249',
+',249,249,249,249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,,249,,',
+',,,249,,,,,,,,,249,,,,,249,249,249,249,,249,249,249,249,,,,,249,249',
+',,,746,746,746,249,746,249,249,249,746,746,,,,746,,746,746,746,746,746',
+'746,746,,,,,,746,746,746,746,746,746,746,,,746,,,,,,,746,,,746,746,746',
+'746,746,746,746,746,,746,746,746,,746,746,746,746,746,,,,,,,,,,,,,,',
+',,,,,746,,,746,,,746,746,,,746,,,,,,746,,,,,,,,,746,,,,,746,746,746',
+'746,,746,746,746,746,,,,,746,746,,,,747,747,747,746,747,746,746,746',
+'747,747,,,,747,,747,747,747,747,747,747,747,,,,,,747,747,747,747,747',
+'747,747,,,747,,,,,,,747,,,747,747,747,747,747,747,747,747,,747,747,747',
+',747,747,747,747,747,,,,,,,,,,,,,,,,,,,,747,,,747,,,747,747,,,747,,',
+',,,747,,,,,,,,,747,,,,,747,747,747,747,,747,747,747,747,,,,,747,747',
+',,,748,748,748,747,748,747,747,747,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,,,,749,749,749,748,749,748,748,748',
+'749,749,,,,749,,749,749,749,749,749,749,749,,,,,,749,749,749,749,749',
+'749,749,,,749,,,,,,,749,,,749,749,749,749,749,749,749,749,,749,749,749',
+',749,749,749,749,749,,,,,,,,,,,,,,,,,,,,749,,,749,,,749,749,,,749,,',
+',,,749,,,,,,,,,749,,,,,749,749,749,749,,749,749,749,749,,,,,749,749',
+',,,248,248,248,749,248,749,749,749,248,248,,,,248,,248,248,248,248,248',
+'248,248,,,,,,248,248,248,248,248,248,248,,,248,,,,,,,248,,,248,248,248',
+'248,248,248,248,248,,248,248,248,,248,248,248,248,248,,,,,,,,,,,,,,',
+',,,,,248,,,248,,,248,248,,,248,,,,,,248,,,,,,,,,248,,,,,248,248,248',
+'248,,248,248,248,248,,,,,248,248,,,,751,751,751,248,751,248,248,248',
+'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',
+',,,254,254,254,751,254,751,751,751,254,254,,,,254,,254,254,254,254,254',
+'254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,,,254,,,254,254,254',
+'254,254,254,254,254,,254,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,,,,247,247,247,258,247,258,258,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,247,247',
+',247,247,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247,,,247,247,,,247,,',
+',,,247,,,,,,,,,247,,,,,247,247,247,247,,247,247,247,247,,,,,247,247',
+',,,246,246,246,247,246,247,247,247,246,246,,,,246,,246,246,246,246,246',
+'246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246,246,246',
+'246,246,246,246,246,,246,246,246,,246,246,246,246,246,,,,,,,,,,,,,,',
+',,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,,246,,,,,246,246,246',
+'246,,246,246,246,246,,,,,246,246,,,,265,265,265,246,265,246,246,246',
+'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,,,,763,763,763',
+'266,763,266,266,266,763,763,,,,763,,763,763,763,763,763,763,763,,,,',
+',763,763,763,763,763,763,763,,,763,,,,,,,763,,,763,763,763,763,763,763',
+'763,763,,763,763,763,,763,763,,,763,,,,,,,,,,,,,,,,,,,,763,,,763,,,763',
+'763,,,763,,,,,,,,,,,,,,,,,,,,763,763,763,763,,763,763,763,763,,,,,763',
+'763,,,,274,274,274,763,274,763,763,763,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,,,245,245,245,274',
+'245,274,274,274,245,245,,,,245,,245,245,245,245,245,245,245,,,,,,245',
+'245,245,245,245,245,245,,,245,,,,,,,245,,,245,245,245,245,245,245,245',
+'245,,245,245,245,,245,245,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,',
+',245,245,,,245,,,,,,245,,,,,,,,,245,,,,,245,245,245,245,,245,245,245',
+'245,,,,,245,245,,,,244,244,244,245,244,245,245,245,244,244,,,,244,,244',
+'244,244,244,244,244,244,,,,,,244,244,244,244,244,244,244,,,244,,,,,',
+',244,,,244,244,244,244,244,244,244,244,,244,244,244,,244,244,244,244',
+'244,,,,,,,,,,,,,,,,,,,,244,,,244,,,244,244,,,244,,,,,,244,,,,,,,,,244',
+',,,,244,244,244,244,,244,244,244,244,,,,,244,244,,,,281,281,281,244',
+'281,244,244,244,281,281,,,,281,,281,281,281,281,281,281,281,,,,,,281',
+'281,281,281,281,281,281,,,281,,,,,,,281,,,281,281,281,281,281,281,281',
+'281,,281,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,,,,285,285,285,283',
+'285,283,283,283,285,285,,,,285,,285,285,285,285,285,285,285,,,,,,285',
+'285,285,285,285,285,285,,,285,,,,,,,285,,,285,285,285,285,285,285,285',
+'285,,285,285,285,,285,285,285,285,285,,,,,,,,,,,,,,,,,,,,285,,,285,',
+',285,285,,,285,,,,,,285,,,,,,,,,285,,,,,285,285,285,285,,285,285,285',
+'285,,,,,285,285,,,,286,286,286,285,286,285,285,285,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,,,,674,674,674,286',
+'674,286,286,286,674,674,,,,674,,674,674,674,674,674,674,674,,,,,,674',
+'674,674,674,674,674,674,,,674,,,,,,,674,,,674,674,674,674,674,674,674',
+'674,,674,674,674,,674,674,674,674,674,,,,,,,,,,,,,,,,,,,,674,,,674,',
+',674,674,,,674,,,,,,674,,,,,,,,,674,,,,,674,674,674,674,,674,674,674',
+'674,,,,,674,674,,,,243,243,243,674,243,674,674,674,243,243,,,,243,,243',
+'243,243,243,243,243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,',
+',243,,,243,243,243,243,243,243,243,243,,243,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,,,,241,241,241,242,241,242,242,242,241,241,,,,241,,241',
+'241,241,241,241,241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,',
+',241,,,241,241,241,241,241,241,241,241,,241,241,241,,241,241,241,241',
+'241,,,,,,,,,,,,,,,,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,,241',
+',,,,241,241,241,241,,241,241,241,241,,,,,241,241,,,,326,326,326,241',
+'326,241,241,241,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,326,326,,326,326,326',
+'326,,,,,326,326,,,,603,603,603,326,603,326,326,326,603,603,,,,603,,603',
+'603,603,603,603,603,603,,,,,,603,603,603,603,603,603,603,,,603,,,,,',
+',603,,,603,603,603,603,603,603,603,603,,603,603,603,,603,603,603,603',
+'603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603,603,,,603,,,,,,603,,,,,,,,,603',
+',,,,603,603,603,603,,603,603,603,603,,,,,603,603,,,,602,602,602,603',
+'602,603,603,603,602,602,,,,602,,602,602,602,602,602,602,602,,,,,,602',
+'602,602,602,602,602,602,,,602,,,,,,,602,,,602,602,602,602,602,602,602',
+'602,,602,602,602,,602,602,602,602,602,,,,,,,,,,,,,,,,,,,,602,,,602,',
+',602,602,,,602,,,,,,602,,,,,,,,,602,,,,,602,602,602,602,,602,602,602',
+'602,,,,,602,602,,,,599,599,599,602,599,602,602,602,599,599,,,,599,,599',
+'599,599,599,599,599,599,,,,,,599,599,599,599,599,599,599,,,599,,,,,',
+',599,,,599,599,599,599,599,599,599,599,,599,599,599,,599,599,599,599',
+'599,,,,,,,,,,,,,,,,,,,,599,,,599,,,599,599,,,599,,,,,,599,,,,,,,,,599',
+',,,,599,599,599,599,,599,599,599,599,,,,,599,599,,,,598,598,598,599',
+'598,599,599,599,598,598,,,,598,,598,598,598,598,598,598,598,,,,,,598',
+'598,598,598,598,598,598,,,598,,,,,,,598,,,598,598,598,598,598,598,598',
+'598,,598,598,598,,598,598,598,598,598,,,,,,,,,,,,,,,,,,,,598,,,598,',
+',598,598,,,598,,,,,,598,,,,,,,,,598,,,,,598,598,598,598,,598,598,598',
+'598,,,,,598,598,,,,219,219,219,598,219,598,598,598,219,219,,,,219,,219',
+'219,219,219,219,219,219,,,,,,219,219,219,219,219,219,219,,,219,,,,,',
+',219,,,219,219,219,219,219,219,219,219,,219,219,219,,219,219,219,219',
+'219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219,,,,,,219,,,,,,,,,219',
+',,,,219,219,219,219,,219,219,219,219,,,,,219,219,219,,,594,594,594,219',
+'594,219,219,219,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,594,,,,593,593,593,594,593,594,594,594,593,593,,,,593,,593',
+'593,593,593,593,593,593,,,,,,593,593,593,593,593,593,593,,,593,,,,,',
+',593,,,593,593,593,593,593,593,593,593,,593,593,593,,593,593,593,593',
+'593,,,,,,,,,,,,,,,,,,,,593,,,593,,,593,593,,,593,,,,,,593,,,,,,,,,593',
+',,,,593,593,593,593,,593,593,593,593,,,,,593,593,,,,592,592,592,593',
+'592,593,593,593,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,,,,591,591,591,592,591,592,592,592,591,591,',
+',,591,,591,591,591,591,591,591,591,,,,,,591,591,591,591,591,591,591',
+',,591,,,,,,,591,,,591,591,591,591,591,591,591,591,591,591,591,591,,591',
+'591,591,591,591,,,,,,,,,,,,,,,,,,,,591,,,591,,,591,591,,,591,,591,,591',
+',591,,,591,,,,,,591,,,,,591,591,591,591,,591,591,591,591,,,,,591,591',
+',,,218,218,218,591,218,591,591,591,218,218,,,,218,,218,218,218,218,218',
+'218,218,,,,,,218,218,218,218,218,218,218,,,218,,,,,,,218,,,218,218,218',
+'218,218,218,218,218,,218,218,218,,218,218,218,218,218,,,,,,,,,,,,,,',
+',,,,,218,,,218,,,218,218,,,218,,,,,,218,,,,,,,,,218,,,,,218,218,218',
+'218,,218,218,218,218,,,,,218,218,,,,588,588,588,218,588,218,218,218',
+'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',
+',,,587,587,587,588,587,588,588,588,587,587,,,,587,,587,587,587,587,587',
+'587,587,,,,,,587,587,587,587,587,587,587,,,587,,,,,,,587,,,587,587,587',
+'587,587,587,587,587,,587,587,587,,587,587,587,587,587,,,,,,,,,,,,,,',
+',,,,,587,,,587,,,587,587,,,587,,587,,,,587,,,,,,,,,587,,,,,587,587,587',
+'587,,587,587,587,587,,,,,587,587,,,,217,217,217,587,217,587,587,587',
+'217,217,,,,217,,217,217,217,217,217,217,217,,,,,,217,217,217,217,217',
+'217,217,,,217,,,,,,,217,,,217,217,217,217,217,217,217,217,,217,217,217',
+',217,217,217,217,217,,,,,,,,,,,,,,,,,,,,217,,,217,,,217,217,,,217,,',
+',,,217,,,,,,,,,217,,,,,217,217,217,217,,217,217,217,217,,,,,217,217',
+',,,216,216,216,217,216,217,217,217,216,216,,,,216,,216,216,216,216,216',
+'216,216,,,,,,216,216,216,216,216,216,216,,,216,,,,,,,216,,,216,216,216',
+'216,216,216,216,216,,216,216,216,,216,216,216,216,216,,,,,,,,,,,,,,',
+',,,,,216,,,216,,,216,216,,,216,,,,,,216,,,,,,,,,216,,,,,216,216,216',
+'216,,216,216,216,216,,,,,216,216,,,,215,215,215,216,215,216,216,216',
+'215,215,,,,215,,215,215,215,215,215,215,215,,,,,,215,215,215,215,215',
+'215,215,,,215,,,,,,,215,,,215,215,215,215,215,215,215,215,,215,215,215',
+',215,215,215,215,215,,,,,,,,,,,,,,,,,,,,215,,,215,,,215,215,,,215,,215',
+',,,215,,,,,,,,,215,,,,,215,215,215,215,,215,215,215,215,,,,,215,215',
+',,,42,42,42,215,42,215,215,215,42,42,,,,42,,42,42,42,42,42,42,42,,,',
+',,42,42,42,42,42,42,42,,,42,,,,,,,42,,,42,42,42,42,42,42,42,42,,42,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,,,,971,971,971,43,971,43,43,43,971,971,,,',
+'971,,971,971,971,971,971,971,971,,,,,,971,971,971,971,971,971,971,,',
+'971,,,,,,,971,,,971,971,971,971,971,971,971,971,971,971,971,971,,971',
+'971,971,971,971,,,,,,,,,,,,,,,,,,,,971,,,971,,,971,971,,,971,,971,,971',
+',971,,,971,,,,,,971,,,,,971,971,971,971,,971,971,971,971,,,,,971,971',
+',,,214,214,214,971,214,971,971,971,214,214,,,,214,,214,214,214,214,214',
+'214,214,,,,,,214,214,214,214,214,214,214,,,214,,,,,,,214,,,214,214,214',
+'214,214,214,214,214,,214,214,214,,214,214,214,214,214,,,,,,,,,,,,,,',
+',,,,,214,,,214,,,214,214,,,214,,,,,,214,,,,,,,,,214,,,,,214,214,214',
+'214,,214,214,214,214,,,,,214,214,,,,44,44,44,214,44,214,214,214,44,44',
+',,,44,,44,44,44,44,44,44,44,,,,,,44,44,44,44,44,44,44,,,44,,,,,,,44',
+',,44,44,44,44,44,44,44,44,,44,44,44,,44,44,44,44,44,,,,,,,,,,,,,,,,',
+',,,44,,,44,,,44,44,,,44,,,,,,44,,,,,,,,,44,,,,,44,44,44,44,,44,44,44',
+'44,,,,,44,44,,,,340,340,340,44,340,44,44,44,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,,,,553,553,553,341,553,341,341,341,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,,,553,553,,,553,,553,,553,,553,,,553,,',
+',,,553,,,,,553,553,553,553,,553,553,553,553,,,,,553,553,,,,543,543,543',
+'553,543,553,553,553,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,,,,542,542,542,543,542,543,543,543',
+'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',
+',,,211,211,211,542,211,542,542,542,211,211,,,,211,,211,211,211,211,211',
+'211,211,,,,,,211,211,211,211,211,211,211,,,211,,,,,,,211,,,211,211,211',
+'211,211,211,211,211,211,211,211,211,,211,211,211,211,211,,,,,,,,,,,',
+',,,,,,,,211,,,211,,,211,211,,,211,,211,,211,,211,,,211,,,,,,211,,,,',
+'211,211,211,211,,211,211,211,211,,,,,211,211,,,,210,210,210,211,210',
+'211,211,211,210,210,,,,210,,210,210,210,210,210,210,210,,,,,,210,210',
+'210,210,210,210,210,,,210,,,,,,,210,,,210,210,210,210,210,210,210,210',
+',210,210,210,,210,210,210,210,210,,,,,,,,,,,,,,,,,,,,210,,,210,,,210',
+'210,,,210,,,,,,210,,,,,,,,,210,,,,,210,210,210,210,,210,210,210,210',
+',,,,210,210,,,,528,528,528,210,528,210,210,210,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,,,,525,525,525,528',
+'525,528,528,528,525,525,,,,525,,525,525,525,525,525,525,525,,,,,,525',
+'525,525,525,525,525,525,,,525,,,,,,,525,,,525,525,525,525,525,525,525',
+'525,525,525,525,525,,525,525,525,525,525,,,,,,,,,,,,,,,,,,,,525,,,525',
+',,525,525,,,525,,525,,,,525,,,525,,,,,,525,,,,,525,525,525,525,,525',
+'525,525,525,,,,,525,525,,,,209,209,209,525,209,525,525,525,209,209,',
+',,209,,209,209,209,209,209,209,209,,,,,,209,209,209,209,209,209,209',
+',,209,,,,,,,209,,,209,209,209,209,209,209,209,209,,209,209,209,,209',
+'209,209,209,209,,,,,,,,,,,,,,,,,,,,209,,,209,,,209,209,,,209,,209,,',
+',209,,,,,,,,,209,,,,,209,209,209,209,,209,209,209,209,,,,,209,209,,',
+',360,360,360,209,360,209,209,209,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,,,,519,519,519,360,519,360,360,360',
+'519,519,,,,519,,519,519,519,519,519,519,519,,,,,,519,519,519,519,519',
+'519,519,,,519,,,,,,,519,,,519,519,519,519,519,519,519,519,,519,519,519',
+',519,519,519,519,519,,,,,,,,,,,,,,,,,,,,519,,,519,,,519,519,,,519,,',
+',,,519,,,,,,,,,519,,,,,519,519,519,519,,519,519,519,519,,,,,519,519',
+',,,515,515,515,519,515,519,519,519,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,,,,,,,,,,,,,,',
+',,,,,515,,,515,,,515,515,,,515,,,,,,515,,,,,,,,,515,,,,,515,515,515',
+'515,,515,515,515,515,,,,,515,515,,,,514,514,514,515,514,515,515,515',
+'514,514,,,,514,,514,514,514,514,514,514,514,,,,,,514,514,514,514,514',
+'514,514,,,514,,,,,,,514,,,514,514,514,514,514,514,514,514,,514,514,514',
+',514,514,514,514,514,,,,,,,,,,,,,,,,,,,,514,,,514,,,514,514,,,514,,',
+',,,514,,,,,,,,,514,,,,,514,514,514,514,,514,514,514,514,,,,,514,514',
+',,,511,511,511,514,511,514,514,514,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,,,,505,505,505,511,505,511,511,511,505,505,,,,505,,505',
+'505,505,505,505,505,505,,,,,,505,505,505,505,505,505,505,,,505,,,,,',
+',505,,,505,505,505,505,505,505,505,505,505,505,505,505,,505,505,505',
+'505,505,,,,,,,,,,,,,,,,,,,,505,,,505,,,505,505,,,505,,505,,505,,505',
+',,505,,,,,,505,,,,,505,505,505,505,,505,505,505,505,,,,,505,505,,,,',
+',,505,,505,505,505,122,122,122,122,122,,,,122,122,,,,122,,122,122,122',
+'122,122,122,122,,,,,,122,122,122,122,122,122,122,,,122,,,,,,122,122',
+',122,122,122,122,122,122,122,122,122,,122,122,122,,122,122,122,122,122',
+',,,,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122,,122,,,,122,,,,,,,,,122',
+',,,,122,122,122,122,,122,122,122,122,,,,,122,122,,,,503,503,503,122',
+'503,122,122,122,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',
+',,,121,121,121,503,121,503,503,503,121,121,,,,121,,121,121,121,121,121',
+'121,121,,,,,,121,121,121,121,121,121,121,,,121,,,,,,,121,,,121,121,121',
+'121,121,121,121,121,,121,121,121,,121,121,121,121,121,,,,,,,,,,,,,,',
+',,,,,121,,,121,,,121,121,,,121,,,,,,121,,,,,,,,,121,,,,,121,121,121',
+'121,,121,121,121,121,,,,,121,121,,,,120,120,120,121,120,121,121,121',
+'120,120,,,,120,,120,120,120,120,120,120,120,,,,,,120,120,120,120,120',
+'120,120,,,120,,,,,,,120,,,120,120,120,120,120,120,120,120,,120,120,120',
+',120,120,120,120,120,,,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,',
+',,,120,,,,,,,,,120,,,,,120,120,120,120,,120,120,120,120,,,,,120,120',
+',,,376,376,376,120,376,120,120,120,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,,,,250,250,250,376,250,376,376,376',
+'250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250,250,250',
+'250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250,250,250',
+',250,250,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250,,',
+',,,250,,,,,,,,,250,,,,,250,250,250,250,,250,250,250,250,,,,,250,250',
+',,,707,707,707,250,707,250,250,250,707,707,,,,707,,707,707,707,707,707',
+'707,707,,,,,,707,707,707,707,707,707,707,,,707,,,,,,,707,,,707,707,707',
+'707,707,707,707,707,,707,707,707,,707,707,707,707,707,,,,,,,,,,,,,,',
+',,,,,707,,,707,,,707,707,,,707,,,,,,707,,,,,,,,,707,,,,,707,707,707',
+'707,,707,707,707,707,,,,,707,707,,,,251,251,251,707,251,707,707,707',
+'251,251,,,,251,,251,251,251,251,251,251,251,,,,,,251,251,251,251,251',
+'251,251,,,251,,,,,,,251,,,251,251,251,251,251,251,251,251,,251,251,251',
+',251,251,251,251,251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,',
+',,,251,,,,,,,,,251,,,,,251,251,251,251,,251,251,251,251,,,,,251,251',
+',,,119,119,119,251,119,251,251,251,119,119,,,,119,,119,119,119,119,119',
+'119,119,,,,,,119,119,119,119,119,119,119,,,119,,,,,,,119,,,119,119,119',
+'119,119,119,119,119,,119,119,119,,119,119,119,119,119,,,,,,,,,,,,,,',
+',,,,,119,,,119,,,119,119,,,119,,,,,,119,,,,,,,,,119,,,,,119,119,119',
+'119,,119,119,119,119,,,,,119,119,,,,701,701,701,119,701,119,119,119',
+'701,701,,,,701,,701,701,701,701,701,701,701,,,,,,701,701,701,701,701',
+'701,701,,,701,,,,,,,701,,,701,701,701,701,701,701,701,701,,701,701,701',
+',701,701,701,701,701,,,,,,,,,,,,,,,,,,,,701,,,701,,,701,701,,,701,,',
+',,,701,,,,,,,,,701,,,,,701,701,701,701,,701,701,701,701,,,,,701,701',
+',,,59,59,59,701,59,701,701,701,59,59,,,,59,,59,59,59,59,59,59,59,,,',
+',,59,59,59,59,59,59,59,,,59,,,,,,,59,,,59,59,59,59,59,59,59,59,59,59',
+'59,59,,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,,,,404,404,404,60,404,60,60,60',
+'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',
+',,,63,63,63,404,63,404,404,404,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',
+'961,,961,961,961,961,961,,,,,,,,,961,,68,68,68,68,,68,68,68,68,,,,,68',
+'68,,,,,,961,68,,68,68,68,495,495,495,495,495,961,961,,495,495,961,,',
+'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,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,,,,490,490,490',
+'69,490,69,69,69,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,,,,70,70,70,490,70,490,490,490,70,70,,,,70,,70,70,70',
+'70,70,70,70,,,,,,70,70,70,70,70,70,70,,,70,,,,,,,70,,,70,70,70,70,70',
+'70,70,70,,70,70,70,,70,70,,,70,,,,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,',
+'70,,,,,,,,,,,,,,,,,,,,70,70,70,70,,70,70,70,70,,,,,70,70,,,,488,488',
+'488,70,488,70,70,70,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,,,,486,486,486,488,486,488,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,,,,,486,486,486,486,,486,486,486,486,,,,,486',
+'486,,,,118,118,118,486,118,486,486,486,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,,,,316,316,316,118,316,118,118',
+'118,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,316,,316,316',
+'316,,316,316,,,316,,,,,,,,,,,,,,,,,,,,316,,,316,,,316,316,,,316,,,,',
+',,,,,,,,,,,,,,,316,316,316,316,,316,316,316,316,,,,,316,316,,,,324,324',
+'324,316,324,316,316,316,324,324,,,,324,,324,324,324,324,324,324,324',
+',,,,,324,324,324,324,324,324,324,,,324,,,,,,,324,,,324,324,324,324,324',
+'324,324,324,,324,324,324,,324,324,324,324,324,,,,,,,,,,,,,,,,,,,,324',
+',,324,324,,324,324,,,324,,,,,,324,,,,,,,,,324,,,,,324,324,324,324,,324',
+'324,324,324,,,,,324,324,,,,,424,,324,,324,324,324,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,425,424,,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,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,56,425,,425,,,,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,963,,963,963',
+'963,963,963,,,,,,,56,,963,56,56,56,56,415,56,,56,,,,415,415,415,,,415',
+'415,415,,415,963,,,,,,,,415,415,415,963,963,,,,963,,,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,415,415,,,,,,,,,,,,,,415,,27',
+'415,415,,415,,415,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,,474,27,27,,27,,27,474,474,474',
+',,474,474,474,614,474,614,614,614,614,614,,,,474,474,,,,614,,,,,,474',
+'474,,474,474,474,474,474,,,,,,,,,614,,,,,,,,,614,614,614,614,,,,614',
+',,,,,,,,474,,28,,,,,474,,28,28,28,474,474,28,28,28,614,28,,,,,,,,,,28',
+'28,,,,,,474,474,,28,28,,28,28,28,28,28,,,,,474,,,474,,,,,474,,,,,,,',
+',,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,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,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9',
+',,,9,9,9,9,9,9,9,9,9,9,,,,,,9,9,9,9,9,9,9,9,9,,,9,,,,,,,,9,9,,9,9,9',
+'9,9,9,9,,,9,9,,,,9,9,9,9,,,,,,,,,,,,,,9,9,,9,9,9,9,9,9,9,9,9,9,9,9,',
+',9,9,,,,,,,,,,,,,,9,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,584,,,584,584,,,,584,584,584',
+'584,,,,,,,,,,,,,,584,584,,584,584,584,584,584,584,584,584,584,584,584',
+'584,,,584,584,,,,,,,,,,,,,,584,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8',
+'8,8,8,8,8,,,,8,8,8,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,',
+'8,8,,8,8,8,8,8,8,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,714,714,714,714,714,714,714,714,714,714,714,714',
+'714,714,714,714,714,714,714,714,714,714,714,714,,,,714,714,714,714,714',
+'714,714,714,714,714,,,,,,714,714,714,714,714,714,714,714,714,,,714,',
+',,,,,,714,714,,714,714,714,714,714,714,714,,,714,714,,,,714,714,714',
+'714,,,,,,,,,,,,,,714,714,,714,714,714,714,714,714,714,714,714,714,714',
+'714,544,544,714,,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,261,261,544,,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,441,441,261,,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,506,506,440,,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,507,507,506,,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,918,918,507,,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,516,516,918,,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,517,517,516',
+',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,972,972,517,,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,973,973,972,,973,,,,,,,,973,973',
+',973,973,973,973,973,973,973,,,973,973,,,,973,973,973,973,,,,,,973,',
+',,,,,,973,973,,973,973,973,973,973,973,973,973,973,973,973,973,213,213',
+'973,,213,,,,,,,,213,213,,213,213,213,213,213,213,213,,,213,213,,,,213',
+'213,213,213,,,,,,213,,,,,,,,213,213,,213,213,213,213,213,213,213,213',
+'213,213,213,213,552,552,213,,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,551,551,552,,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,545',
+'545,551,,545,,,,,,,,545,545,,545,545,545,545,545,545,545,,,545,545,',
+',,545,545,545,545,,,,,,545,,,,,,,,545,545,,545,545,545,545,545,545,545',
+'545,545,545,545,545,212,212,545,,212,,,,,,,,212,212,,212,212,212,212',
+'212,212,212,,,212,212,,,,212,212,212,212,,,,,,212,,,,,,,,212,212,,212',
+'212,212,212,212,212,212,212,212,212,212,212,,796,212,796,796,796,796',
+'796,,794,,794,794,794,794,794,796,,,,,,,,794,,841,,841,841,841,841,841',
+',,,,,796,,,841,,,,,794,796,796,796,796,,,,796,794,794,794,794,,,,794',
+'841,,843,,843,843,843,843,843,841,841,841,841,,,,841,843,,1011,,1011',
+'1011,1011,1011,1011,,933,,933,933,933,933,933,1011,,,,,843,,,933,,,',
+',,843,843,843,843,,,,843,1011,,,,,,,,933,,,1011,1011,,,,1011,933,933',
+'933,933,,,935,933,935,935,935,935,935,937,,937,937,937,937,937,939,935',
+'939,939,939,939,939,1001,937,1001,1001,1001,1001,1001,,939,,,,,,,1001',
+'935,,,,,,,937,,,,935,935,,939,,935,,937,937,,1001,,937,,939,939,,,,939',
+',1001,1001,,,533,1001,533,533,533,533,533,,712,,712,712,712,712,712',
+'533,,,,,,,,712,,957,,957,957,957,957,957,,,,,,533,533,,957,,,,,712,533',
+'533,533,533,,,,533,712,712,712,712,,,,712,957,,798,,798,798,798,798',
+'798,957,957,957,957,,,,957,798,,655,,655,655,655,655,655,,713,,713,713',
+'713,713,713,655,,,,,798,,,713,,,,,,,,798,798,,,,798,655,,,,,,,,713,655',
+'655,655,655,,,,655,713,713,713,713,,,,713' ]
+ racc_action_check = arr = ::Array.new(24863, 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 = [
+ 1585, 80, nil, 336, nil, 8506, 1445, 63, 23176, 22920,
+ 83, nil, 64, 140, 1308, 416, 101, 716, nil, -71,
+ 7581, 2705, 225, nil, 479, nil, 275, 22450, 22658, 6132,
+ 6394, 6525, nil, 3125, 8236, 8367, nil, 172, 168, 386,
+ 262, 250, 15727, 15858, 16251, 191, 677, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 22187, nil, -73, 19796,
+ 19927, 123, nil, 20189, 20320, nil, nil, 20451, 20590, 20868,
+ 21130, 23304, nil, nil, nil, nil, nil, nil, nil, 456,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 604, nil, nil,
+ 332, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 337, nil, 9300, nil, nil, nil, nil, 21523, 19534,
+ 18879, 18748, 18486, 1445, nil, 439, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 258, nil, 2705, 17561,
+ 17168, 17037, 24393, 24149, 16120, 15596, 15465, 15334, 14941, 14286,
+ nil, nil, 927, 138, -56, 372, -85, 295, 362, nil,
+ 7974, 2845, 365, 7311, 7180, 6918, 6263, 5608, 5338, 5207,
+ 604, 13500, 13369, 13238, 12452, 12321, 11666, 11535, 10618, 9963,
+ 19141, 19403, 9439, 9832, 10880, 11011, 11142, 11273, 11404, nil,
+ nil, 23539, nil, nil, 378, 11797, 11928, nil, nil, nil,
+ nil, nil, nil, nil, 12190, nil, 2845, nil, 353, 373,
+ nil, 12583, 425, 12714, nil, 12845, 12976, nil, nil, 573,
+ nil, 5477, 1570, 414, 387, 4805, 400, 442, 426, 7442,
+ 2145, 1237, 1207, 1168, 532, 1097, nil, 504, 499, 166,
+ nil, nil, nil, 561, 223, 527, 21654, nil, 337, 598,
+ 1067, nil, 627, nil, 21785, 2285, 13631, 571, nil, 81,
+ -98, 622, 605, 518, 636, nil, nil, -3, -10, 32,
+ 16382, 16513, 219, 714, 603, 64, 65, 745, 704, -12,
+ 745, nil, nil, 367, 340, 213, nil, 787, nil, 9,
+ 17692, nil, nil, nil, 369, -53, 181, -24, -30, 309,
+ 508, 506, 505, nil, 365, nil, 19010, nil, 149, 210,
+ 259, 270, 390, -39, -34, 397, nil, nil, nil, nil,
+ nil, nil, nil, nil, 658, 22792, nil, nil, nil, nil,
+ 659, nil, nil, 640, 20058, 651, nil, nil, 885, 671,
+ nil, 672, 693, 280, -83, 22321, nil, nil, nil, 110,
+ 0, 742, nil, nil, 21919, 22053, nil, 1445, nil, 693,
+ nil, nil, 745, nil, nil, nil, nil, 213, nil, 745,
+ 23661, 23600, 8768, 136, 8899, 9030, 9161, 4105, 3965, 3136,
+ 3241, 773, 778, 791, 792, 5207, 5338, 5477, 4245, 4525,
+ 4665, 3405, 3265, 5076, 4945, 4805, 4385, 3825, 3235, 3293,
+ 3545, 3685, 2425, 338, 22579, nil, nil, nil, nil, 739,
+ nil, 268, 346, 740, nil, nil, 21392, nil, 21261, nil,
+ 20999, nil, nil, nil, nil, 20729, 1430, 745, 742, 742,
+ nil, nil, 744, 18617, 749, 18347, 23722, 23783, 1028, 793,
+ nil, 18216, 765, nil, 18085, 17954, 23905, 23966, 2565, 17823,
+ 892, 900, 648, 821, nil, 17430, nil, nil, 17299, nil,
+ nil, nil, nil, 24669, 2005, 900, nil, 3825, 29, 71,
+ 897, 912, 16906, 16775, 23478, 24332, 57, nil, nil, 440,
+ nil, 24271, 24210, 16644, nil, nil, nil, 109, -31, 4945,
+ 833, nil, 194, nil, nil, nil, 728, nil, nil, nil,
+ 805, nil, nil, 142, nil, 147, nil, nil, 791, nil,
+ 792, nil, nil, nil, 23048, nil, 794, 15203, 15072, 445,
+ 847, 14810, 14679, 14548, 14417, 849, nil, nil, 14155, 14024,
+ 870, nil, 13893, 13762, nil, nil, 197, 167, 468, 220,
+ 841, 1025, 843, nil, 22543, nil, 2565, 952, -21, 206,
+ nil, 3685, 4245, nil, 856, nil, 910, 8637, nil, nil,
+ nil, 885, -118, 8105, 866, nil, 879, 25, 24, 921,
+ 436, 1445, 923, 882, 7049, 1165, 953, -8, 1018, 6001,
+ nil, 903, nil, 237, nil, 24750, nil, 904, 905, nil,
+ 906, 916, 918, nil, nil, nil, nil, nil, nil, nil,
+ 911, 3205, nil, nil, 13107, nil, nil, nil, 1002, nil,
+ nil, nil, 1010, nil, nil, 1011, 51, nil, 1050, nil,
+ nil, nil, nil, 1056, nil, -1, 936, 39, 3, 136,
+ 149, 19665, 476, 1165, nil, 937, 1165, 19272, nil, nil,
+ 1072, 1025, 24677, 24758, 23417, nil, nil, nil, nil, nil,
+ nil, 1725, nil, nil, nil, nil, nil, nil, nil, 952,
+ 9570, 1585, 9701, nil, 973, nil, 1725, nil, 1865, nil,
+ nil, 2005, nil, 2145, nil, 2285, 10094, 10225, 10356, 10487,
+ -40, 10749, 978, 982, nil, 986, 991, 996, nil, 1028,
+ 1008, 1004, 1008, 12059, nil, nil, 1141, nil, nil, 1305,
+ 1039, 1146, nil, nil, nil, 1024, 406, nil, nil, 1150,
+ nil, 2985, 1026, 1075, nil, nil, 1082, nil, 34, 1043,
+ 793, nil, nil, 658, 24463, nil, 24455, nil, 24733, nil,
+ 5076, nil, 3111, nil, 1044, 325, 1048, nil, nil, nil,
+ nil, 1170, nil, 5739, 1180, 3405, 3545, nil, 5870, 3965,
+ 37, 69, nil, 1182, 467, 4665, nil, 1183, 1063, 461,
+ nil, 1074, 1074, nil, 1305, 6656, 6787, 2985, 918, nil,
+ nil, 24480, nil, 24519, nil, 7489, nil, nil, 1112, 1151,
+ 7712, 1305, 1170, nil, 1133, nil, nil, nil, 2425, nil,
+ nil, 7, 7843, nil, nil, nil, nil, nil, 1161, 1122,
+ nil, nil, nil, 1126, 1131, nil, 1136, 1144, nil, 1145,
+ nil, nil, 1149, 3140, 1156, 3485, nil, nil, 10, nil,
+ 1281, 1283, nil, 80, nil, nil, nil, 1286, nil, nil,
+ nil, 1208, nil, 1165, nil, nil, 1166, 1169, 1179, 1180,
+ nil, 1184, nil, 370, nil, nil, nil, 304, 23844, nil,
+ nil, nil, 885, 957, 888, 885, 1263, 817, nil, 4525,
+ 4385, nil, nil, 24544, nil, 24596, nil, 24603, nil, 24610,
+ nil, nil, nil, nil, 434, 3531, 1186, 4105, nil, nil,
+ nil, nil, nil, 3265, nil, 1865, nil, 24694, nil, 8414,
+ nil, 20637, nil, 22250, nil, nil, nil, 1291, 1240, 1242,
+ 1325, 15989, 24027, 24088, 748, 1220, 1332, 1214, 1228, 1232,
+ 1253, 1258, 3421, 1261, 3391, 715, 1386, 1390, 1271, 1276,
+ 1284, 1285, nil, nil, 1289, 26, 33, 39, 1025, nil,
+ nil, 24617, nil, nil, nil, nil, 3429, 1291, nil, nil,
+ nil, 24536, nil, nil, nil, nil, 8, 1296, 1297, -81,
+ nil, 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,
+ -329, -330, -68, -11, -72, -80, -82, -598, -491, -492,
+ -598, -598, -598, -598, -598, -586, -237, -270, -271, -272,
+ -273, -274, -275, -276, -277, -278, -574, -281, -283, -597,
+ -565, -301, -303, -598, -598, -307, -310, -584, -598, -598,
+ -598, -598, -331, -332, -334, -335, -432, -433, -434, -435,
+ -436, -457, -439, -440, -459, -461, -444, -449, -453, -455,
+ -471, -459, -473, -475, -476, -477, -478, -572, -480, -481,
+ -573, -483, -484, -485, -486, -487, -488, -489, -490, -495,
+ -496, -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, -598, -598, -598, -598, -598, -586,
+ -587, -47, -598, -491, -492, -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, -401,
+ -403, -598, -582, -583, -57, -246, -598, -300, -407, -416,
+ -418, -63, -413, -64, -586, -65, -238, -251, -260, -260,
+ -255, -598, -261, -598, -567, -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,
+ -329, -330, -333, -414, -598, -78, -598, -84, -290, -474,
+ -598, -214, -215, -230, -598, -11, -598, -586, -239, -590,
+ -590, -598, -598, -590, -598, -302, -392, -49, -598, -598,
+ -598, -598, -584, -598, -585, -491, -492, -598, -598, -279,
+ -598, -345, -346, -106, -107, -598, -109, -598, -279, -598,
+ -598, -491, -492, -322, -111, -112, -153, -154, -155, -171,
+ -176, -183, -186, -324, -598, -563, -598, -437, -598, -598,
+ -598, -598, -598, -598, -598, -598, 1022, -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, -575, -576, -256, -411, -577, -578, -576,
+ -575, -256, -410, -412, -577, -578, -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, -381, -256, -575, -576, -54, -58, -586,
+ -257, -381, -381, -586, -295, -252, -598, -253, -598, -258,
+ -598, -262, -570, -571, -10, -585, -14, -3, -586, -69,
+ -288, -85, -74, -598, -586, -246, -598, -598, -95, -598,
+ -474, -598, -81, -86, -598, -598, -598, -598, -235, -598,
+ -424, -598, -284, -598, -240, -592, -591, -242, -592, -291,
+ -292, -566, -304, -524, -11, -336, -337, -11, -598, -598,
+ -598, -598, -598, -246, -598, -598, -290, -315, -106, -107,
+ -108, -598, -598, -246, -318, -497, -498, -598, -598, -11,
+ -502, -326, -586, -438, -458, -463, -598, -465, -441, -460,
+ -598, -462, -443, -598, -446, -598, -448, -451, -598, -452,
+ -598, -472, -8, -18, -598, -28, -269, -598, -598, -415,
+ -598, -248, -250, -598, -598, -59, -245, -408, -598, -598,
+ -61, -409, -598, -598, -298, -588, -575, -576, -575, -576,
+ -586, -194, -598, -382, -586, -384, -11, -53, -404, -381,
+ -243, -11, -11, -294, -260, -259, -263, -598, -568, -569,
+ -13, -598, -71, -598, -77, -83, -586, -575, -576, -244,
+ -92, -94, -598, -79, -598, -203, -213, -586, -597, -597,
+ -282, -586, -287, -590, -393, -524, -396, -562, -562, -507,
+ -509, -509, -509, -523, -525, -526, -527, -528, -529, -530,
+ -531, -598, -533, -535, -537, -542, -544, -545, -547, -552,
+ -554, -555, -557, -558, -559, -598, -597, -338, -597, -308,
+ -339, -340, -311, -598, -314, -598, -586, -575, -576, -579,
+ -289, -598, -106, -107, -110, -586, -11, -598, -500, -320,
+ -598, -11, -524, -524, -598, -564, -464, -467, -468, -469,
+ -470, -11, -442, -445, -447, -450, -454, -456, -122, -267,
+ -598, -197, -598, -589, -260, -33, -199, -34, -200, -60,
+ -35, -202, -36, -201, -62, -195, -598, -598, -598, -598,
+ -415, -598, -562, -562, -363, -365, -365, -365, -380, -598,
+ -586, -386, -531, -539, -540, -550, -598, -406, -405, -11,
+ -598, -598, -254, -264, -16, -75, -90, -87, -297, -597,
+ -343, -11, -425, -597, -426, -427, -598, -241, -598, -586,
+ -598, -505, -506, -598, -598, -516, -598, -519, -598, -521,
+ -598, -347, -598, -349, -351, -358, -586, -536, -546, -556,
+ -560, -598, -341, -598, -598, -11, -11, -313, -598, -11,
+ -415, -598, -415, -598, -598, -11, -323, -598, -586, -598,
+ -327, -598, -268, -32, -198, -249, -598, -236, -598, -361,
+ -362, -371, -373, -598, -376, -598, -378, -383, -598, -598,
+ -598, -538, -598, -402, -598, -417, -419, -9, -11, -431,
+ -344, -598, -598, -429, -285, -394, -397, -399, -598, -562,
+ -543, -561, -508, -509, -509, -534, -509, -509, -553, -509,
+ -531, -548, -586, -598, -356, -598, -532, -305, -598, -306,
+ -598, -598, -263, -597, -316, -319, -499, -598, -325, -501,
+ -503, -502, -466, -562, -541, -364, -365, -365, -365, -365,
+ -551, -365, -385, -586, -388, -390, -391, -549, -598, -290,
+ -55, -430, -11, -97, -98, -598, -598, -105, -428, -11,
+ -11, -395, -504, -598, -512, -598, -514, -598, -517, -598,
+ -520, -522, -348, -350, -354, -598, -359, -11, -309, -312,
+ -420, -421, -422, -11, -321, -11, -360, -598, -368, -598,
+ -370, -598, -374, -598, -377, -379, -387, -598, -289, -579,
+ -424, -246, -598, -598, -104, -598, -598, -509, -509, -509,
+ -509, -352, -598, -357, -598, -597, -598, -598, -365, -365,
+ -365, -365, -389, -423, -586, -575, -576, -579, -103, -398,
+ -400, -598, -510, -513, -515, -518, -598, -355, -342, -317,
+ -328, -598, -366, -369, -372, -375, -415, -509, -353, -365,
+ -511, -367 ]
+
+clist = [
+'218,335,328,14,260,373,2,409,14,541,277,277,277,132,132,6,487,278,278',
+'278,6,261,648,222,129,129,324,431,312,312,756,521,222,222,222,711,14',
+'303,303,124,207,811,415,421,113,338,339,329,406,342,134,134,298,319',
+'428,589,534,537,625,878,625,479,312,312,312,296,222,222,806,315,222',
+'347,357,357,628,779,112,550,943,656,524,527,755,875,531,763,759,129',
+'910,512,916,474,294,381,946,337,337,221,914,337,389,390,391,392,268',
+'272,264,271,273,116,478,279,279,279,628,814,14,663,117,689,692,222,222',
+'222,222,14,14,857,6,394,875,630,275,287,288,616,206,393,6,379,343,330',
+'333,621,622,352,385,573,575,487,337,337,337,337,983,359,363,402,395',
+'619,584,331,618,625,625,375,332,532,350,554,757,374,325,116,326,651',
+'438,327,628,943,336,340,815,564,341,571,574,574,816,701,953,1007,277',
+'706,825,559,878,405,560,882,714,789,910,405,791,792,693,901,916,758',
+'760,14,222,222,222,1018,992,222,222,222,222,222,222,913,654,865,387',
+'533,875,425,788,484,848,929,14,930,473,481,610,663,482,950,783,861,377',
+'378,277,277,434,435,436,437,875,499,278,277,750,906,828,829,380,868',
+'278,1,877,710,879,382,222,222,415,421,383,704,384,716,634,222,721,707',
+'873,769,776,870,643,904,401,407,,509,416,426,430,312,14,,663,663,14',
+'839,840,636,303,14,,,496,,523,763,312,909,763,911,763,,763,,,303,951',
+',538,539,,,510,498,14,222,495,,504,502,513,,639,,,696,1008,,820,222',
+'222,,639,,279,705,874,822,876,,294,26,279,,522,294,26,772,494,222,,',
+',,,480,,561,337,337,639,26,955,483,724,222,724,,639,,26,26,26,268,26',
+',590,272,558,,604,116,,907,,908,132,978,894,979,787,980,775,625,562',
+',,129,823,819,431,540,932,827,26,26,,628,26,277,,989,583,990,763,991',
+'763,,763,,763,,620,134,,,623,739,,,,222,744,,116,,956,,,612,,632,,425',
+',,,635,,,,555,,,26,1017,,772,993,26,26,26,26,26,26,1019,,,763,,,,277',
+',784,977,,,,596,,595,,312,14,601,14,600,,631,,312,303,,222,,,,6,988',
+'303,,,,416,715,,513,222,425,277,,,,,513,695,897,,425,277,,,14,,,14,',
+',39,,,222,,39,,,647,596,,617,,222,,768,952,,425,14,26,26,26,26,425,624',
+'26,26,26,26,26,26,16,39,302,302,922,16,,,,416,,26,,,132,,590,785,,416',
+'761,222,222,,767,129,222,222,,778,222,947,653,16,,,346,362,362,362,728',
+',590,,14,26,26,416,,14,14,134,312,,26,416,,786,,,,303,405,312,,1016',
+',,351,690,690,26,303,830,,26,513,,,,26,39,,,,,987,777,708,709,39,39',
+',,,735,737,,734,,740,742,590,,430,26,26,,821,,,590,,16,824,,,,,,26,26',
+'16,16,,,,,,222,,,,,14,222,,,,14,26,,596,,,601,,859,,14,,863,,,,129,26',
+',337,,222,,,,337,,761,,,,,,,,670,,39,,,,,,312,,,13,753,,886,,13,851',
+'994,,,761,,14,,39,,,,,,,,,16,14,899,,,,,429,,,13,,888,,26,,,,,639,,',
+',16,,754,833,,,795,797,799,,222,,14,14,,,14,,,,,,14,,762,,,,39,,,,39',
+'942,,,302,39,312,337,,,,,26,,26,917,,,312,,,302,26,14,,,,925,16,,39',
+',16,670,,13,26,16,,,,,,,13,13,,,,801,,26,,,26,,966,,,,26,,16,,,,,,,',
+'26,,,15,,,26,,15,,,,,,,,,14,,690,670,670,896,,14,14,425,900,,869,,,',
+',,,15,305,305,,26,26,14,,277,26,26,,14,26,14,,,,,,,,,,13,,,26,,,222',
+'590,26,26,,349,358,358,,,871,903,,871,753,425,753,13,753,,,,,,,,,,,',
+',,,,,,670,,670,,,,,,801,,,884,,,15,934,936,,938,940,,941,871,15,15,754',
+',754,39,754,39,,,,,,302,,,,416,13,,,302,13,26,762,,762,13,26,26,,,,26',
+',,,16,,16,,,,26,39,,,39,842,844,846,,13,,26,,,,,,,,,,,,801,,801,39,',
+'753,,753,,753,16,753,,16,,,,,,,15,,,,,26,,,,,1002,1003,1004,1005,,16',
+',26,,,,,,15,,,,,,,670,,754,,754,,754,,754,753,39,981,801,,297,39,39',
+',,26,1020,26,26,,762,26,,302,429,,,26,,,,,,,302,,,,16,,,,,16,16,801',
+',801,,15,,,754,15,,,,305,15,,26,,,,,,,,,801,,,,,305,,,,,958,960,962',
+'964,15,965,,,,,,,,,,,,39,,,,,39,13,,13,,,,,,,39,,,,,,,,,,,,,26,,,,16',
+',,26,26,16,,,,,,,,13,,16,13,,,,,26,,,,362,,26,,26,,39,,1012,1013,1014',
+'1015,,13,,,,,39,,26,,,,,,,,,,,,400,,,,,,16,1021,,,,,,,,,,,16,,39,39',
+',297,39,,,,,,39,,,,,,,,13,,,,,13,13,,,,,,,,16,16,,362,16,,,,,,16,39',
+',,,924,15,,15,,,,,,305,,,,,,,,305,38,,297,,,38,,297,,,16,,,,928,,,,',
+',,,15,,,15,,,,,,,,38,301,301,,,,,,,39,13,,,,15,13,39,39,,,,720,,,,13',
+',,,,,,,,39,345,361,361,361,,39,16,39,,,,,,16,16,,,,,,,,,,,,,,,,,16,',
+',,,15,16,13,16,,15,15,,,38,,,,,13,,,305,38,38,,,,,,,,,305,,,,,,334,',
+',,,,,,,,,,,,13,13,,,13,,229,,,,13,,,,,276,276,276,,,,,,,,,,,321,322',
+'323,,,,,,,,,,,,15,13,,276,276,15,,,,,,,,,38,15,,,,,,,,,,,,,,,,,,,,,',
+'38,,,,,,,,,,686,,,688,,,,,,,358,,,,,,15,,13,,,,,,,13,13,,15,,,,,,,,',
+',,,,,,13,,,403,,,13,38,13,433,,38,,,,301,38,,,15,15,,,15,,,,,,15,,,301',
+',,,,,,766,,38,,,770,771,,,,,,,,,358,,,,,,,,15,276,408,276,927,,427,432',
+',,,,,489,,491,,492,493,,,,229,,,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',
+',,,,,,276,276,,,,,,15,,276,,,,,15,15,276,,276,,276,276,,,,831,,,,,,',
+'15,,,,,,15,,15,,,,,,,,,,,,,,,,,,,518,,,,,,,,,,,,,,854,,,,,,586,,,,,',
+'860,,,,,,,38,,38,,,,,,301,,,,,,,,301,,,,,,,,,,,890,891,,,893,,,,,,,',
+'38,,,38,,,,,276,,,,,,,,,,,,,,,,,38,,,,,626,921,334,,629,,,,,,,,,,,,276',
+',427,611,408,,,,,,,,,,,,,,,,,,,626,,,334,,,,,,,,,,38,,,,433,38,38,,276',
+',276,,276,970,,,,301,,,975,976,,,,,,276,301,,,,,,,,645,646,985,,,,,',
+'986,,,276,,729,276,,,626,334,,,,,,,,,,276,276,,,,,,,,,,276,,,,,,,,,',
+',,,,773,38,,,,,38,,,,,,,,,,38,,,,276,731,782,,276,276,736,738,,,,741',
+'743,,,611,745,,,,,,,,,,,807,,,,,,,,,,,361,,276,,,,38,,,,,,,,,,,,38,',
+',,,,276,,,,,,,,,,,,,,,,,,,,,832,,,,276,,,38,38,,,38,,,,,,38,,,,,,,,',
+',,,,,,,,,,,,,,,,361,,,,,,,,38,,,,923,,,,,,276,,834,,,,,,,,881,,,,,,736',
+'738,743,741,,837,,,,,,,892,,,,,,,,,,,,,,,,,334,,,,,,,,,38,,,,,,,38,38',
+',,,,,,,276,,,,,,,,,38,,,,,,38,,38,276,,,,,,,,,,,,,,,,,276,834,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276' ]
+ racc_goto_table = arr = ::Array.new(2533, 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,86,67,22,141,56,2,23,22,92,33,33,33,60,60,7,73,68,68,68,7,36,10,22',
+'57,57,31,18,64,64,129,8,22,22,22,98,22,22,22,15,15,90,37,37,6,17,17',
+'68,27,17,61,61,49,63,27,24,89,89,74,176,74,23,64,64,64,46,22,22,119',
+'50,22,22,22,22,180,11,4,54,117,140,69,69,128,171,69,172,132,57,177,51',
+'135,37,45,157,120,29,29,20,134,29,17,17,17,17,71,71,38,38,38,96,39,70',
+'70,70,180,11,22,166,5,91,91,22,22,22,22,22,22,12,7,2,171,14,44,44,44',
+'40,16,7,7,155,4,70,70,40,40,19,155,158,158,73,29,29,29,29,120,55,55',
+'28,30,42,62,66,72,74,74,84,85,88,93,95,130,99,100,96,101,102,47,103',
+'180,117,104,105,106,159,107,159,159,159,108,109,110,120,33,111,112,113',
+'176,68,114,119,115,140,177,68,124,124,92,116,135,121,127,22,22,22,22',
+'120,134,22,22,22,22,22,22,133,136,137,5,138,171,57,139,47,132,142,22',
+'143,144,146,23,166,147,148,149,150,153,154,33,33,29,29,29,29,171,47',
+'68,33,24,129,140,140,156,132,68,1,128,8,128,160,22,22,37,37,161,54,162',
+'163,51,22,164,165,170,40,24,173,51,174,20,20,,31,71,20,20,64,22,,166',
+'166,22,124,124,23,22,22,,,7,,31,172,64,128,172,128,172,,172,,,22,11',
+',17,17,,,63,46,22,22,6,,46,50,49,,37,,,23,90,,24,22,22,,37,,70,23,130',
+'24,130,,45,41,70,,29,45,41,73,4,22,,,,,,44,,36,29,29,37,41,98,44,159',
+'22,159,,37,,41,41,41,71,41,,31,71,29,,47,96,,130,,130,60,128,91,128',
+'69,128,51,74,29,,,57,8,89,18,4,124,8,41,41,,180,41,33,,128,15,128,172',
+'128,172,,172,,172,,47,61,,,47,39,,,,22,39,,96,,124,,,31,,47,,57,,,,47',
+',,,96,,,41,128,,73,10,41,41,41,41,41,41,128,,,172,,,,33,,27,130,,,,71',
+',38,,64,22,71,22,38,,2,,64,22,,22,,,,7,130,22,,,,71,47,,49,22,57,33',
+',,,,49,68,8,,57,33,,,22,,,22,,,53,,,22,,53,,,29,71,,38,,22,,86,92,,57',
+'22,41,41,41,41,57,70,41,41,41,41,41,41,26,53,53,53,89,26,,,,71,,41,',
+',60,,31,67,,71,31,22,22,,141,57,22,22,,47,22,89,70,26,,,53,53,53,53',
+'15,,31,,22,41,41,71,,22,22,61,64,,41,71,,31,,,,22,68,64,,24,,,26,96',
+'96,41,22,56,,41,49,,,,41,53,,,,,8,49,96,96,53,53,,,,20,20,,70,,20,20',
+'31,,20,41,41,,17,,,31,,26,17,,,,,,41,41,26,26,,,,,,22,,,,,22,22,,,,22',
+'41,,71,,,71,,67,,22,,67,,,,57,41,,29,,22,,,,29,,31,,,,,,,,118,,53,,',
+',,,64,,,21,123,,47,,21,22,23,,,31,,22,,53,,,,,,,,,26,22,47,,,,,26,,',
+'21,,17,,41,,,,,37,,,,26,,125,20,,,169,169,169,,22,,22,22,,,22,,,,,,22',
+',118,,,,53,,,,53,47,,,53,53,64,29,,,,,41,,41,22,,,64,,,53,41,22,,,,22',
+'26,,53,,26,118,,21,41,26,,,,,,,21,21,,,,118,,41,,,41,,31,,,,41,,26,',
+',,,,,,41,,,25,,,41,,25,,,,,,,,,22,,96,118,118,96,,22,22,57,96,,123,',
+',,,,,25,25,25,,41,41,22,,33,41,41,,22,41,22,,,,,,,,,,21,,,41,,,22,31',
+'41,41,,25,25,25,,,125,123,,125,123,57,123,21,123,,,,,,,,,,,,,,,,,,118',
+',118,,,,,,118,,,118,,,25,169,169,,169,169,,169,125,25,25,125,,125,53',
+'125,53,,,,,,53,,,,71,21,,,53,21,41,118,,118,21,41,41,,,,41,,,,26,,26',
+',,,41,53,,,53,126,126,126,,21,,41,,,,,,,,,,,,118,,118,53,,123,,123,',
+'123,26,123,,26,,,,,,,25,,,,,41,,,,,169,169,169,169,,26,,41,,,,,,25,',
+',,,,,118,,125,,125,,125,,125,123,53,118,118,,9,53,53,,,41,169,41,41',
+',118,41,,53,26,,,41,,,,,,,53,,,,26,,,,,26,26,118,,118,,25,,,125,25,',
+',,25,25,,41,,,,,,,,,118,,,,,25,,,,,126,126,126,126,25,126,,,,,,,,,,',
+',53,,,,,53,21,,21,,,,,,,53,,,,,,,,,,,,,41,,,,26,,,41,41,26,,,,,,,,21',
+',26,21,,,,,41,,,,53,,41,,41,,53,,126,126,126,126,,21,,,,,53,,41,,,,',
+',,,,,,,9,,,,,,26,126,,,,,,,,,,,26,,53,53,,9,53,,,,,,53,,,,,,,,21,,,',
+',21,21,,,,,,,,26,26,,53,26,,,,,,26,53,,,,53,25,,25,,,,,,25,,,,,,,,25',
+'52,,9,,,52,,9,,,26,,,,26,,,,,,,,25,,,25,,,,,,,,52,52,52,,,,,,,53,21',
+',,,25,21,53,53,,,,25,,,,21,,,,,,,,,53,52,52,52,52,,53,26,53,,,,,,26',
+'26,,,,,,,,,,,,,,,,,26,,,,,25,26,21,26,,25,25,,,52,,,,,21,,,25,52,52',
+',,,,,,,,25,,,,,,65,,,,,,,,,,,,,,21,21,,,21,,32,,,,21,,,,,32,32,32,,',
+',,,,,,,,32,32,32,,,,,,,,,,,,25,21,,32,32,25,,,,,,,,,52,25,,,,,,,,,,',
+',,,,,,,,,,,52,,,,,,,,,,9,,,9,,,,,,,25,,,,,,25,,21,,,,,,,21,21,,25,,',
+',,,,,,,,,,,,21,,,65,,,21,52,21,65,,52,,,,52,52,,,25,25,,,25,,,,,,25',
+',,52,,,,,,,9,,52,,,9,9,,,,,,,,,25,,,,,,,,25,32,32,32,25,,32,32,,,,,',
+'65,,65,,65,65,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32',
+'32,32,32,32,32,32,32,32,32,32,,,,,,,32,32,,,,,,25,,32,,,,,25,25,32,',
+'32,,32,32,,,,9,,,,,,,25,,,,,,25,,25,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,',
+',,9,,,,,,65,,,,,,9,,,,,,,52,,52,,,,,,52,,,,,,,,52,,,,,,,,,,,9,9,,,9',
+',,,,,,,52,,,52,,,,,32,,,,,,,,,,,,,,,,,52,,,,,65,9,65,,65,,,,,,,,,,,',
+'32,,32,32,32,,,,,,,,,,,,,,,,,,,65,,,65,,,,,,,,,,52,,,,65,52,52,,32,',
+'32,,32,9,,,,52,,,9,9,,,,,,32,52,,,,,,,,32,32,9,,,,,,9,,,32,,65,32,,',
+'65,65,,,,,,,,,,32,32,,,,,,,,,,32,,,,,,,,,,,,,,65,52,,,,,52,,,,,,,,,',
+'52,,,,32,32,65,,32,32,32,32,,,,32,32,,,32,32,,,,,,,,,,,65,,,,,,,,,,',
+'52,,32,,,,52,,,,,,,,,,,,52,,,,,,32,,,,,,,,,,,,,,,,,,,,,65,,,,32,,,52',
+'52,,,52,,,,,,52,,,,,,,,,,,,,,,,,,,,,,,,,52,,,,,,,,52,,,,52,,,,,,32,',
+'32,,,,,,,,65,,,,,,32,32,32,32,,32,,,,,,,65,,,,,,,,,,,,,,,,,65,,,,,,',
+',,52,,,,,,,52,52,,,,,,,,32,,,,,,,,,52,,,,,,52,,52,32,,,,,,,,,,,,,,,',
+',32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,32' ]
+ racc_goto_check = arr = ::Array.new(2533, 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, 263, 6, nil, 73, 113, 41, 15, -294, 1130,
+ -498, -573, -652, nil, -364, 31, 127, -18, -188, 77,
+ 77, 760, 3, -204, -354, 911, 575, -161, -52, 32,
+ 34, -19, 1561, -19, nil, nil, -3, -170, 80, -154,
+ -338, 355, -318, nil, 103, 59, 32, -43, nil, 18,
+ 34, -227, 1423, 543, -278, 86, -66, 16, nil, nil,
+ 5, 42, -239, 12, -6, 1501, 102, -57, -12, -249,
+ 82, 78, -312, -263, -428, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 94, 106, -60, nil, -169, -282,
+ -645, -419, -334, 100, nil, -190, 106, nil, -525, 100,
+ 115, 116, -347, 119, 118, 116, -507, 118, -504, -358,
+ -704, -361, -515, -168, -175, -361, -623, -805, 216, -603,
+ -791, -405, nil, 147, -453, 194, 326, -404, -532, -584,
+ -444, nil, -528, -626, -751, -759, -309, -563, -109, -424,
+ -454, -18, -633, -632, -23, nil, -32, -30, -652, -407,
+ -540, nil, nil, 165, 164, 55, 175, 7, -234, -195,
+ 180, 184, 185, -291, -289, -277, -416, nil, nil, 152,
+ -514, -711, -529, -507, -553, nil, -737, -755, nil, nil,
+ -414 ]
+
+racc_goto_default = [
+ nil, nil, nil, 3, nil, 4, 344, 292, nil, 520,
+ nil, 812, nil, 289, 290, nil, nil, nil, 11, 12,
+ 18, 228, 320, nil, nil, 226, 227, nil, nil, 17,
+ nil, 439, 21, 22, 23, 24, nil, 642, nil, nil,
+ nil, 309, nil, 25, 410, 32, nil, nil, 34, 37,
+ 36, nil, 223, 224, 356, nil, 131, 418, 130, 133,
+ 77, 78, nil, 92, 46, 282, nil, 780, 411, nil,
+ 412, 423, 597, 485, 280, 266, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, nil, 267, 61, nil, nil,
+ nil, nil, nil, nil, 69, nil, 535, 70, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 803, 880, nil,
+ 804, 905, 752, 658, nil, 659, nil, nil, 660, nil,
+ 662, 613, nil, nil, nil, 668, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 422, nil, nil, nil, nil,
+ nil, 76, 79, 80, nil, nil, nil, nil, nil, 569,
+ nil, nil, nil, nil, nil, nil, 872, 713, 657, nil,
+ 661, 672, 674, 675, 764, 678, 679, 765, 682, 685,
+ 284 ]
+
+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, 243, :_reduce_281,
+ 4, 207, :_reduce_282,
+ 0, 244, :_reduce_283,
+ 0, 245, :_reduce_284,
+ 6, 207, :_reduce_285,
+ 0, 246, :_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,
+ 0, 247, :_reduce_303,
+ 3, 207, :_reduce_304,
+ 6, 207, :_reduce_305,
+ 6, 207, :_reduce_306,
+ 0, 248, :_reduce_307,
+ 0, 249, :_reduce_308,
+ 7, 207, :_reduce_309,
+ 0, 250, :_reduce_310,
+ 0, 251, :_reduce_311,
+ 7, 207, :_reduce_312,
+ 5, 207, :_reduce_313,
+ 4, 207, :_reduce_314,
+ 0, 252, :_reduce_315,
+ 0, 253, :_reduce_316,
+ 9, 207, :_reduce_317,
+ 0, 254, :_reduce_318,
+ 6, 207, :_reduce_319,
+ 0, 255, :_reduce_320,
+ 7, 207, :_reduce_321,
+ 0, 256, :_reduce_322,
+ 5, 207, :_reduce_323,
+ 0, 257, :_reduce_324,
+ 6, 207, :_reduce_325,
+ 0, 258, :_reduce_326,
+ 0, 259, :_reduce_327,
+ 9, 207, :_reduce_328,
+ 1, 207, :_reduce_329,
+ 1, 207, :_reduce_330,
+ 1, 207, :_reduce_331,
+ 1, 207, :_reduce_332,
+ 1, 165, :_reduce_none,
+ 1, 237, :_reduce_334,
+ 1, 240, :_reduce_335,
+ 1, 232, :_reduce_none,
+ 1, 232, :_reduce_none,
+ 2, 232, :_reduce_338,
+ 1, 234, :_reduce_none,
+ 1, 234, :_reduce_none,
+ 1, 233, :_reduce_none,
+ 5, 233, :_reduce_342,
+ 1, 154, :_reduce_none,
+ 2, 154, :_reduce_344,
+ 1, 236, :_reduce_none,
+ 1, 236, :_reduce_none,
+ 1, 260, :_reduce_347,
+ 3, 260, :_reduce_348,
+ 1, 263, :_reduce_349,
+ 3, 263, :_reduce_350,
+ 1, 262, :_reduce_none,
+ 4, 262, :_reduce_352,
+ 6, 262, :_reduce_353,
+ 3, 262, :_reduce_354,
+ 5, 262, :_reduce_355,
+ 2, 262, :_reduce_356,
+ 4, 262, :_reduce_357,
+ 1, 262, :_reduce_358,
+ 3, 262, :_reduce_359,
+ 4, 264, :_reduce_360,
+ 2, 264, :_reduce_361,
+ 2, 264, :_reduce_362,
+ 1, 264, :_reduce_363,
+ 2, 269, :_reduce_364,
+ 0, 269, :_reduce_365,
+ 6, 270, :_reduce_366,
+ 8, 270, :_reduce_367,
+ 4, 270, :_reduce_368,
+ 6, 270, :_reduce_369,
+ 4, 270, :_reduce_370,
+ 2, 270, :_reduce_none,
+ 6, 270, :_reduce_372,
+ 2, 270, :_reduce_373,
+ 4, 270, :_reduce_374,
+ 6, 270, :_reduce_375,
+ 2, 270, :_reduce_376,
+ 4, 270, :_reduce_377,
+ 2, 270, :_reduce_378,
+ 4, 270, :_reduce_379,
+ 1, 270, :_reduce_none,
+ 0, 183, :_reduce_381,
+ 1, 183, :_reduce_382,
+ 3, 274, :_reduce_383,
+ 1, 274, :_reduce_384,
+ 4, 274, :_reduce_385,
+ 1, 275, :_reduce_386,
+ 4, 275, :_reduce_387,
+ 1, 276, :_reduce_388,
+ 3, 276, :_reduce_389,
+ 1, 277, :_reduce_390,
+ 1, 277, :_reduce_none,
+ 0, 281, :_reduce_392,
+ 0, 282, :_reduce_393,
+ 4, 231, :_reduce_394,
+ 4, 279, :_reduce_395,
+ 1, 279, :_reduce_396,
+ 0, 285, :_reduce_397,
+ 4, 280, :_reduce_398,
+ 0, 286, :_reduce_399,
+ 4, 280, :_reduce_400,
+ 0, 287, :_reduce_401,
+ 5, 284, :_reduce_402,
+ 2, 178, :_reduce_403,
+ 4, 178, :_reduce_404,
+ 5, 178, :_reduce_405,
+ 5, 178, :_reduce_406,
+ 2, 230, :_reduce_407,
+ 4, 230, :_reduce_408,
+ 4, 230, :_reduce_409,
+ 3, 230, :_reduce_410,
+ 3, 230, :_reduce_411,
+ 3, 230, :_reduce_412,
+ 2, 230, :_reduce_413,
+ 1, 230, :_reduce_414,
+ 4, 230, :_reduce_415,
+ 0, 289, :_reduce_416,
+ 5, 229, :_reduce_417,
+ 0, 290, :_reduce_418,
+ 5, 229, :_reduce_419,
+ 5, 235, :_reduce_420,
+ 1, 291, :_reduce_421,
+ 1, 291, :_reduce_none,
+ 6, 153, :_reduce_423,
+ 0, 153, :_reduce_424,
+ 1, 292, :_reduce_425,
+ 1, 292, :_reduce_none,
+ 1, 292, :_reduce_none,
+ 2, 293, :_reduce_428,
+ 1, 293, :_reduce_none,
+ 2, 155, :_reduce_430,
+ 1, 155, :_reduce_none,
+ 1, 219, :_reduce_none,
+ 1, 219, :_reduce_none,
+ 1, 219, :_reduce_none,
+ 1, 220, :_reduce_435,
+ 1, 295, :_reduce_436,
+ 2, 295, :_reduce_437,
+ 3, 296, :_reduce_438,
+ 1, 296, :_reduce_439,
+ 1, 296, :_reduce_440,
+ 3, 221, :_reduce_441,
+ 4, 222, :_reduce_442,
+ 3, 223, :_reduce_443,
+ 0, 300, :_reduce_444,
+ 3, 300, :_reduce_445,
+ 1, 301, :_reduce_446,
+ 2, 301, :_reduce_447,
+ 3, 225, :_reduce_448,
+ 0, 303, :_reduce_449,
+ 3, 303, :_reduce_450,
+ 3, 224, :_reduce_451,
+ 3, 226, :_reduce_452,
+ 0, 304, :_reduce_453,
+ 3, 304, :_reduce_454,
+ 0, 305, :_reduce_455,
+ 3, 305, :_reduce_456,
+ 0, 297, :_reduce_457,
+ 2, 297, :_reduce_458,
+ 0, 298, :_reduce_459,
+ 2, 298, :_reduce_460,
+ 0, 299, :_reduce_461,
+ 2, 299, :_reduce_462,
+ 1, 302, :_reduce_463,
+ 2, 302, :_reduce_464,
+ 0, 307, :_reduce_465,
+ 4, 302, :_reduce_466,
+ 1, 306, :_reduce_467,
+ 1, 306, :_reduce_468,
+ 1, 306, :_reduce_469,
+ 1, 306, :_reduce_none,
+ 1, 203, :_reduce_471,
+ 3, 204, :_reduce_472,
+ 1, 294, :_reduce_473,
+ 2, 294, :_reduce_474,
+ 1, 206, :_reduce_475,
+ 1, 206, :_reduce_476,
+ 1, 206, :_reduce_477,
+ 1, 206, :_reduce_478,
+ 1, 195, :_reduce_479,
+ 1, 195, :_reduce_480,
+ 1, 195, :_reduce_481,
+ 1, 195, :_reduce_482,
+ 1, 195, :_reduce_483,
+ 1, 196, :_reduce_484,
+ 1, 196, :_reduce_485,
+ 1, 196, :_reduce_486,
+ 1, 196, :_reduce_487,
+ 1, 196, :_reduce_488,
+ 1, 196, :_reduce_489,
+ 1, 196, :_reduce_490,
+ 1, 227, :_reduce_491,
+ 1, 227, :_reduce_492,
+ 1, 164, :_reduce_493,
+ 1, 164, :_reduce_494,
+ 1, 168, :_reduce_495,
+ 1, 168, :_reduce_496,
+ 1, 238, :_reduce_497,
+ 0, 308, :_reduce_498,
+ 4, 238, :_reduce_499,
+ 2, 238, :_reduce_500,
+ 3, 241, :_reduce_501,
+ 0, 310, :_reduce_502,
+ 3, 241, :_reduce_503,
+ 4, 309, :_reduce_504,
+ 2, 309, :_reduce_505,
+ 2, 309, :_reduce_506,
+ 1, 309, :_reduce_507,
+ 2, 312, :_reduce_508,
+ 0, 312, :_reduce_509,
+ 6, 283, :_reduce_510,
+ 8, 283, :_reduce_511,
+ 4, 283, :_reduce_512,
+ 6, 283, :_reduce_513,
+ 4, 283, :_reduce_514,
+ 6, 283, :_reduce_515,
+ 2, 283, :_reduce_516,
+ 4, 283, :_reduce_517,
+ 6, 283, :_reduce_518,
+ 2, 283, :_reduce_519,
+ 4, 283, :_reduce_520,
+ 2, 283, :_reduce_521,
+ 4, 283, :_reduce_522,
+ 1, 283, :_reduce_523,
+ 0, 283, :_reduce_524,
+ 1, 278, :_reduce_525,
+ 1, 278, :_reduce_526,
+ 1, 278, :_reduce_527,
+ 1, 278, :_reduce_528,
+ 1, 261, :_reduce_none,
+ 1, 261, :_reduce_530,
+ 1, 314, :_reduce_531,
+ 3, 314, :_reduce_532,
+ 1, 271, :_reduce_533,
+ 3, 271, :_reduce_534,
+ 1, 315, :_reduce_535,
+ 2, 316, :_reduce_536,
+ 1, 316, :_reduce_537,
+ 2, 317, :_reduce_538,
+ 1, 317, :_reduce_539,
+ 1, 265, :_reduce_540,
+ 3, 265, :_reduce_541,
+ 1, 311, :_reduce_542,
+ 3, 311, :_reduce_543,
+ 1, 318, :_reduce_none,
+ 1, 318, :_reduce_none,
+ 2, 266, :_reduce_546,
+ 1, 266, :_reduce_547,
+ 3, 319, :_reduce_548,
+ 3, 320, :_reduce_549,
+ 1, 272, :_reduce_550,
+ 3, 272, :_reduce_551,
+ 1, 313, :_reduce_552,
+ 3, 313, :_reduce_553,
+ 1, 321, :_reduce_none,
+ 1, 321, :_reduce_none,
+ 2, 273, :_reduce_556,
+ 1, 273, :_reduce_557,
+ 1, 322, :_reduce_none,
+ 1, 322, :_reduce_none,
+ 2, 268, :_reduce_560,
+ 2, 267, :_reduce_561,
+ 0, 267, :_reduce_562,
+ 1, 242, :_reduce_none,
+ 3, 242, :_reduce_564,
+ 0, 228, :_reduce_565,
+ 2, 228, :_reduce_none,
+ 1, 213, :_reduce_567,
+ 3, 213, :_reduce_568,
+ 3, 323, :_reduce_569,
+ 2, 323, :_reduce_570,
+ 2, 323, :_reduce_571,
+ 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, 288, :_reduce_none,
+ 1, 288, :_reduce_none,
+ 1, 288, :_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_588,
+ 2, 167, :_reduce_589,
+ 0, 212, :_reduce_none,
+ 1, 212, :_reduce_none,
+ 1, 212, :_reduce_none,
+ 1, 239, :_reduce_593,
+ 1, 239, :_reduce_none,
+ 1, 149, :_reduce_none,
+ 2, 149, :_reduce_none,
+ 0, 210, :_reduce_597 ]
+
+racc_reduce_n = 598
+
+racc_shift_n = 1022
+
+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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "singleton",
+ "@5",
+ "@6",
+ "@7",
+ "@8",
+ "@9",
+ "@10",
+ "@11",
+ "@12",
+ "@13",
+ "@14",
+ "@15",
+ "@16",
+ "@17",
+ "@18",
+ "@19",
+ "@20",
+ "@21",
+ "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",
+ "@22",
+ "@23",
+ "f_args",
+ "do_block",
+ "@24",
+ "@25",
+ "@26",
+ "operation3",
+ "@27",
+ "@28",
+ "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",
+ "@29",
+ "@30",
+ "args_tail",
+ "@31",
+ "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
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_55(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ 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_internal(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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_304(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ 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)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ 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])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ 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)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_335(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+# reduce 336 omitted
+
+# reduce 337 omitted
+
+def _reduce_338(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 339 omitted
+
+# reduce 340 omitted
+
+# reduce 341 omitted
+
+def _reduce_342(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 343 omitted
+
+def _reduce_344(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 345 omitted
+
+# reduce 346 omitted
+
+def _reduce_347(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_349(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 351 omitted
+
+def _reduce_352(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2], val[3]))
+
+ result
+end
+
+def _reduce_353(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2], val[3])).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_354(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2]))
+
+ result
+end
+
+def _reduce_355(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_356(val, _values, result)
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_357(val, _values, result)
+ result = [ @builder.restarg(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_358(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+def _reduce_359(val, _values, result)
+ result = [ @builder.restarg(val[0]),
+ *val[2] ]
+
+ 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[1])
+
+ result
+end
+
+def _reduce_363(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_364(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_365(val, _values, result)
+ result = []
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_368(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+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)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 371 omitted
+
+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)
+ 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_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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ 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
+
+def _reduce_378(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_379(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 380 omitted
+
+def _reduce_381(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_382(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_383(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_384(val, _values, result)
+ result = @builder.args(val[0], [], val[0])
+
+ result
+end
+
+def _reduce_385(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 391 omitted
+
+def _reduce_392(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_393(val, _values, result)
+ result = @lexer.cmdarg.dup
+ @lexer.cmdarg.clear
+
+ result
+end
+
+def _reduce_394(val, _values, result)
+ @lexer.cmdarg = val[2]
+ @lexer.cmdarg.lexpop
+
+ result = [ val[1], val[3] ]
+
+ @static_env.unextend
+
+ result
+end
+
+def _reduce_395(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_396(val, _values, result)
+ result = @builder.args(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_401(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_402(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_403(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_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]
+ 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_406(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_407(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_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]
+ result = @builder.call_method(val[0], val[1], val[2],
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_410(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ 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[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[1]
+ result = @builder.keyword_cmd(:super, val[0],
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_414(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_415(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_416(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_417(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_418(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_419(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_421(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 422 omitted
+
+def _reduce_423(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_424(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 426 omitted
+
+# reduce 427 omitted
+
+def _reduce_428(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 429 omitted
+
+def _reduce_430(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 431 omitted
+
+# reduce 432 omitted
+
+# reduce 433 omitted
+
+# reduce 434 omitted
+
+def _reduce_435(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_437(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_438(val, _values, result)
+ result = @builder.string_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_439(val, _values, result)
+ result = @builder.string(val[0])
+
+ result
+end
+
+def _reduce_440(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_441(val, _values, result)
+ result = @builder.xstring_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_442(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_443(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ result = val[0] << val[1]
+
+ 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.word(val[1])
+
+ result
+end
+
+def _reduce_451(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ 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.string_internal(val[1])
+
+ result
+end
+
+def _reduce_455(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ result = val[0] << @builder.symbol_internal(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 = []
+
+ result
+end
+
+def _reduce_460(val, _values, result)
+ result = val[0] << 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 = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_464(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ @lexer.cond.push(false)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ @lexer.cond.lexpop
+ @lexer.cmdarg.lexpop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_467(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_469(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 470 omitted
+
+def _reduce_471(val, _values, result)
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_472(val, _values, result)
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_473(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_474(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_475(val, _values, result)
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_476(val, _values, result)
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_477(val, _values, result)
+ result = @builder.rational(val[0])
+
+ result
+end
+
+def _reduce_478(val, _values, result)
+ result = @builder.complex(val[0])
+
+ result
+end
+
+def _reduce_479(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_480(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_481(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_482(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_483(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_484(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_485(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_489(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_490(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_491(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_492(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_493(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_497(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_498(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_499(val, _values, result)
+ result = [ val[0], val[2] ]
+
+ result
+end
+
+def _reduce_500(val, _values, result)
+ yyerrok
+ result = nil
+
+ result
+end
+
+def _reduce_501(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_502(val, _values, result)
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_503(val, _values, result)
+ @context.in_kwarg = val[0]
+ result = @builder.args(nil, val[1], nil)
+
+ result
+end
+
+def _reduce_504(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_505(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_507(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_509(val, _values, result)
+ result = []
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_512(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ 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[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[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[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]
+
+ result
+end
+
+def _reduce_524(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_525(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_526(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_527(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_528(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 529 omitted
+
+def _reduce_530(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_531(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_532(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_533(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_534(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_535(val, _values, result)
+ check_kwarg_name(val[0])
+
+ @static_env.declare val[0][0]
+
+ result = 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 = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_539(val, _values, result)
+ result = @builder.kwarg(val[0])
+
+ 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.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_547(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ result
+end
+
+def _reduce_548(val, _values, result)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_549(val, _values, result)
+ result = @builder.optarg(val[0], val[1], 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
+
+def _reduce_552(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_553(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 554 omitted
+
+# reduce 555 omitted
+
+def _reduce_556(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_557(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 558 omitted
+
+# reduce 559 omitted
+
+def _reduce_560(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+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[1]
+
+ result
+end
+
+def _reduce_565(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 566 omitted
+
+def _reduce_567(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_568(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_569(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_570(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_571(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# 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
+
+# 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 Ruby21
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby22.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby22.rb
new file mode 100644
index 000000000..64158b9a9
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby22.rb
@@ -0,0 +1,6655 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-581,270,538,216,217,270,-100,-581,-581,-581,559,538,-98,-581,-581,219',
+'-581,270,-286,-105,617,582,-101,-99,-494,-581,617,240,115,-493,567,447',
+'-104,114,-97,580,-581,-581,-100,-581,-581,-581,-581,-581,-99,-102,538',
+'538,-91,-102,872,-83,115,216,217,616,220,114,-286,237,-69,616,528,239',
+'238,530,-581,-581,-581,-581,-581,-581,-581,-581,-581,-581,-581,-581',
+'-581,-581,-98,265,-581,-581,-581,-97,601,581,269,-93,-581,446,269,-581',
+'569,568,574,220,-581,-577,-581,579,-581,-581,269,-581,-581,-581,-581',
+'-581,-289,-581,-581,-581,-91,-91,558,-289,-289,-289,115,-89,-289,-289',
+'-289,114,-289,-581,-96,115,-581,-581,-90,-92,114,-581,-289,-289,-289',
+'115,-101,-95,-101,-88,114,-101,-289,-289,538,-289,-289,-289,-289,-289',
+'-91,-93,-100,-91,-93,871,831,-100,-99,-102,115,115,-91,-99,-102,114',
+'114,695,695,695,-101,491,-289,-289,-289,-289,-289,-289,-289,-289,-289',
+'-289,-289,-289,-289,-289,216,217,-289,-289,-289,-93,753,-289,-93,751',
+'-289,750,-103,-289,-289,489,-289,-93,-289,617,-289,444,-289,-289,841',
+'-289,-289,-289,-289,-289,550,-289,-479,-289,551,216,217,216,217,-479',
+'-479,-479,-263,617,-479,-479,-479,-289,-479,-577,-289,-289,-289,-289',
+'616,-289,-479,-289,-479,-479,-479,445,-103,270,516,-102,499,-100,-479',
+'-479,-68,-479,-479,-479,-479,-479,115,-578,616,823,-99,114,567,818,786',
+'115,115,115,-486,262,114,114,114,-92,220,-486,263,259,-479,-479,-479',
+'-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,567,840,-479',
+'-479,-479,-105,-479,-479,-104,-94,-479,216,217,-479,-479,265,-479,220',
+'-479,115,-479,220,-479,-479,114,-479,-479,-479,-479,-479,-484,-479,-482',
+'-479,569,568,570,-484,269,-482,-482,-482,-487,755,-482,-482,-482,-479',
+'-482,-487,-479,-479,-479,-479,220,-479,-482,-479,-482,-482,-482,-415',
+'-479,554,569,568,565,502,-482,-482,923,-482,-482,-482,-482,-482,-490',
+'503,672,555,669,668,667,-490,670,786,672,544,669,668,667,115,670,93',
+'94,478,114,516,-482,-482,-482,-482,-482,-482,-482,-482,-482,-482,-482',
+'-482,-482,-482,567,-415,-482,-482,-482,510,-482,-482,-415,478,-482,93',
+'94,-482,-482,567,-482,-415,-482,400,-482,567,-482,-482,-581,-482,-482',
+'-482,-482,-482,-289,-482,-95,-482,274,-488,-415,-289,-289,-289,115,-104',
+'-488,-289,-289,114,-289,-482,890,115,-482,-482,-482,-482,114,-482,987',
+'-482,-581,95,96,-290,-482,843,569,568,-289,-289,-290,-289,-289,-289',
+'-289,-289,727,798,-581,-290,214,569,568,583,567,-581,595,569,568,-489',
+'-577,95,96,846,-581,848,-489,729,-289,-289,-289,-289,-289,-289,-289',
+'-289,-289,-289,-289,-289,-289,-289,-581,-581,-289,-289,-289,596,600',
+'-581,220,850,-289,972,-577,-289,567,-96,-581,567,-289,852,-289,-91,-289',
+'-289,-105,-289,-289,-289,-289,-289,-100,-289,-581,-289,220,-581,569',
+'568,578,-581,-581,-581,81,854,-581,-581,-581,-289,-581,-482,-289,-289',
+'-93,-94,82,-289,-482,-581,-581,-581,-581,-102,-103,528,83,-575,530,855',
+'-581,-581,518,-581,-581,-581,-581,-581,387,519,569,568,565,569,568,572',
+'-479,528,443,858,530,220,672,-479,669,668,667,632,670,860,-581,-581',
+'-581,-581,-581,-581,-581,-581,-581,-581,-581,-581,-581,-581,861,677',
+'-581,-581,-581,-482,752,-581,216,217,-581,680,-482,-581,-581,807,-581',
+'-575,-581,647,-581,-482,-581,-581,810,-581,-581,-581,-581,-581,-333',
+'-581,-581,-581,262,737,528,-333,240,527,-575,263,736,-493,688,687,-333',
+'-581,863,681,-581,-581,-581,-581,-485,-581,265,-581,818,786,-261,-485',
+'-101,292,74,75,71,9,57,867,237,115,63,64,239,238,114,67,869,65,66,68',
+'30,31,72,73,-262,-574,220,-90,-88,29,28,27,103,102,104,105,-99,-97,19',
+'513,-494,688,687,605,8,45,294,10,107,106,108,97,56,99,98,100,731,101',
+'109,110,730,93,94,42,43,41,240,244,249,250,251,246,248,256,257,252,253',
+'-479,233,234,726,716,254,255,-479,40,888,-89,33,-574,220,58,59,-479',
+'892,60,-98,35,237,517,243,44,239,238,677,235,236,247,245,241,20,242',
+'-574,894,680,91,81,84,85,212,86,88,87,89,240,220,213,698,82,90,319,258',
+'544,-238,220,211,62,900,83,95,96,292,74,75,71,9,57,688,687,554,63,64',
+'681,691,903,67,923,65,66,68,30,31,72,73,220,555,907,-264,318,29,28,27',
+'103,102,104,105,397,531,19,655,653,399,398,590,8,45,294,10,107,106,108',
+'97,56,99,98,100,652,101,109,110,917,93,94,42,43,41,240,244,249,250,251',
+'246,248,256,257,252,253,-289,233,234,-279,532,254,255,-289,40,924,-279',
+'33,-578,925,58,59,-289,989,60,-279,35,237,259,243,44,239,238,491,235',
+'236,247,245,241,20,242,936,798,938,91,81,84,85,508,86,88,87,89,940,942',
+'509,944,82,90,944,258,220,647,950,507,62,521,83,95,96,5,74,75,71,9,57',
+'953,954,441,63,64,959,716,798,67,442,65,66,68,30,31,72,73,962,443,964',
+'966,968,29,28,27,103,102,104,105,721,722,19,968,723,109,110,605,8,45',
+'7,10,107,106,108,97,56,99,98,100,220,101,109,110,544,93,94,42,43,41',
+'240,244,249,250,251,246,248,256,257,252,253,-289,233,234,-492,636,254',
+'255,-289,40,-83,-492,33,-578,979,58,59,-289,220,60,-492,35,237,215,243',
+'44,239,238,389,235,236,247,245,241,20,242,548,220,220,91,81,84,85,-491',
+'86,88,87,89,240,240,-491,989,82,90,240,258,210,209,240,-491,62,549,83',
+'95,96,292,74,75,71,9,57,607,-578,554,63,64,-577,652,208,67,553,65,66',
+'68,30,31,72,73,604,555,265,594,1004,29,28,27,103,102,104,105,1005,920',
+'19,669,668,667,1006,670,8,45,294,10,107,106,108,97,56,99,98,100,944',
+'101,109,110,944,93,94,42,43,41,240,244,249,250,251,246,248,256,257,252',
+'253,-290,233,234,-290,944,254,255,-290,40,1011,-290,296,593,989,58,59',
+'-290,220,60,-290,35,237,1014,243,44,239,238,1015,235,236,247,245,241',
+'20,242,1016,968,968,91,81,84,85,-491,86,88,87,89,968,220,-491,123,82',
+'90,589,258,-261,587,989,-491,62,584,83,95,96,292,74,75,71,9,57,111,944',
+'-492,63,64,240,487,786,67,-492,65,66,68,30,31,72,73,220,-492,647,795',
+'798,29,28,27,103,102,104,105,799,920,19,669,668,667,801,670,8,45,294',
+'10,107,106,108,97,56,99,98,100,803,101,109,110,805,93,94,42,43,41,240',
+'244,249,250,251,246,248,256,257,252,253,-289,233,234,977,265,254,255',
+'-289,40,478,978,33,-578,813,58,59,-289,814,60,976,35,237,815,243,44',
+'239,238,786,235,236,247,245,241,20,242,822,265,220,91,81,84,85,-279',
+'86,88,87,89,968,489,-279,220,82,90,647,258,219,491,779,-279,62,220,83',
+'95,96,292,74,75,71,9,57,,,546,63,64,,,,67,547,65,66,68,30,31,72,73,',
+'545,,,,29,28,27,103,102,104,105,,,19,118,119,120,121,122,8,45,294,10',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,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,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83,95,96,292,74,75,71,9,57,,',
+',63,64,,,,67,,65,66,68,30,31,72,73,118,119,120,121,122,29,28,27,103',
+'102,104,105,,,19,118,119,120,121,122,8,45,294,10,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88,87,89,,,,',
+'82,90,,258,,,,,62,,83,95,96,292,74,75,71,9,57,,,,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,294,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,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,,,,91,81,84,85,',
+'86,88,87,89,,,,,82,90,,258,,,,,62,,83,95,96,292,74,75,71,9,57,,,,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,',
+',,,8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,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',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83,95,96,292,74,75',
+'71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83',
+'95,96,292,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,294,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+'220,258,,,,,62,,83,95,96,292,74,75,71,9,57,,,,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,294,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,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,,,,91,81,84,85,',
+'86,88,87,89,,,,,82,90,,258,,,,,62,,83,95,96,292,74,75,71,9,57,,,,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,',
+',,,8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,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',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83,95,96,292,74,75',
+'71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83',
+'95,96,292,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,294,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',258,,,,,62,,83,95,96,292,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,294,10,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,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,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,258,,,,,62,,83,95,96,5,74,75,71,9,57,,,,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,7',
+'10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,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,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,258,,,,,62,,83,95,96,292,74,75,71,9,57',
+',,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+'672,19,669,668,667,,670,8,45,294,10,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,672,,669,668,667,,670,,807,,672,,669,668,667',
+',670,949,,40,,,33,,,58,59,,240,60,,35,,,,44,,807,,,,,,,20,,810,807,',
+'91,81,84,85,,86,88,87,89,,,237,,82,90,239,238,,235,236,,62,,83,95,96',
+'292,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,19,,,240,,,8,45,294,10,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,240,-600,-600,-600,-600,246,248,237,,-600',
+'-600,239,238,,235,236,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44',
+'239,238,,235,236,247,245,241,20,242,,,,91,81,84,85,,86,88,87,89,,,,',
+'82,90,,672,,669,668,667,62,670,83,95,96,292,74,75,71,9,57,,,,63,64,',
+',,67,,65,66,68,30,31,72,73,,,,,807,29,28,27,103,102,104,105,,672,19',
+'669,668,667,,670,8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,240,-600,-600,-600,-600,246,248,,807,-600,-600,,,,,',
+'254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245',
+'241,20,242,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,672,,669,668,667,62',
+'670,83,95,96,292,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73',
+',,,,807,29,28,27,103,102,104,105,,,19,,,,,,8,45,294,10,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,240,244,249,250,251,246,248',
+'256,257,252,253,,-600,-600,,,254,255,,40,,,33,,,58,59,,,60,,35,237,',
+'243,44,239,238,,235,236,247,245,241,20,242,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,672,,669,668,667,62,670,83,95,96,292,74,75,71,9,57,,,',
+'63,64,,,,67,,65,66,68,30,31,72,73,,,,,807,29,28,27,103,102,104,105,',
+',19,,,,,,8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,240,-600,-600,-600,-600,246,248,,,-600,-600,,,,,,254,255,,40',
+',,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,292,74,75,71',
+'9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,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,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,292,74',
+'75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,19,,,,,,8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,240,244,249,250,251,246,248,256,257,252,253,,-600,-600',
+',,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247',
+'245,241,20,242,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95',
+'96,292,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28',
+'27,103,102,104,105,,,19,,,,,,8,45,294,10,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,240,,,,,,,,,,,,,,,,254,255,,40,,,33,,,58',
+'59,,,60,,35,237,,243,44,239,238,,235,236,,,241,20,242,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,292,74,75,71,9,57,,,,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,',
+'8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+'240,-600,-600,-600,-600,246,248,,,-600,-600,,,,,,254,255,,40,,,33,,',
+'58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,5,74,75,71,9,57,',
+',,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,',
+'19,,,,,,8,45,7,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,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,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,292,74,75,71,9,57',
+',,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',19,,,,,,8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,240,,,,,,,,,,,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243',
+'44,239,238,,235,236,,,241,20,242,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,,,,62,,83,95,96,292,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,294,10,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,240,,,,,,,,,,,,,,,',
+'254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,,,241',
+'20,242,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,292',
+'74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,19,,,,,,8,45,294,10,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,240,,,,,,,,,,,,,,,,254,255,,40,,,33,,,58,59,,,60',
+',35,237,,243,44,239,238,,235,236,,,241,20,242,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,,,,62,,83,95,96,292,74,75,71,9,57,,,,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,294',
+'10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,240,-600',
+'-600,-600,-600,246,248,,,-600,-600,,,,,,254,255,,40,,,33,,,58,59,,,60',
+',35,237,,243,44,239,238,,235,236,247,245,241,20,242,,,,91,81,84,85,',
+'86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,240,-600,-600,-600',
+'-600,246,248,,,-600,-600,,,,,,254,255,,225,,,231,,,58,59,,,60,,,237',
+',243,44,239,238,,235,236,247,245,241,230,242,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,286,101,109,110,,93,94,42,43,41,240,,,,,,,,,,,,,,,,254',
+'255,,225,,,231,,,58,59,,,60,,283,237,281,243,44,239,238,287,235,236',
+',,,230,,,,,91,284,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,240,,,,,,,,,,,,,,,,254,255,,225,,,231,,,58,59,,,60,,,237,,',
+'44,239,238,,235,236,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,',
+',74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307',
+'308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,240,,,,,,,,,,,,,,,,254,255,,225,,,231,',
+',58,59,,,60,,,237,,243,44,239,238,,235,236,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56',
+'99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,405,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,',
+',82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73',
+',,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59',
+',,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,220,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,',
+',107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,',
+',,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,',
+',,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58',
+'59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,',
+',,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102',
+'104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311',
+'312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312',
+'72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72',
+'73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,',
+',,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58',
+'59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307',
+'308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,',
+'60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308',
+'314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,',
+',,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102',
+'104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311',
+'312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312',
+'72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72',
+'73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,',
+',29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100',
+'286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59',
+',,60,,283,,281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86,88,87,89,,,,',
+'82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,',
+',,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98',
+'100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58',
+'59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86,88,87,89,',
+',,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73',
+',,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86,88,87',
+'89,,,,,82,90,220,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311',
+'312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,405,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311',
+'312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,309,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,,,315,,,,,,,,,,,,,,,,,,,,305',
+',,301,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,',
+',,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58',
+'59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307',
+'308,314,103,102,104,105,,,232,,,,,,,309,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,58,59,,,60',
+',,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103',
+'102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,',
+',,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,74,75,71,9,57,,,',
+'63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19',
+',,,,,8,45,,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,115,,,,,114,62,,83,95,96,74,75,71,9,57,,,,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,',
+',,,8,45,7,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,',
+',,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,',
+',91,284,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,',
+',,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,',
+',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,',
+',309,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,315,,,,,,,',
+',,,,,,,,,,,,931,,,231,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,309,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,,,315,,,,,,,,,,,,,,,,,,',
+',857,,,231,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56',
+'99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,309,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,,,315,,,,,,,,,,,,,,,,,,',
+',305,,,301,,,58,59,,,60,,300,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312',
+'72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,309,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,,,315,,,,,,,,,,,,,,,,,,,,305,,,231',
+',,58,59,,,60,,,672,,669,668,667,677,670,,,,,,,,,680,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,317,,675,62,,83,95,96,74,75,71,,57,688,687,,63',
+'64,681,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105',
+',,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,286,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,281,,44,,,287,,,',
+',,230,,,,,91,284,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,629,,,,44,,,,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,',
+'232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,',
+',,,,,,,225,,,231,,,58,59,,,60,,283,,,,44,,,287,,,,,,230,,,,,91,284,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,',
+',,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,287,,,,,,230,,,,,91,284',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,',
+',29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,',
+'60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75',
+'71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314',
+'103,102,104,105,,,232,,,,,,,309,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,,,315,,,,,,,,,,,,,,,,,,,,349,,,33,,,58,59,,,60,,35,,,,,,',
+',,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104',
+'105,,,232,,,,,,,309,,,107,106,108,354,56,99,98,355,,101,109,110,,93',
+'94,,,315,,,,,,,,,,,,,,,,,361,,,356,,,231,,,58,59,,,60,,,,,,,,,,,,,,',
+',,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,',
+'232,,,,,,,309,,,107,106,108,354,56,99,98,355,,101,109,110,,93,94,,,315',
+',,,,,,,,,,,,,,,,,,,356,,,231,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,309',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,315,,,,,,,,,,,,',
+',,,,,,,857,,,231,,,58,59,,,60,,,672,,669,668,667,677,670,,,,,,,,,680',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,675,62,,83,95,96,74,75,71,9',
+'57,688,687,,63,64,681,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,19,,,,,,8,45,7,10,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,',
+',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,389,62,,83,95,96',
+'74,75,71,,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,',
+',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105',
+',,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,,,,62,,83,95,96,74,75,71,9,57,,,,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311',
+'312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312',
+'72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56',
+'99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,405,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,',
+',82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73',
+',,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59',
+',,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308',
+'314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,286',
+'101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60',
+',,,,,44,,,287,,,,,,230,,,,,91,284,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308',
+'314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,286',
+'101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60',
+',629,,,,44,,,287,,,,,,230,,,,,91,284,84,85,,86,88,87,89,,,,,82,90,,',
+',74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28',
+'27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,',
+',,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102',
+'104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104',
+'105,,,232,,,,,,,309,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+',,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,309,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,,,315,,,,,,,,,,,,,,,,,,',
+',305,,,301,,,58,59,,,60,,,672,,669,668,667,677,670,,,,,,,,,680,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,,,675,62,,83,95,96,74,75,71,9,57,688',
+'687,,63,64,681,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,294,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,',
+',,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,389,62,,83,95,96',
+'74,75,71,,57,,,,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102',
+'104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,286,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,281,,44',
+',,287,,,,,,230,,,,,91,284,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103',
+'102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,286,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,629,',
+'281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308',
+'314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,',
+',,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102',
+'104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,',
+',,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',232,,,,,,,45,,,107,106,108,97,56,99,98,100,286,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287',
+',,,,,230,,,,,91,284,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105',
+',,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,',
+',,,,309,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,315,,,,',
+',,,,,,,,,,,,,,,305,,,231,,,58,59,,,60,,,672,,669,668,667,677,670,,,',
+',,,,,680,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,505,,675,62,,83,95,96',
+'74,75,71,,57,688,687,,63,64,681,,,67,,65,66,68,311,312,72,73,,,,,,307',
+'308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,',
+'60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44',
+',,,,,,,,230,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,232,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,',
+',,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,',
+',,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311,312',
+'72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,,,281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,311',
+'312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,',
+',,,225,,,231,,,58,59,,,60,,629,,281,,44,,,287,,,,,,230,,,,,91,284,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,734,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,309,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,,,315,,,,,,,,,,,,,,,,,,',
+',305,,,301,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97,56',
+'99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231',
+',,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,232,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,286,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,225',
+',,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,91,284,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,,,58,59,,,60,,283,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'311,312,72,73,,,,,,307,308,314,103,102,104,105,,,232,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,225,,,231,521,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,,-280,,62,,83,95,96,-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,-583,-280,,-280,,,,-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,-583,-583,,,,,,,,,,,,,,-583,,,-583,-583,-583,-583,-582',
+'-583,,-583,,,,-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,672,,669,668,667,677',
+'670,,,,,,,-582,,680,-582,-582,-582,-582,-296,-582,,-582,,,,-296,-296',
+'-296,,,-296,-296,-296,,-296,675,,,,,,,,,-296,-296,688,687,,,,681,,,-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,,274,-296,,,-296,-296,,-296,,-296,,-296,,-296,-296,,-296,-296',
+'-296,-296,-296,,-296,-414,-296,,,,,,-414,-414,-414,,,-414,-414,-414',
+'-296,-414,,-296,-296,,-296,,-296,,-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',
+',265,-414,,,-414,-414,,-414,,-414,,-414,,-414,-414,,-414,-414,-414,-414',
+'-414,,-414,-414,-414,,,,,,,,,,,,,,-414,,-244,-414,-414,,-414,,-414,-244',
+'-244,-244,,,-244,-244,-244,,-244,,,,,,,,,-244,-244,-244,,,,,,,,,-244',
+'-244,,-244,-244,-244,-244,-244,,,,,,,,,,,,,,,,,,,,,,,-244,-244,-244',
+'-244,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244,,,-244,-244,-244',
+',,-244,,265,-244,,,-244,-244,,-244,,-244,,-244,,-244,-244,,-244,-244',
+'-244,-244,-244,,-244,-244,-244,,,,,,,,,,,,,,-244,,-244,-244,-244,,-244',
+',-244,-244,-244,-244,,,-244,-244,-244,672,-244,669,668,667,677,670,',
+',,-244,-244,,,,680,,,,,,-244,-244,,-244,-244,-244,-244,-244,,,,,,,,672',
+'675,669,668,667,677,670,,,,685,684,688,687,,680,,681,,672,,669,668,667',
+'677,670,-244,,,,,,,-244,680,,,675,265,-244,,,,220,,,685,684,688,687',
+',,,681,,,675,,,,,-244,-244,,,685,684,688,687,,,,681,,,,-244,,,-244,',
+',,,-244,175,186,176,199,172,192,182,181,202,203,197,180,179,174,200',
+'204,205,184,173,187,191,193,185,178,,,,194,201,196,195,188,198,183,171',
+'190,189,,,,,,170,177,168,169,165,166,167,126,128,,,127,,,,,,,,159,160',
+',156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,,,,,',
+',,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136,,,164,91',
+',,,,,,,,,,,,,90,175,186,176,199,172,192,182,181,202,203,197,180,179',
+'174,200,204,205,184,173,187,191,193,185,178,,,,194,201,196,195,188,198',
+'183,171,190,189,,,,,,170,177,168,169,165,166,167,126,128,125,,127,,',
+',,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149',
+',,,,,,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136',
+',,164,91,,,,,,,,,,,,,,90,175,186,176,199,172,192,182,181,202,203,197',
+'180,179,174,200,204,205,184,173,187,191,193,185,178,,,,194,201,196,195',
+'188,198,183,171,190,189,,,,,,170,177,168,169,165,166,167,126,128,,,127',
+',,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148',
+'149,,,,,,,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157',
+'136,,,164,91,,,,,,,,,,,,,,90,175,186,176,199,172,192,182,181,202,203',
+'197,180,179,174,200,204,205,184,173,187,191,193,185,178,,,,194,201,196',
+'195,188,198,183,171,190,189,,,,,,170,177,168,169,165,166,167,126,128',
+',,127,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162',
+'148,149,,,,,,,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135',
+'157,136,,,164,91,,,,,,,,,,,,,,90,175,186,176,199,172,192,182,181,202',
+'203,197,180,179,174,200,204,205,184,173,187,191,193,185,178,,,,194,201',
+'196,195,188,198,183,171,190,189,,,,,,170,177,168,169,165,166,167,126',
+'128,,,127,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161',
+'162,148,149,,,,,,,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143',
+'135,157,136,,,164,175,186,176,199,172,192,182,181,202,203,197,180,179',
+'174,200,204,205,184,173,187,191,193,185,178,,,,194,201,196,372,371,373',
+'370,171,190,189,,,,,,170,177,168,169,367,368,369,365,128,99,98,366,',
+'101,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148',
+'149,,,,,,377,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135',
+'157,136,640,418,164,,641,,,,,,,,159,160,,156,138,139,140,147,144,146',
+',,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154',
+'163,150,151,145,143,135,157,136,476,418,164,,477,,,,,,,,159,160,,156',
+'138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153',
+'152,,137,158,155,154,163,150,151,145,143,135,157,136,1002,425,164,,1003',
+',,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148',
+'149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135',
+'157,136,1000,418,164,,1001,,,,,,,,159,160,,156,138,139,140,147,144,146',
+',,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154',
+'163,150,151,145,143,135,157,136,608,418,164,,609,,,,,,,,159,160,,156',
+'138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,265,,,,,,',
+',153,152,,137,158,155,154,163,150,151,145,143,135,157,136,610,425,164',
+',611,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162',
+'148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143',
+'135,157,136,974,425,164,,973,,,,,,,,159,160,,156,138,139,140,147,144',
+'146,,,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155',
+'154,163,150,151,145,143,135,157,136,643,425,164,,644,,,,,,,,159,160',
+',156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,265,',
+',,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136,608,418',
+'164,,609,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161',
+'162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163,150,151,145',
+'143,135,157,136,610,425,164,,611,,,,,,,,159,160,,156,138,139,140,147',
+'144,146,,,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158',
+'155,154,163,150,151,145,143,135,157,136,701,418,164,,702,,,,,,,,159',
+'160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,265',
+',,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136,703',
+'425,164,,704,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,',
+',,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163,150,151',
+'145,143,135,157,136,706,425,164,,707,,,,,,,,159,160,,156,138,139,140',
+'147,144,146,,,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137',
+'158,155,154,163,150,151,145,143,135,157,136,476,418,164,,477,,,,,,,',
+'159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,',
+',,,265,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136',
+'414,418,164,,415,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142',
+',,,161,162,148,149,,,,,,265,,,,,,,,153,152,,137,158,155,154,163,150',
+'151,145,143,135,157,136,421,425,164,,420,,,,,,,,159,160,,156,138,139',
+'140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,265,,,,,,,,153,152',
+',137,158,155,154,163,150,151,145,143,135,157,136,,672,164,669,668,667',
+'677,670,,672,,669,668,667,677,670,680,,,,,,,,680,,672,,669,668,667,677',
+'670,,,,,,675,,,680,,,,,675,685,684,688,687,,,,681,685,684,688,687,,',
+',681,675,,672,,669,668,667,677,670,685,684,688,687,,,,681,680,,672,',
+'669,668,667,677,670,672,,669,668,667,677,670,,680,,,,,675,,680,,,,,',
+',685,684,688,687,,,,681,675,,,,,,,675,,685,684,688,687,,,,681,,688,687',
+',,672,681,669,668,667,677,670,672,,669,668,667,677,670,672,680,669,668',
+'667,677,670,672,680,669,668,667,677,670,,680,,,,,,,680,675,,,,,,,675',
+',,,688,687,,675,,681,,688,687,,675,,681,,688,687,,,,681,,688,687,,,672',
+'681,669,668,667,677,670,,672,,669,668,667,677,670,680,,,,,,,,680,,672',
+',669,668,667,677,670,,,,,,675,,,680,,,,,675,685,684,688,687,,,,681,685',
+'684,688,687,,,,681,675,658,,,,,,,,685,684,688,687,,,,681' ]
+ racc_action_table = arr = ::Array.new(25046, 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 = [
+'421,620,340,438,438,61,701,421,421,421,360,866,347,421,421,19,421,310',
+'58,350,483,385,1002,825,224,421,482,450,834,223,382,228,548,834,346',
+'384,421,421,1000,421,421,421,421,421,1021,1001,893,339,640,702,793,635',
+'343,338,338,483,19,343,58,450,635,482,331,450,450,331,421,421,421,421',
+'421,421,421,421,421,421,421,421,421,421,224,310,421,421,421,223,421',
+'385,620,641,421,227,61,421,382,382,382,438,421,1002,421,384,421,421',
+'310,421,421,421,421,421,611,421,421,421,640,701,360,611,611,611,340',
+'347,611,611,611,340,611,421,350,866,421,421,825,421,866,421,611,611',
+'611,360,1002,548,421,346,360,1002,611,611,699,611,611,611,611,611,640',
+'641,1000,640,702,793,714,1000,1021,1001,893,339,640,1021,1001,893,339',
+'540,541,826,703,628,611,611,611,611,611,611,611,611,611,611,611,611',
+'611,611,650,650,611,611,611,641,611,611,641,609,611,608,704,611,611',
+'626,611,641,611,474,611,225,611,611,754,611,611,611,611,611,356,611',
+'97,611,356,564,564,560,560,97,97,97,733,621,97,97,97,611,97,703,611',
+'611,611,611,474,611,97,611,97,97,97,226,611,26,444,609,294,608,97,97',
+'295,97,97,97,97,97,699,704,621,699,754,699,380,990,990,540,541,826,373',
+'375,540,541,826,703,650,373,375,619,97,97,97,97,97,97,97,97,97,97,97',
+'97,97,97,379,738,97,97,97,226,97,97,444,704,97,524,524,97,97,26,97,564',
+'97,560,97,297,97,97,560,97,97,97,97,97,371,97,100,97,380,380,380,371',
+'26,100,100,100,370,614,100,100,100,97,100,370,97,97,97,97,612,97,100',
+'97,100,100,100,781,97,922,379,379,379,298,100,100,922,100,100,100,100',
+'100,369,299,810,922,810,810,810,369,810,898,949,898,949,949,949,3,949',
+'315,315,602,3,319,100,100,100,100,100,100,100,100,100,100,100,100,100',
+'100,575,781,100,100,100,305,100,100,781,597,100,41,41,100,100,386,100',
+'781,100,206,100,577,100,100,706,100,100,100,100,100,420,100,319,100',
+'308,368,781,420,420,420,290,319,368,420,420,290,420,100,810,559,100',
+'100,100,100,559,100,949,100,643,315,315,551,100,756,575,575,420,420',
+'551,420,420,420,420,420,575,757,706,551,15,386,386,386,383,706,414,577',
+'577,367,706,41,41,759,706,760,367,577,420,420,420,420,420,420,420,420',
+'420,420,420,420,420,420,643,706,420,420,420,415,420,643,918,761,420',
+'918,643,420,493,15,643,381,420,763,420,414,420,420,15,420,420,420,420',
+'420,414,420,610,420,764,643,383,383,383,610,610,610,79,765,610,610,610',
+'420,610,366,420,420,415,420,79,420,366,610,610,610,610,415,420,334,79',
+'355,334,766,610,610,321,610,610,610,610,610,111,321,493,493,493,381',
+'381,381,365,656,321,770,656,309,807,365,807,807,807,493,807,774,610',
+'610,610,610,610,610,610,610,610,610,610,610,610,610,775,795,610,610',
+'610,355,610,610,17,17,610,795,355,610,610,807,610,355,610,780,610,355',
+'610,610,807,610,610,610,610,610,46,610,610,610,24,592,330,46,451,330',
+'355,24,591,38,795,795,46,610,784,795,610,610,610,610,372,610,314,610',
+'690,690,787,372,610,820,820,820,820,820,820,788,451,829,820,820,451',
+'451,829,820,791,820,820,820,820,820,820,820,588,354,794,591,38,820,820',
+'820,820,820,820,820,591,38,820,316,39,798,798,433,820,820,820,820,820',
+'820,820,820,820,820,820,820,582,820,820,820,580,820,820,820,820,820',
+'433,433,433,433,433,433,433,433,433,433,433,354,433,433,572,562,433',
+'433,354,820,809,39,820,354,811,820,820,354,816,820,39,820,433,320,433',
+'820,433,433,843,433,433,433,433,433,820,433,354,819,843,820,820,820',
+'820,14,820,820,820,820,323,45,14,543,820,820,40,433,542,433,328,14,820',
+'828,820,820,820,618,618,618,618,618,618,843,843,856,618,618,843,537',
+'832,618,856,618,618,618,618,618,618,618,833,856,836,837,37,618,618,618',
+'618,618,618,618,125,332,618,525,523,125,125,409,618,618,618,618,618',
+'618,618,618,618,618,618,618,522,618,618,618,853,618,618,618,618,618',
+'409,409,409,409,409,409,409,409,409,409,409,707,409,409,306,333,409',
+'409,707,618,857,306,618,707,859,618,618,707,1023,618,306,618,409,22',
+'409,618,409,409,335,409,409,409,409,409,618,409,873,874,878,618,618',
+'618,618,304,618,618,618,618,879,881,304,882,618,618,884,409,887,514',
+'889,304,618,511,618,618,618,499,499,499,499,499,499,895,896,222,499',
+'499,902,906,908,499,222,499,499,499,499,499,499,499,911,222,912,913',
+'914,499,499,499,499,499,499,499,568,568,499,916,568,568,568,613,499',
+'499,499,499,499,499,499,499,499,499,499,499,506,499,499,499,344,499',
+'499,499,499,499,613,613,613,613,613,613,613,613,613,613,613,644,613',
+'613,303,504,613,613,644,499,501,303,499,644,931,499,499,644,500,499',
+'303,499,613,16,613,499,613,613,345,613,613,613,613,613,499,613,349,484',
+'480,499,499,499,499,302,499,499,499,499,455,454,302,951,499,499,453',
+'613,13,12,452,302,499,351,499,499,499,301,301,301,301,301,301,440,973',
+'358,301,301,974,975,10,301,358,301,301,301,301,301,301,301,430,358,422',
+'413,980,301,301,301,301,301,301,301,981,972,301,972,972,972,982,972',
+'301,301,301,301,301,301,301,301,301,301,301,301,983,301,301,301,984',
+'301,301,301,301,301,747,747,747,747,747,747,747,747,747,747,747,510',
+'747,747,979,985,747,747,510,301,986,979,301,412,988,301,301,510,410',
+'301,979,301,747,991,747,301,747,747,992,747,747,747,747,747,301,747',
+'993,994,995,301,301,301,301,928,301,301,301,301,996,999,928,7,301,301',
+'406,747,404,401,1012,928,301,395,301,301,301,863,863,863,863,863,863',
+'1,1022,929,863,863,649,278,651,863,929,863,863,863,863,863,863,863,654',
+'929,646,660,661,863,863,863,863,863,863,863,663,854,863,854,854,854',
+'664,854,863,863,863,863,863,863,863,863,863,863,863,863,665,863,863',
+'863,674,863,863,863,863,863,839,839,839,839,839,839,839,839,839,839',
+'839,1003,839,839,930,645,839,839,1003,863,264,930,863,1003,682,863,863',
+'1003,686,863,930,863,839,689,839,863,839,839,692,839,839,839,839,839',
+'863,839,697,642,700,863,863,863,863,932,863,863,863,863,1024,279,932',
+'639,863,863,637,839,232,282,634,932,863,709,863,863,863,536,536,536',
+'536,536,536,,,348,536,536,,,,536,348,536,536,536,536,536,536,536,,348',
+',,,536,536,536,536,536,536,536,,,536,498,498,498,498,498,536,536,536',
+'536,536,536,536,536,536,536,536,536,,536,536,536,,536,536,536,536,536',
+'742,742,742,742,742,742,742,742,742,742,742,,742,742,,,742,742,,536',
+',,536,,,536,536,,,536,,536,742,,742,536,742,742,,742,742,742,742,742',
+'536,742,,,,536,536,536,536,,536,536,536,536,,,,,536,536,,742,,,,,536',
+',536,536,536,539,539,539,539,539,539,,,,539,539,,,,539,,539,539,539',
+'539,539,539,539,293,293,293,293,293,539,539,539,539,539,539,539,,,539',
+'6,6,6,6,6,539,539,539,539,539,539,539,539,539,539,539,539,,539,539,539',
+',539,539,539,539,539,428,428,428,428,428,428,428,428,428,428,428,,428',
+'428,,,428,428,,539,,,539,,,539,539,,,539,,539,428,,428,539,428,428,',
+'428,428,428,428,428,539,428,,,,539,539,539,539,,539,539,539,539,,,,',
+'539,539,,428,,,,,539,,539,539,539,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,749,749,749,749,749,749,749,749,749,749,749',
+',749,749,,,749,749,,326,,,326,,,326,326,,,326,,326,749,,749,326,749',
+'749,,749,749,749,749,749,326,749,,,,326,326,326,326,,326,326,326,326',
+',,,,326,326,,749,,,,,326,,326,326,326,33,33,33,33,33,33,,,,33,33,,,',
+'33,,33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,33,33,33',
+'33,33,33,33,33,33,33,33,33,,33,33,33,,33,33,33,33,33,648,648,648,648',
+'648,648,648,648,648,648,648,,648,648,,,648,648,,33,,,33,,,33,33,,,33',
+',33,648,,648,33,648,648,,648,648,648,648,648,33,648,,,,33,33,33,33,',
+'33,33,33,33,,,,,33,33,,648,,,,,33,,33,33,33,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,276,276,276,276,276,276,276,276,276',
+'276,276,,276,276,,,276,276,,296,,,296,,,296,296,,,296,,296,276,,276',
+'296,276,276,,276,276,276,276,276,296,276,,,,296,296,296,296,,296,296',
+'296,296,,,,,296,296,,276,,,,,296,,296,296,296,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,473,473,473,473,473,473,473,473,473',
+'473,473,,473,473,,,473,473,,725,,,725,,,725,725,,,725,,725,473,,473',
+'725,473,473,,473,473,473,473,473,725,473,,,,725,725,725,725,,725,725',
+'725,725,,,,,725,725,473,473,,,,,725,,725,725,725,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,21,21,21,21,21,21,21,21,21,21',
+'21,,21,21,,,21,21,,715,,,715,,,715,715,,,715,,715,21,,21,715,21,21,',
+'21,21,21,21,21,715,21,,,,715,715,715,715,,715,715,715,715,,,,,715,715',
+',21,,,,,715,,715,715,715,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,735,735,735,735,735,735,735,735,735,735,735,,735,735',
+',,735,735,,786,,,786,,,786,786,,,786,,786,735,,735,786,735,735,,735',
+'735,735,735,735,786,735,,,,786,786,786,786,,786,786,786,786,,,,,786',
+'786,,735,,,,,786,,786,786,786,710,710,710,710,710,710,,,,710,710,,,',
+'710,,710,710,710,710,710,710,710,,,,,,710,710,710,710,710,710,710,,',
+'710,,,,,,710,710,710,710,710,710,710,710,710,710,710,710,,710,710,710',
+',710,710,710,710,710,842,842,842,842,842,842,842,842,842,842,842,,842',
+'842,,,842,842,,710,,,710,,,710,710,,,710,,710,842,,842,710,842,842,',
+'842,842,842,842,842,710,842,,,,710,710,710,710,,710,710,710,710,,,,',
+'710,710,,842,,,,,710,,710,710,710,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,740,740,740,740,740,740,740,740,740,740,740',
+',740,740,,,740,740,,773,,,773,,,773,773,,,773,,773,740,,740,773,740',
+'740,,740,740,740,740,740,773,740,,,,773,773,773,773,,773,773,773,773',
+',,,,773,773,,740,,,,,773,,773,773,773,231,231,231,231,231,231,,,,231',
+'231,,,,231,,231,231,231,231,231,231,231,,,,,,231,231,231,231,231,231',
+'231,,,231,,,,,,231,231,231,231,231,231,231,231,231,231,231,231,,231',
+'231,231,,231,231,231,231,231,520,520,520,520,520,520,520,520,520,520',
+'520,,520,520,,,520,520,,231,,,231,,,231,231,,,231,,231,520,,520,231',
+'520,520,,520,520,520,520,520,231,520,,,,231,231,231,231,,231,231,231',
+'231,,,,,231,231,,520,,,,,231,,231,231,231,0,0,0,0,0,0,,,,0,0,,,,0,,0',
+'0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,,0,0',
+'0,,0,0,0,0,0,745,745,745,745,745,745,745,745,745,745,745,,745,745,,',
+'745,745,,0,,,0,,,0,0,,,0,,0,745,,745,0,745,745,,745,745,745,745,745',
+'0,745,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,745,,,,,0,,0,0,0,960,960,960,960',
+'960,960,,,,960,960,,,,960,,960,960,960,960,960,960,960,,,,,,960,960',
+'960,960,960,960,960,,888,960,888,888,888,,888,960,960,960,960,960,960',
+'960,960,960,960,960,960,,960,960,960,,960,960,960,960,960,675,,675,675',
+'675,,675,,888,,890,,890,890,890,,890,888,,960,,,960,,,960,960,,469,960',
+',960,,,,960,,675,,,,,,,960,,675,890,,960,960,960,960,,960,960,960,960',
+',,469,,960,960,469,469,,469,469,,960,,960,960,960,958,958,958,958,958',
+'958,,,,958,958,,,,958,,958,958,958,958,958,958,958,,,,,,958,958,958',
+'958,958,958,958,,,958,,,470,,,958,958,958,958,958,958,958,958,958,958',
+'958,958,,958,958,958,,958,958,958,958,958,465,465,465,465,465,465,465',
+'470,,465,465,470,470,,470,470,465,465,,958,,,958,,,958,958,,,958,,958',
+'465,,465,958,465,465,,465,465,465,465,465,958,465,,,,958,958,958,958',
+',958,958,958,958,,,,,958,958,,987,,987,987,987,958,987,958,958,958,952',
+'952,952,952,952,952,,,,952,952,,,,952,,952,952,952,952,952,952,952,',
+',,,987,952,952,952,952,952,952,952,,989,952,989,989,989,,989,952,952',
+'952,952,952,952,952,952,952,952,952,952,,952,952,952,,952,952,952,952',
+'952,466,466,466,466,466,466,466,,989,466,466,,,,,,466,466,,952,,,952',
+',,952,952,,,952,,952,466,,466,952,466,466,,466,466,466,466,466,952,466',
+',,,952,952,952,952,,952,952,952,952,,,,,952,952,,1011,,1011,1011,1011',
+'952,1011,952,952,952,935,935,935,935,935,935,,,,935,935,,,,935,,935',
+'935,935,935,935,935,935,,,,,1011,935,935,935,935,935,935,935,,,935,',
+',,,,935,935,935,935,935,935,935,935,935,935,935,935,,935,935,935,,935',
+'935,935,935,935,449,449,449,449,449,449,449,449,449,449,449,,449,449',
+',,449,449,,935,,,935,,,935,935,,,935,,935,449,,449,935,449,449,,449',
+'449,449,449,449,935,449,,,,935,935,935,935,,935,935,935,935,,,,,935',
+'935,,950,,950,950,950,935,950,935,935,935,830,830,830,830,830,830,,',
+',830,830,,,,830,,830,830,830,830,830,830,830,,,,,950,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,459,459,459,459,459,459,459,,,459',
+'459,,,,,,459,459,,830,,,830,,,830,830,,,830,,830,459,,459,830,459,459',
+',459,459,459,459,459,830,459,,,,830,830,830,830,,830,830,830,830,,,',
+',830,830,,,,,,,830,,830,830,830,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,824,824,824,824,824,824,824,824,824,824,,824,824',
+'824,,824,824,824,824,824,472,472,472,472,472,472,472,472,,472,472,,',
+',,,472,472,,824,,,824,,,824,824,,,824,,824,472,,472,824,472,472,,472',
+'472,472,472,472,824,472,,,,824,824,824,824,,824,824,824,824,,,,,824',
+'824,,,,,,,824,,824,824,824,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,448,448,448,448,448,448,448,448,448,448,448,,448,448',
+',,448,448,,624,,,624,,,624,624,,,624,,624,448,,448,624,448,448,,448',
+'448,448,448,448,624,448,,,,624,624,624,624,,624,624,624,624,,,,,624',
+'624,,,,,,,624,,624,624,624,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,463,,,,,,,,,,,,,,,,463,463,,934,,,934,,,934,934,,,934',
+',934,463,,463,934,463,463,,463,463,,,463,934,463,,,,934,934,934,934',
+',934,934,934,934,,,,,934,934,,,,,,,934,,934,934,934,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,464,464,464,464,464,464,464',
+',,464,464,,,,,,464,464,,623,,,623,,,623,623,,,623,,623,464,,464,623',
+'464,464,,464,464,464,464,464,623,464,,,,623,623,623,623,,623,623,623',
+'623,,,,,623,623,,,,,,,623,,623,623,623,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,471,471,471,471,471,471,471,,,471,471,',
+',,,,471,471,,123,,,123,,,123,123,,,123,,123,471,,471,123,471,471,,471',
+'471,471,471,471,123,471,,,,123,123,123,123,,123,123,123,123,,,,,123',
+'123,,,,,,,123,,123,123,123,927,927,927,927,927,927,,,,927,927,,,,927',
+',927,927,927,927,927,927,927,,,,,,927,927,927,927,927,927,927,,,927',
+',,,,,927,927,927,927,927,927,927,927,927,927,927,927,,927,927,927,,927',
+'927,927,927,927,461,,,,,,,,,,,,,,,,461,461,,927,,,927,,,927,927,,,927',
+',927,461,,461,927,461,461,,461,461,,,461,927,461,,,,927,927,927,927',
+',927,927,927,927,,,,,927,927,,,,,,,927,,927,927,927,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,460,,,,,,,,,,,,,,,,460,460',
+',561,,,561,,,561,561,,,561,,561,460,,460,561,460,460,,460,460,,,460',
+'561,460,,,,561,561,561,561,,561,561,561,561,,,,,561,561,,,,,,,561,,561',
+'561,561,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,462',
+',,,,,,,,,,,,,,,462,462,,208,,,208,,,208,208,,,208,,208,462,,462,208',
+'462,462,,462,462,,,462,208,462,,,,208,208,208,208,,208,208,208,208,',
+',,,208,208,,,,,,,208,,208,208,208,821,821,821,821,821,821,,,,821,821',
+',,,821,,821,821,821,821,821,821,821,,,,,,821,821,821,821,821,821,821',
+',,821,,,,,,821,821,821,821,821,821,821,821,821,821,821,821,,821,821',
+'821,,821,821,821,821,821,467,467,467,467,467,467,467,,,467,467,,,,,',
+'467,467,,821,,,821,,,821,821,,,821,,821,467,,467,821,467,467,,467,467',
+'467,467,467,821,467,,,,821,821,821,821,,821,821,821,821,,,,,821,821',
+',,,210,210,210,821,210,821,821,821,210,210,,,,210,,210,210,210,210,210',
+'210,210,,,,,,210,210,210,210,210,210,210,,,210,,,,,,,210,,,210,210,210',
+'210,210,210,210,210,,210,210,210,,210,210,210,210,210,468,468,468,468',
+'468,468,468,,,468,468,,,,,,468,468,,210,,,210,,,210,210,,,210,,,468',
+',468,210,468,468,,468,468,468,468,468,210,468,,,,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,456,,,,,,,,,,,,,,,,456,456,,211,,,211,,,211,211,,,211',
+',211,456,211,456,211,456,456,211,456,456,,,,211,,,,,211,211,211,211',
+',211,211,211,211,,,,,211,211,,,,752,752,752,211,752,211,211,211,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,458,,,,,,,,,,,,,,,,458,458,,752,,,752,,,752,752',
+',,752,,,458,,,752,458,458,,458,458,,,,752,,,,,752,752,752,752,,752,752',
+'752,752,,,,,752,752,,,,751,751,751,752,751,752,752,752,751,751,,,,751',
+',751,751,751,751,751,751,751,,,,,,751,751,751,751,751,751,751,,,751',
+',,,,,,751,,,751,751,751,751,751,751,751,751,,751,751,751,,751,751,751',
+'751,751,457,,,,,,,,,,,,,,,,457,457,,751,,,751,,,751,751,,,751,,,457',
+',457,751,457,457,,457,457,,,,751,,,,,751,751,751,751,,751,751,751,751',
+',,,,751,751,,,,214,214,214,751,214,751,751,751,214,214,,,,214,,214,214',
+'214,214,214,214,214,,,,,,214,214,214,214,214,214,214,,,214,,,,,,,214',
+',,214,214,214,214,214,214,214,214,,214,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,,,,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,,,,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,,,750,750,750,219,750,219,219,219,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,,,,736,736,736,750',
+'736,750,750,750,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,,,,734,734,734,736,734,736,736,736,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,,,,711,711,711,734',
+'711,734,734,734,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,,,,230,230,230,711,230,711,711,711,230,230,,,,230,,230',
+'230,230,230,230,230,230,,,,,,230,230,230,230,230,230,230,,,230,,,,,',
+',230,,,230,230,230,230,230,230,230,230,,230,230,230,,230,230,230,230',
+'230,,,,,,,,,,,,,,,,,,,,230,,,230,,,230,230,,,230,,,,,,230,,,,,,,,,230',
+',,,,230,230,230,230,,230,230,230,230,,,,,230,230,,,,705,705,705,230',
+'705,230,230,230,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,,,,233,233,233,705,233,705,705,705,233,233,,,,233,,233',
+'233,233,233,233,233,233,,,,,,233,233,233,233,233,233,233,,,233,,,,,',
+',233,,,233,233,233,233,233,233,233,233,,233,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,,,,678,678,678,258,678,258,258,258,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,,,,265,265,265,678',
+'265,678,678,678,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,,,652,652,652,274,652',
+'274,274,274,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,,,,647,647,647,652,647,652,652,652,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,,,,281,281,281,647,281,647,647,647',
+'281,281,,,,281,,281,281,281,281,281,281,281,,,,,,281,281,281,281,281',
+'281,281,,,281,,,,,,,281,,,281,281,281,281,281,281,281,281,,281,281,281',
+',281,281,281,281,281,,,,,,,,,,,,,,,,,,,,281,,,281,,,281,281,,,281,,',
+',,,281,,,,,,,,,281,,,,,281,281,281,281,,281,281,281,281,,,,,281,281',
+',,,636,636,636,281,636,281,281,281,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,,,,283,283,283,636,283,636,636,636,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,,,,632,632,632,287',
+'632,287,287,287,632,632,,,,632,,632,632,632,632,632,632,632,,,,,,632',
+'632,632,632,632,632,632,,,632,,,,,,,632,,,632,632,632,632,632,632,632',
+'632,,632,632,632,,632,632,632,632,632,,,,,,,,,,,,,,,,,,,,632,,,632,',
+',632,632,,,632,,,,,,632,,,,,,,,,632,,,,,632,632,632,632,,632,632,632',
+'632,,,,,632,632,,,,,,,632,,632,632,632,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',
+',,,629,629,629,292,629,292,292,292,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,,,,67,67,67,629,67,629,629,629,67,67',
+',,,67,,67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67',
+',,67,67,67,67,67,67,67,67,,67,67,67,,67,67,67,67,67,,,,,,,,,,,,,,,,',
+',,,67,,,67,,,67,67,,,67,,,,,,67,,,,,,,,,67,,,,,67,67,67,67,,67,67,67',
+'67,,,,,67,67,67,,,,,67,67,,67,67,67,5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5',
+'5,5,,,,,,5,5,5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5',
+'5,5,5,,,,,,,,,,,,,,,,,,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5',
+'5,,5,5,5,5,,,,,5,5,,,,976,976,976,5,976,5,5,5,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,,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,,,,20,20,20',
+'976,20,976,976,976,20,20,,,,20,,20,20,20,20,20,20,20,,,,,,20,20,20,20',
+'20,20,20,,,20,,,,,,,20,,,20,20,20,20,20,20,20,20,,20,20,20,,20,20,20',
+'20,20,,,,,,,,,,,,,,,,,,,,20,,,20,,,20,20,,,20,,,,,,20,,,,,,,,,20,,,',
+',20,20,20,20,,20,20,20,20,,,,,20,20,,,,867,867,867,20,867,20,20,20,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,,,,855,855,855',
+'867,855,867,867,867,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,,,,29,29,29,855,29,855,855,855,29,29,,,,29,,29,29,29,29,29,29,29',
+',,,,,29,29,29,29,29,29,29,,,29,,,,,,,29,,,29,29,29,29,29,29,29,29,29',
+'29,29,29,,29,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,,,964,,964,964,964',
+'964,964,,,,,,,,,964,,35,35,35,35,,35,35,35,35,,,,,35,35,,,,35,,964,35',
+',35,35,35,841,841,841,,841,964,964,,841,841,964,,,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,,,,840,840,840,841,840,841,841',
+'841,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,,,,,,840,,,,,840,840,840,840,,840,840,840,840',
+',,,,840,840,,,,823,823,823,840,823,840,840,840,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,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,823,,,,42,42,42,823,42',
+'823,823,823,42,42,,,,42,,42,42,42,42,42,42,42,,,,,,42,42,42,42,42,42',
+'42,,,42,,,,,,,42,,,42,42,42,42,42,42,42,42,,42,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,,,,818,818,818,44',
+'818,44,44,44,818,818,,,,818,,818,818,818,818,818,818,818,,,,,,818,818',
+'818,818,818,818,818,,,818,,,,,,,818,,,818,818,818,818,818,818,818,818',
+',818,818,818,,818,818,818,818,818,,,,,,,,,,,,,,,,,,,,818,,,818,,,818',
+'818,,,818,,,,,,818,,,,,,,,,818,,,,,818,818,818,818,,818,818,818,818',
+',,,,818,818,,,,59,59,59,818,59,818,818,818,59,59,,,,59,,59,59,59,59',
+'59,59,59,,,,,,59,59,59,59,59,59,59,,,59,,,,,,,59,,,59,59,59,59,59,59',
+'59,59,59,59,59,59,,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,,,,805,805,805,60,805',
+'60,60,60,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,,,,63,63,63,805,63,805,805,805,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,,,,377,377,377,64,377,64,64,64,377,377',
+',,,377,,377,377,377,377,377,377,377,,,,,,377,377,377,377,377,377,377',
+',,377,,,,,,,377,,,377,377,377,377,377,377,377,377,,377,377,377,,377',
+'377,377,377,377,,,,,,,,,,,,,,,,,,,,377,,,377,,,377,377,,,377,,,,,,377',
+',,,,,,,,377,,,,,377,377,377,377,,377,377,377,377,,,,,377,377,,,,68,68',
+'68,377,68,377,377,377,68,68,,,,68,,68,68,68,68,68,68,68,,,,,,68,68,68',
+'68,68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68,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,,,,767,767,767,70,767,70,70',
+'70,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,,,968',
+',968,968,968,968,968,,,,,,,,,968,,767,767,767,767,,767,767,767,767,',
+',,,767,767,,,,,,968,767,,767,767,767,113,113,113,113,113,968,968,,113',
+'113,968,,,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,,,,755,755,755,122,755,122,122,122,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,,,,753,753,753',
+'755,753,755,755,755,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,,,,209,209,209,753,209,753,753,753,209,209,,,,209,,209',
+'209,209,209,209,209,209,,,,,,209,209,209,209,209,209,209,,,209,,,,,',
+',209,,,209,209,209,209,209,209,209,209,,209,209,209,,209,209,209,209',
+'209,,,,,,,,,,,,,,,,,,,,209,,,209,,,209,209,,,209,,209,,,,209,,,,,,,',
+',209,,,,,209,209,209,209,,209,209,209,209,,,,,209,209,,,,327,327,327',
+'209,327,209,209,209,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,,,,530,530,530,327,530,327,327,327,530,530,,,,530,,530',
+'530,530,530,530,530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,',
+',530,,,530,530,530,530,530,530,530,530,530,530,530,530,,530,530,530',
+'530,530,,,,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,,,,,530,,,530',
+',,,,,530,,,,,530,530,530,530,,530,530,530,530,,,,,530,530,,,,527,527',
+'527,530,527,530,530,530,527,527,,,,527,,527,527,527,527,527,527,527',
+',,,,,527,527,527,527,527,527,527,,,527,,,,,,,527,,,527,527,527,527,527',
+'527,527,527,527,527,527,527,,527,527,527,527,527,,,,,,,,,,,,,,,,,,,',
+'527,,,527,,,527,527,,,527,,527,,,,527,,,527,,,,,,527,,,,,527,527,527',
+'527,,527,527,527,527,,,,,527,527,,,,521,521,521,527,521,527,527,527',
+'521,521,,,,521,,521,521,521,521,521,521,521,,,,,,521,521,521,521,521',
+'521,521,,,521,,,,,,,521,,,521,521,521,521,521,521,521,521,,521,521,521',
+',521,521,521,521,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,,',
+',,,521,,,,,,,,,521,,,,,521,521,521,521,,521,521,521,521,,,,,521,521',
+',,,517,517,517,521,517,521,521,521,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,,,,516,516,516,517,516,517,517,517',
+'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',
+',,,513,513,513,516,513,516,516,516,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,,,,341,341,341,513,341,513,513,513,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,,,,342,342,342,341',
+'342,341,341,341,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,,,,507,507,507,342,507,342,342,342,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,,,,505',
+'505,505,507,505,507,507,507,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,,,966,,966,966,966,966,966,,,,,,,,,966,,505,505',
+'505,505,,505,505,505,505,,,,,505,505,,,,,,966,505,,505,505,505,497,497',
+'497,497,497,966,966,,497,497,966,,,497,,497,497,497,497,497,497,497',
+',,,,,497,497,497,497,497,497,497,,,497,,,,,,497,497,497,497,497,497',
+'497,497,497,497,497,497,,497,497,497,,497,497,497,497,497,,,,,,,,,,',
+',,,,,,,,,497,,,497,,,497,497,,,497,,497,,,,497,,,,,,,,,497,,,,,497,497',
+'497,497,,497,497,497,497,,,,,497,497,,,,,,497,497,,497,497,497,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,,491,491,491,491',
+',,,,491,491,,,,489,489,489,491,489,491,491,491,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,,,,487,487,487',
+'489,487,489,489,489,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,487,,,,447,447,447,487,447,487,487,487',
+'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',
+',,,446,446,446,447,446,447,447,447,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,,,,445,445,445,446,445,446,446,446',
+'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',
+',,,443,443,443,445,443,445,445,445,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,443,443,,,,,443,443,,,,361,361,361,443,361',
+'443,443,443,361,361,,,,361,,361,361,361,361,361,361,361,,,,,,361,361',
+'361,361,361,361,361,,,361,,,,,,,361,,,361,361,361,361,361,361,361,361',
+',361,361,361,,361,361,361,361,361,,,,,,,,,,,,,,,,,,,,361,,,361,,,361',
+'361,,,361,,,,,,361,,,,,,,,,361,,,,,361,361,361,361,,361,361,361,361',
+',,,,361,361,,,,405,405,405,361,405,361,361,361,405,405,,,,405,,405,405',
+'405,405,405,405,405,,,,,,405,405,405,405,405,405,405,,,405,,,,,,,405',
+',,405,405,405,405,405,405,405,405,,405,405,405,,405,405,405,405,405',
+',,,,,,,,,,,,,,,,,,,405,,,405,,,405,405,,,405,,,,,,405,,,,,,,,,405,,',
+',,405,405,405,405,,405,405,405,405,,,,,405,405,,,,300,300,300,405,300',
+'405,405,405,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,,,850,,850,850,850,850,850,,,,,,,,,850,,300,300,300,300,,300,300',
+'300,300,,,,,300,300,,,,300,,850,300,,300,300,300,605,605,605,,605,850',
+'850,,605,605,850,,,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,,,,604,604,604,605,604,605,605,605,604,604,,,,604,,604,604,604',
+'604,604,604,604,,,,,,604,604,604,604,604,604,604,,,604,,,,,,,604,,,604',
+'604,604,604,604,604,604,604,,604,604,604,,604,604,604,604,604,,,,,,',
+',,,,,,,,,,,,,604,,,604,,,604,604,,,604,,,,,,604,,,,,,,,,604,,,,,604',
+'604,604,604,,604,604,604,604,,,,,604,604,,,,601,601,601,604,601,604',
+'604,604,601,601,,,,601,,601,601,601,601,601,601,601,,,,,,601,601,601',
+'601,601,601,601,,,601,,,,,,,601,,,601,601,601,601,601,601,601,601,,601',
+'601,601,,601,601,601,601,601,,,,,,,,,,,,,,,,,,,,601,,,601,,,601,601',
+',,601,,,,,,601,,,,,,,,,601,,,,,601,601,601,601,,601,601,601,601,,,,',
+'601,601,,,,600,600,600,601,600,601,601,601,600,600,,,,600,,600,600,600',
+'600,600,600,600,,,,,,600,600,600,600,600,600,600,,,600,,,,,,,600,,,600',
+'600,600,600,600,600,600,600,,600,600,600,,600,600,600,600,600,,,,,,',
+',,,,,,,,,,,,,600,,,600,,,600,600,,,600,,,,,,600,,,,,,,,,600,,,,,600',
+'600,600,600,,600,600,600,600,,,,,600,600,,,,596,596,596,600,596,600',
+'600,600,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,,,,595,595,595,596,595,596,596,596,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,,,,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,,,,,594,594,,,,593,593,593,594,593,594,594,594,593,593,,,,593,,593',
+'593,593,593,593,593,593,,,,,,593,593,593,593,593,593,593,,,593,,,,,',
+',593,,,593,593,593,593,593,593,593,593,593,593,593,593,,593,593,593',
+'593,593,,,,,,,,,,,,,,,,,,,,593,,,593,,,593,593,,,593,,593,,593,,593',
+',,593,,,,,,593,,,,,593,593,593,593,,593,593,593,593,,,,,593,593,,,,590',
+'590,590,593,590,593,593,593,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,,,,,590,590,,,,589,589,589,590,589,590,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,589,,,,,589,589',
+',,,317,317,317,589,317,589,589,589,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,,,,555,555,555,317,555,317,317,317,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,,555,555,555,555,,,,,555,555,,,,545',
+'545,545,555,545,555,555,555,545,545,,,,545,,545,545,545,545,545,545',
+'545,,,,,,545,545,545,545,545,545,545,,,545,,,,,,,545,,,545,545,545,545',
+'545,545,545,545,545,545,545,545,,545,545,545,545,545,,,,,,,,,,,,,,,',
+',,,,545,,,545,,,545,545,,,545,,545,,545,,545,,,545,,,,,,545,,,,,545',
+'545,545,545,,545,545,545,545,,,,,545,545,,,,544,544,544,545,544,545',
+'545,545,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,,,,325,325,325,544,325,544,544,544,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,,,,,56,,325,,325,325',
+'325,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,426,56,,56,,,,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,426,426,426',
+'425,426,,426,,,,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',
+'1016,,1016,1016,1016,1016,1016,,,,,,,425,,1016,425,425,425,425,28,425',
+',425,,,,28,28,28,,,28,28,28,,28,1016,,,,,,,,,28,28,1016,1016,,,,1016',
+',,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,,416,27',
+'27,,27,,27,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,,475,416,416,,416,,416,475,475,475,,,475,475,475,616',
+'475,616,616,616,616,616,,,,475,475,,,,616,,,,,,475,475,,475,475,475',
+'475,475,,,,,,,,658,616,658,658,658,658,658,,,,616,616,616,616,,658,',
+'616,,938,,938,938,938,938,938,475,,,,,,,475,938,,,658,475,475,,,,616',
+',,658,658,658,658,,,,658,,,938,,,,,475,475,,,938,938,938,938,,,,938',
+',,,475,,,475,,,,,475,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9',
+',,,9,9,9,9,9,9,9,9,9,9,,,,,,9,9,9,9,9,9,9,9,9,,,9,,,,,,,,9,9,,9,9,9',
+'9,9,9,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,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,396,,,396,396,,,,396,396,396',
+'396,,,,,,,,,,,,,,396,396,,396,396,396,396,396,396,396,396,396,396,396',
+'396,,,396,396,,,,,,,,,,,,,,396,586,586,586,586,586,586,586,586,586,586',
+'586,586,586,586,586,586,586,586,586,586,586,586,586,586,,,,586,586,586',
+'586,586,586,586,586,586,586,,,,,,586,586,586,586,586,586,586,586,586',
+',,586,,,,,,,,586,586,,586,586,586,586,586,586,586,,,586,586,,,,586,586',
+'586,586,,,,,,,,,,,,,,586,586,,586,586,586,586,586,586,586,586,586,586',
+'586,586,,,586,586,,,,,,,,,,,,,,586,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,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,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71',
+'71,71,71,71,71,71,71,,,,71,71,71,71,71,71,71,71,71,71,,,,,,71,71,71',
+'71,71,71,71,71,71,71,71,71,,71,,,,,,71,71,,71,71,71,71,71,71,71,,,71',
+'71,,,,71,71,71,71,,,,,,71,,,,,,,,71,71,,71,71,71,71,71,71,71,71,71,71',
+'71,71,508,508,71,,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,261,261,508,,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,978,978,261,,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,977,977,978,,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,441,441,977,,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,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,923,923,442,,923,,,,,,,,923,923,,923,923,923,923,923,923',
+'923,,,923,923,,,,923,923,923,923,,,,,,923,,,,,,,,923,923,,923,923,923',
+'923,923,923,923,923,923,923,923,923,509,509,923,,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,518,518',
+'509,,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,519,519,518,,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,546,546,519,,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,547',
+'547,546,,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,553,553,547,,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,554,554,553,,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',
+'212,212,554,,212,,,,,,,,212,212,,212,212,212,212,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,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,,716,213,716,716,716',
+'716,716,,799,,799,799,799,799,799,716,,,,,,,,799,,801,,801,801,801,801',
+'801,,,,,,716,,,801,,,,,799,716,716,716,716,,,,716,799,799,799,799,,',
+',799,801,,848,,848,848,848,848,848,801,801,801,801,,,,801,848,,846,',
+'846,846,846,846,846,940,,940,940,940,940,940,,846,,,,,848,,940,,,,,',
+',848,848,848,848,,,,848,846,,,,,,,940,,846,846,846,846,,,,846,,940,940',
+',,942,940,942,942,942,942,942,944,,944,944,944,944,944,1006,942,1006',
+'1006,1006,1006,1006,803,944,803,803,803,803,803,,1006,,,,,,,803,942',
+',,,,,,944,,,,942,942,,1006,,942,,944,944,,803,,944,,1006,1006,,,,1006',
+',803,803,,,962,803,962,962,962,962,962,,717,,717,717,717,717,717,962',
+',,,,,,,717,,535,,535,535,535,535,535,,,,,,962,,,535,,,,,717,962,962',
+'962,962,,,,962,717,717,717,717,,,,717,535,535,,,,,,,,535,535,535,535',
+',,,535' ]
+ racc_action_check = arr = ::Array.new(25046, 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 = [
+ 2938, 1265, nil, 263, nil, 12512, 1538, 1133, 23168, 23040,
+ 1020, nil, 969, 1024, 740, 406, 935, 608, nil, -74,
+ 12774, 2238, 910, nil, 593, nil, 228, 22648, 22536, 13167,
+ 13298, 13429, nil, 1818, 13560, 13691, nil, 733, 593, 652,
+ 773, 364, 14223, 14354, 14485, 693, 589, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 22134, nil, -72, 14747,
+ 14878, -20, nil, 15140, 15271, nil, nil, 12373, 15533, 15664,
+ 15795, 23665, nil, nil, nil, nil, nil, nil, nil, 450,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 222, nil, nil,
+ 334, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 600, nil, 16065, nil, nil, nil, nil, 16204, 16335,
+ 16466, 16597, 16736, 4338, nil, 821, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 300, nil, 4758, 17129,
+ 5029, 5160, 24580, 24641, 5553, 5684, 5815, 5946, 6077, 6208,
+ nil, nil, 910, -57, -62, 156, 165, -51, -55, nil,
+ 6863, 2798, 1301, 7125, 7256, 7387, 7518, 7649, 7780, 7911,
+ 8042, 8173, 8304, 8435, 8566, 8697, 8828, 8959, 9090, 9221,
+ 9352, 9483, 9614, 9745, 9876, 10007, 10138, 10269, 10400, nil,
+ nil, 23787, nil, nil, 1248, 10662, 10793, nil, nil, nil,
+ nil, nil, nil, nil, 10924, nil, 1958, nil, 1138, 1250,
+ nil, 11317, 1304, 11579, nil, nil, 11710, 11841, nil, nil,
+ 324, nil, 12111, 1523, 144, 118, 1958, 193, 279, 246,
+ 20027, 1118, 1020, 981, 880, 364, 841, nil, 359, 483,
+ -8, nil, nil, nil, 603, 334, 604, 21476, nil, 313,
+ 731, 517, nil, 756, nil, 22000, 1678, 17260, 702, nil,
+ 542, -68, 781, 806, 457, 855, nil, nil, 17, 35,
+ -10, 18177, 18308, -78, 1022, 947, 10, -12, 1330, 1035,
+ -5, 1091, nil, nil, 698, 564, 169, nil, 1050, nil,
+ 9, 19765, nil, nil, nil, 531, 496, 424, 372, 301,
+ 267, 255, 613, 201, nil, 202, nil, 15402, nil, 242,
+ 212, 481, -30, 436, -25, -39, 369, nil, nil, nil,
+ nil, nil, nil, nil, nil, 1142, 23296, nil, nil, nil,
+ nil, 1138, nil, nil, 1117, 19896, 1115, nil, nil, 838,
+ 1082, nil, 1074, 1012, 412, 443, 22777, nil, nil, nil,
+ 444, 0, 1055, nil, nil, 22402, 22268, nil, 1538, nil,
+ 1000, nil, nil, 698, nil, nil, nil, nil, -33, nil,
+ 1035, 23970, 24031, 19634, 168, 19503, 19372, 19241, 3918, 3498,
+ -39, 608, 1046, 1042, 1037, 1036, 5160, 5422, 5291, 3638,
+ 4618, 4478, 4758, 4058, 4198, 3218, 3358, 4898, 5029, 3106,
+ 3193, 4338, 3778, 2098, 135, 22906, nil, nil, nil, nil,
+ 962, nil, -48, -54, 961, nil, nil, 19110, nil, 18979,
+ nil, 18848, nil, 478, nil, nil, nil, 18709, 1398, 978,
+ 942, 931, nil, nil, 926, 18570, 904, 18439, 23726, 24153,
+ 1118, 886, nil, 18046, 838, nil, 17915, 17784, 24214, 24275,
+ 2798, 17653, 887, 869, 277, 787, nil, 17522, nil, nil,
+ 17391, nil, nil, nil, nil, 24941, 1398, 839, nil, 1538,
+ 145, 146, 814, 816, 21869, 21738, 24336, 24397, 8, nil,
+ nil, 398, nil, 24458, 24519, 21607, nil, nil, nil, 333,
+ 191, 4618, 690, nil, 189, nil, nil, nil, 961, nil,
+ nil, nil, 659, nil, nil, 354, nil, 375, nil, nil,
+ 624, nil, 620, nil, nil, nil, 23424, nil, 589, 21345,
+ 21214, 592, 577, 21083, 20952, 20821, 20690, 327, nil, nil,
+ 20559, 20428, 301, nil, 20297, 20166, nil, nil, 115, 113,
+ 556, 110, 226, 978, 213, nil, 22870, nil, 838, 260,
+ -24, 159, nil, 4198, 3918, nil, 72, nil, 88, 12242,
+ nil, nil, 11972, nil, 1279, -82, 11448, 1255, nil, 1255,
+ 24, 65, 1282, 447, 978, 1250, 1151, 11186, 1818, 1204,
+ 154, 1258, 11055, nil, 1152, nil, 479, nil, 22906, nil,
+ 1152, 1153, nil, 1161, 1167, 1181, nil, nil, nil, nil,
+ nil, nil, nil, nil, 1176, 3093, nil, nil, 10531, nil,
+ nil, nil, 1297, nil, nil, nil, 1301, nil, nil, 1306,
+ 681, nil, 1348, nil, nil, nil, nil, 1361, nil, 136,
+ 1242, -18, 25, 150, 178, 6994, 413, 838, nil, 1265,
+ 2518, 6732, nil, nil, 151, 2238, 24703, 24924, 23552, nil,
+ nil, nil, nil, nil, nil, 2098, nil, nil, nil, nil,
+ nil, nil, nil, 99, 6601, 2378, 6470, nil, 170, nil,
+ 2658, nil, 1398, nil, nil, 2938, nil, 1118, nil, 1678,
+ 6339, 5422, 5291, 16998, 128, 16867, 344, 356, nil, 372,
+ 374, 400, nil, 434, 428, 432, 449, 15926, nil, nil,
+ 602, nil, nil, 2658, 508, 627, nil, nil, nil, nil,
+ 522, 338, nil, nil, 676, nil, 2378, 563, 618, nil,
+ nil, 624, nil, 22, 594, 581, nil, nil, 640, 24711,
+ nil, 24728, nil, 24864, nil, 15009, nil, 563, nil, 651,
+ 329, 658, nil, nil, nil, nil, 783, nil, 14616, 802,
+ 698, 4898, nil, 14092, 3778, -1, 147, nil, 826, 577,
+ 3638, nil, 843, 732, -102, nil, 737, 732, nil, 1258,
+ 13961, 13830, 2518, 746, nil, nil, 24784, nil, 24767, nil,
+ 20074, nil, nil, 789, 1244, 13036, 770, 869, nil, 815,
+ nil, nil, nil, 1258, nil, nil, -1, 12905, nil, nil,
+ nil, nil, nil, 860, 818, nil, nil, nil, 819, 829,
+ nil, 830, 832, nil, 835, nil, nil, 840, 3064, 839,
+ 3103, nil, nil, 34, nil, 976, 977, nil, 373, nil,
+ nil, nil, 981, nil, nil, nil, 902, nil, 859, nil,
+ nil, 869, 871, 872, 873, nil, 884, nil, 402, nil,
+ nil, nil, 288, 24092, nil, nil, nil, 4478, 1160, 1190,
+ 1261, 1013, 1300, nil, 4058, 3498, nil, nil, 22925, nil,
+ 24791, nil, 24843, nil, 24850, nil, nil, nil, nil, 337,
+ 3578, 972, 3358, nil, nil, nil, nil, nil, 3218, nil,
+ 3078, nil, 24916, nil, 13738, nil, 18617, nil, 15973, nil,
+ nil, nil, 1104, 1037, 1041, 1124, 12643, 23909, 23848, 1121,
+ 1033, 1145, 1027, 1041, 1045, 1066, 1071, 3298, 1075, 3344,
+ 260, 1208, 1213, 1097, 1098, 1099, 1109, nil, nil, 1113,
+ 26, 33, 10, 1258, nil, nil, 24857, nil, nil, nil,
+ nil, 3438, 1119, nil, nil, nil, 22465, nil, nil, nil,
+ nil, 32, 1133, 799, 1249, nil, nil ]
+
+racc_action_default = [
+ -3, -600, -1, -586, -4, -600, -7, -600, -600, -600,
+ -600, -29, -600, -600, -600, -279, -600, -40, -43, -588,
+ -600, -48, -50, -51, -52, -56, -256, -256, -256, -293,
+ -329, -330, -68, -11, -72, -80, -82, -600, -491, -492,
+ -600, -600, -600, -600, -600, -588, -237, -270, -271, -272,
+ -273, -274, -275, -276, -277, -278, -576, -281, -283, -599,
+ -566, -301, -303, -600, -600, -307, -310, -586, -600, -600,
+ -600, -600, -331, -332, -334, -335, -432, -433, -434, -435,
+ -436, -457, -439, -440, -459, -461, -444, -449, -453, -455,
+ -471, -459, -473, -475, -476, -477, -478, -574, -480, -481,
+ -575, -483, -484, -485, -486, -487, -488, -489, -490, -495,
+ -496, -600, -2, -587, -595, -596, -597, -6, -600, -600,
+ -600, -600, -600, -3, -17, -600, -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, -600,
+ -600, -246, -600, -600, -600, -600, -600, -600, -600, -588,
+ -589, -47, -600, -491, -492, -600, -279, -600, -600, -229,
+ -600, -11, -600, -600, -600, -600, -600, -600, -600, -600,
+ -600, -600, -600, -600, -600, -600, -600, -600, -600, -600,
+ -600, -600, -600, -600, -600, -600, -600, -600, -600, -401,
+ -403, -600, -584, -585, -57, -246, -600, -300, -407, -416,
+ -418, -63, -413, -64, -588, -65, -238, -251, -260, -260,
+ -255, -600, -261, -600, -457, -568, -600, -600, -66, -67,
+ -586, -12, -600, -15, -600, -70, -11, -588, -600, -73,
+ -76, -11, -88, -89, -600, -600, -96, -293, -296, -588,
+ -600, -329, -330, -333, -414, -600, -78, -600, -84, -290,
+ -474, -600, -214, -215, -230, -600, -11, -600, -588, -239,
+ -592, -592, -600, -600, -592, -600, -302, -392, -49, -600,
+ -600, -600, -600, -586, -600, -587, -491, -492, -600, -600,
+ -279, -600, -345, -346, -106, -107, -600, -109, -600, -279,
+ -600, -600, -491, -492, -322, -111, -112, -153, -154, -155,
+ -171, -176, -183, -186, -324, -600, -564, -600, -437, -600,
+ -600, -600, -600, -600, -600, -600, -600, 1027, -5, -598,
+ -23, -24, -25, -26, -27, -600, -600, -19, -20, -21,
+ -121, -600, -30, -39, -266, -600, -600, -265, -31, -196,
+ -588, -247, -260, -260, -577, -578, -256, -411, -579, -580,
+ -578, -577, -256, -410, -412, -579, -580, -37, -204, -38,
+ -600, -41, -42, -194, -261, -44, -45, -46, -588, -299,
+ -600, -600, -600, -246, -290, -600, -600, -600, -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, -588, -381, -256, -577, -578, -54, -58,
+ -588, -257, -381, -381, -588, -295, -252, -600, -253, -600,
+ -258, -600, -262, -600, -571, -573, -10, -587, -14, -3,
+ -588, -69, -288, -85, -74, -600, -588, -246, -600, -600,
+ -95, -600, -474, -600, -81, -86, -600, -600, -600, -600,
+ -235, -600, -424, -600, -284, -600, -240, -594, -593, -242,
+ -594, -291, -292, -567, -304, -524, -11, -336, -337, -11,
+ -600, -600, -600, -600, -600, -246, -600, -600, -290, -315,
+ -106, -107, -108, -600, -600, -246, -318, -497, -498, -600,
+ -600, -11, -502, -326, -588, -438, -458, -463, -600, -465,
+ -441, -460, -600, -462, -443, -600, -446, -600, -448, -451,
+ -600, -452, -600, -472, -8, -18, -600, -28, -269, -600,
+ -600, -415, -600, -248, -250, -600, -600, -59, -245, -408,
+ -600, -600, -61, -409, -600, -600, -298, -590, -577, -578,
+ -577, -578, -588, -194, -600, -382, -588, -384, -11, -53,
+ -404, -381, -243, -11, -11, -294, -260, -259, -263, -600,
+ -569, -570, -600, -13, -600, -71, -600, -77, -83, -588,
+ -577, -578, -244, -92, -94, -600, -79, -600, -203, -213,
+ -588, -599, -599, -282, -588, -287, -592, -393, -524, -396,
+ -563, -563, -507, -509, -509, -509, -523, -525, -526, -527,
+ -528, -529, -530, -531, -532, -600, -534, -536, -538, -543,
+ -545, -546, -548, -553, -555, -556, -558, -559, -560, -600,
+ -599, -338, -599, -308, -339, -340, -311, -600, -314, -600,
+ -588, -577, -578, -581, -289, -600, -106, -107, -110, -588,
+ -11, -600, -500, -320, -600, -11, -524, -524, -600, -565,
+ -464, -467, -468, -469, -470, -11, -442, -445, -447, -450,
+ -454, -456, -122, -267, -600, -197, -600, -591, -260, -33,
+ -199, -34, -200, -60, -35, -202, -36, -201, -62, -195,
+ -600, -600, -600, -600, -415, -600, -563, -563, -363, -365,
+ -365, -365, -380, -600, -588, -386, -532, -540, -541, -551,
+ -600, -406, -405, -11, -600, -600, -254, -264, -572, -16,
+ -75, -90, -87, -297, -599, -343, -11, -425, -599, -426,
+ -427, -600, -241, -600, -588, -600, -505, -506, -600, -600,
+ -516, -600, -519, -600, -521, -600, -347, -600, -349, -351,
+ -358, -588, -537, -547, -557, -561, -600, -341, -600, -600,
+ -11, -11, -313, -600, -11, -415, -600, -415, -600, -600,
+ -11, -323, -600, -588, -600, -327, -600, -268, -32, -198,
+ -249, -600, -236, -600, -361, -362, -371, -373, -600, -376,
+ -600, -378, -383, -600, -600, -600, -539, -600, -402, -600,
+ -417, -419, -9, -11, -431, -344, -600, -600, -429, -285,
+ -394, -397, -399, -600, -563, -544, -562, -508, -509, -509,
+ -535, -509, -509, -554, -509, -532, -549, -588, -600, -356,
+ -600, -533, -305, -600, -306, -600, -600, -263, -599, -316,
+ -319, -499, -600, -325, -501, -503, -502, -466, -563, -542,
+ -364, -365, -365, -365, -365, -552, -365, -385, -588, -388,
+ -390, -391, -550, -600, -290, -55, -430, -11, -97, -98,
+ -600, -600, -105, -428, -11, -11, -395, -504, -600, -512,
+ -600, -514, -600, -517, -600, -520, -522, -348, -350, -354,
+ -600, -359, -11, -309, -312, -420, -421, -422, -11, -321,
+ -11, -360, -600, -368, -600, -370, -600, -374, -600, -377,
+ -379, -387, -600, -289, -581, -424, -246, -600, -600, -104,
+ -600, -600, -509, -509, -509, -509, -352, -600, -357, -600,
+ -599, -600, -600, -365, -365, -365, -365, -389, -423, -588,
+ -577, -578, -581, -103, -398, -400, -600, -510, -513, -515,
+ -518, -600, -355, -342, -317, -328, -600, -366, -369, -372,
+ -375, -415, -509, -353, -365, -511, -367 ]
+
+clist = [
+'218,329,374,26,410,129,129,651,26,268,272,523,277,277,277,416,422,543',
+'2,278,278,278,260,26,134,134,325,132,132,336,124,207,26,26,26,488,26',
+'407,264,271,273,313,313,429,339,340,536,539,343,330,6,591,432,338,338',
+'6,261,338,480,715,627,316,627,479,475,630,26,26,129,112,26,113,221,816',
+'116,313,313,313,320,693,696,379,439,514,526,529,760,784,533,299,552',
+'883,295,659,763,811,618,948,862,390,391,392,393,761,623,624,630,297',
+'338,338,338,338,921,919,880,915,26,117,575,577,380,26,26,26,26,26,26',
+'386,819,275,288,289,666,344,279,279,279,485,116,360,364,395,571,573',
+'576,576,830,561,571,562,718,906,958,705,821,342,762,820,341,337,501',
+'880,328,6,331,334,627,627,764,488,630,654,394,6,327,326,375,918,556',
+'351,657,951,870,535,793,534,333,934,935,474,482,483,955,788,277,417',
+'866,378,948,406,376,620,381,382,1,406,435,436,437,438,426,26,26,26,26',
+'697,794,26,26,26,26,26,26,796,797,388,332,887,883,915,921,997,383,384',
+'26,385,612,720,725,711,586,988,853,773,416,422,714,621,277,277,878,396',
+'403,754,353,666,278,277,875,880,909,402,408,206,278,633,427,431,26,26',
+'710,637,873,,833,834,,26,1012,646,781,,,880,493,,879,708,881,,511,,',
+'268,,26,,272,,26,639,606,1023,,26,,,313,,525,,642,,666,666,,911,524',
+',844,845,642,540,541,313,767,504,,298,26,26,338,338,912,956,913,,728',
+'700,728,,825,498,622,26,26,,625,709,642,827,560,512,,16,295,496,642',
+'497,16,295,116,,635,26,899,481,564,,638,500,279,515,1013,484,506,,,',
+'279,26,,776,,,,,16,,,,592,,129,,828,743,,,598,832,748,780,960,,603,824',
+'563,,542,792,,134,627,116,132,630,,585,,,,352,,417,982,277,719,597,',
+',557,,,602,,,937,,426,,432,,,,,26,,,993,,,,,614,674,,,598,,998,,,,,',
+',16,,,,961,,,,,16,16,,,789,,,,,,,619,,,277,417,,,776,,,,,,26,417,26',
+'401,757,,426,,,,26,650,313,783,,902,426,634,,,313,,,,26,,298,,277,417',
+',,,,699,,766,417,277,26,,,26,,426,,14,,26,6,426,14,767,,,767,,767,26',
+'767,515,,16,,26,,222,,515,430,,957,,927,,222,222,222,674,14,304,304',
+',129,,16,,,772,,,298,626,592,790,,298,765,26,26,952,,134,26,26,132,',
+'26,732,222,222,694,694,222,348,358,358,,,771,592,26,,,,598,26,26,603',
+',712,713,656,,,791,674,674,,,1021,,406,313,,992,16,739,741,835,16,,744',
+'746,313,16,431,,,14,,,,,222,222,222,222,14,14,,767,,767,891,767,,767',
+',,16,592,,874,,,826,,,,592,515,829,,,338,904,,738,,,338,782,,,,,,26',
+',,,,26,26,129,,,26,674,,674,,,,767,864,,26,,868,908,,,757,,757,,757',
+'26,,,,,,765,,,,,947,806,,,14,222,222,222,,,222,222,222,222,222,222,766',
+',766,999,,,758,,313,765,26,14,,,642,,,,,,,,838,26,,,800,802,804,,,,',
+'893,,,,,13,,,759,338,13,,222,222,,,,,,,,222,26,,26,26,,,26,,,,690,,26',
+'692,,,13,14,,,,14,,,,304,14,,,757,16,757,16,757,,757,,674,,,,313,304',
+',,26,,,,,,14,222,313,,,,,,,,766,806,,,889,222,222,,16,,,16,,,,694,,971',
+'901,,,,757,905,,222,,,,,,770,,16,,13,774,775,426,,,222,,,13,13,,,26',
+',,,,,,26,26,,,,,,,,,,15,,,876,,15,876,26,,,430,277,417,26,,26,806,,806',
+',,,,,16,,,426,,16,16,26,592,15,306,306,,,,,,222,,,882,,884,,,,,876,',
+',758,,758,,758,939,941,,943,945,13,946,,,350,359,359,,836,,,,,986,806',
+',,,,,,,,13,,,,914,,916,,14,,14,,,,,,304,,222,,,847,849,851,304,,15,',
+'806,16,806,,222,859,16,15,15,,,,,,,,16,,865,14,,,14,,806,,,,222,,,,',
+'13,,,,13,222,,,,13,,14,,,,1007,1008,1009,1010,895,896,,758,898,758,',
+'758,,758,,,16,,983,13,984,,985,,,,,,,16,222,222,,,,222,222,,,222,1025',
+',994,,995,15,996,926,,,,,,14,,,,,14,14,,758,,16,16,,,16,15,,,304,,16',
+',,,,,,,,304,,,,1022,,,,,,,,,,1024,963,965,967,969,,970,335,,,16,,,,933',
+'975,,,,,,,980,981,,,,,,,,,,15,,,,15,,,990,306,15,,222,,991,,,14,222',
+',,,14,,,,306,,,,,,14,,,15,,,,,,,16,222,,,,,,16,16,1017,1018,1019,1020',
+',,,,,,,13,,13,,,16,,,,,,16,856,16,,,,,14,39,1026,,,,39,,,,,,,14,,,,',
+',,,13,,,13,,,,,,,,,,39,303,303,,,,,,,,404,222,13,14,14,,434,14,,,,,',
+'14,,,,,,,,,,,,347,363,363,363,,,,,,,,,,922,,,,,,,,14,,,,930,,,,,,,,',
+'13,,,,,13,13,,,,,39,,490,,492,,,494,495,39,39,,15,,15,,,,,,306,,,,,',
+',,306,,,,,,,,,,,,14,,,,,,,14,14,,,15,,,15,,,,,,,,,,,14,,,,,,14,,14,',
+',15,,,,,13,,724,,,13,,,222,,,,,,39,13,,,,,38,,,,,38,,,,,,,,,,,,39,,',
+',,,,,588,,,,,,,15,38,302,302,,15,15,,,,,13,,,,,,,306,,,,,,13,,,,,306',
+',,,,,,346,362,362,362,,,,,,,39,,,,39,,,,303,39,,,13,13,,,13,,,,,,13',
+',,303,,,,628,,335,,631,39,38,,,,,,,,,38,38,15,,,,,15,,,,13,,,,,,15,',
+',,,,,,628,,,335,,,,,,,,,,,,,,434,,,,,,,,,,,,,,,,,359,,,,,,15,,,,,,,',
+',,13,,,15,,,,13,13,,,38,733,,,,628,335,,,,,,,,13,,,,,,13,,13,38,,,15',
+'15,,,15,,,,,,15,,,,,777,,,778,,,,,,,,,,,,,,,,,359,,,787,,,,,15,,,,932',
+',39,,39,,,,,,303,38,,,,38,,812,303,302,38,,,,,,,,,,,,,,,,302,,,,,39',
+',,39,38,,,,,,,,,,,,,,,15,,,,,,39,15,15,,,,,837,,,,,,,,,,,,15,,,,,,15',
+',15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,39,,,,,39,39,,,,,,,,,,,,303,,,886,',
+',,,,,,303,,,,,,,,,,897,,,,,,,,,,,,,,,,,335,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,39,38,,38,,39,,,,302,,,,,,39,,302,,,,,,,,,,,,,,,,,,,,,,,38',
+',,38,,,,,,,,,,,,,,363,,,,,,39,,38,,,,,,,,,,,39,,,,,,,,229,,,,,,,,,276',
+'276,276,,,,,,,,,,,322,323,324,,39,39,,,39,,,,,,39,,38,276,276,,,38,38',
+',,,,,,,,,,,302,,,,,363,,,,,,302,,39,,,,929,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,38,,,39,,38,,,,,39,39,,,,38,,,,,,,,,',
+',,,39,,,,,,39,,39,,,,,,,,,,,,,,,,,,,,,362,,276,409,276,,38,428,433,',
+',,,,,,,,,38,,,,229,,,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,473,,38,38,,,38',
+'276,276,,,,38,,,,276,,,,,,,276,,276,,,276,276,,,,,,,,362,,,,,,,,38,',
+',,928,,,,,,,,,,,,,,,,,,520,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+'38,,,,,,,38,38,,,,,,,,,,,,,,,,,38,,,,,,38,,38,,,,,276,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,276,,428,613,409,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,276,,276,,276,,,,,,,,,,,,,,,,276,,,,,,,,,648,649,,,,,,,,',
+',276,,,276,,,,,,,,,,,,,,276,276,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,276,735,,,276,276,740,742,,,,745,747,,,613,749,,,,,,,,,,,',
+',,,,,,,,,,,,276,,,276,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,',
+',,276,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,839',
+',,,,,,,,,,,,,740,742,747,745,,842,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,276,839,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276' ]
+ racc_goto_table = arr = ::Array.new(3071, 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,56,41,23,57,57,10,41,71,71,8,33,33,33,37,37,92,2,68,68,68,141',
+'41,61,61,31,60,60,86,15,15,41,41,41,73,41,27,38,38,38,64,64,27,17,17',
+'89,89,17,68,7,24,18,29,29,7,36,29,23,98,74,50,74,39,37,181,41,41,57',
+'4,41,6,20,90,96,64,64,64,63,91,91,154,47,51,69,69,129,11,69,49,54,177',
+'45,140,132,119,40,117,12,17,17,17,17,130,40,40,181,46,29,29,29,29,135',
+'134,172,178,41,5,158,158,155,41,41,41,41,41,41,155,11,44,44,44,166,4',
+'70,70,70,47,96,55,55,2,159,159,159,159,112,113,159,114,115,116,110,109',
+'108,107,121,106,105,104,47,172,103,7,70,70,74,74,127,73,181,102,7,7',
+'101,100,99,133,95,93,136,120,137,138,139,88,85,142,143,144,146,147,148',
+'149,33,71,150,153,117,68,84,72,156,157,1,68,29,29,29,29,57,41,41,41',
+'41,92,140,41,41,41,41,41,41,124,124,5,66,119,177,178,135,134,160,161',
+'41,162,23,163,164,165,62,120,132,40,37,37,8,42,33,33,170,30,28,24,19',
+'166,68,33,174,172,175,20,20,16,68,14,20,20,41,41,111,51,132,,140,140',
+',41,120,51,24,,,172,154,,130,54,130,,31,,,71,,41,,71,,41,23,47,120,',
+'41,,,64,,31,,37,,166,166,,129,29,,124,124,37,17,17,64,173,50,,9,41,41',
+'29,29,130,11,130,,159,23,159,,24,7,47,41,41,,47,23,37,24,29,63,,26,45',
+'4,37,6,26,45,96,,47,41,91,44,29,,47,46,70,49,90,44,46,,,,70,41,,73,',
+',,,26,,,,31,,57,,8,39,,,71,8,39,51,98,,71,89,36,,4,69,,61,74,96,60,181',
+',15,,,,26,,71,130,33,47,38,,,96,,,38,,,124,,57,,18,,,,,41,,,130,,,,',
+'31,171,,,71,,10,,,,,,,26,,,,124,,,,,26,26,,,27,,,,,,,38,,,33,71,,,73',
+',,,,,41,71,41,9,123,,57,,,,41,29,64,47,,8,57,2,,,64,,,,41,,9,,33,71',
+',,,,68,,171,71,33,41,,,41,,57,,22,,41,7,57,22,173,,,173,,173,41,173',
+'49,,26,,41,,22,,49,26,,92,,89,,22,22,22,171,22,22,22,,57,,26,,,86,,',
+'9,70,31,67,,9,31,41,41,89,,61,41,41,60,,41,15,22,22,96,96,22,22,22,22',
+',,141,31,41,,,,71,41,41,71,,96,96,70,,,31,171,171,,,24,,68,64,,8,26',
+'20,20,56,26,,20,20,64,26,20,,,22,,,,,22,22,22,22,22,22,,173,,173,47',
+'173,,173,,,26,31,,123,,,17,,,,31,49,17,,,29,47,,70,,,29,49,,,,,,41,',
+',,,41,41,57,,,41,171,,171,,,,173,67,,41,,67,123,,,123,,123,,123,41,',
+',,,,31,,,,,47,118,,,22,22,22,22,,,22,22,22,22,22,22,171,,171,23,,,125',
+',64,31,41,22,,,37,,,,,,,,20,41,,,169,169,169,,,,,17,,,,,21,,,128,29',
+'21,,22,22,,,,,,,,22,41,,41,41,,,41,,,,9,,41,9,,,21,22,,,,22,,,,22,22',
+',,123,26,123,26,123,,123,,171,,,,64,22,,,41,,,,,,22,22,64,,,,,,,,171',
+'118,,,118,22,22,,26,,,26,,,,96,,31,96,,,,123,96,,22,,,,,,9,,26,,21,9',
+'9,57,,,22,,,21,21,,,41,,,,,,,41,41,,,,,,,,,,25,,,125,,25,125,41,,,26',
+'33,71,41,,41,118,,118,,,,,,26,,,57,,26,26,41,31,25,25,25,,,,,,22,,,128',
+',128,,,,,125,,,125,,125,,125,169,169,,169,169,21,169,,,25,25,25,,9,',
+',,,118,118,,,,,,,,,21,,,,128,,128,,22,,22,,,,,,22,,22,,,126,126,126',
+'22,,25,,118,26,118,,22,9,26,25,25,,,,,,,,26,,9,22,,,22,,118,,,,22,,',
+',,21,,,,21,22,,,,21,,22,,,,169,169,169,169,9,9,,125,9,125,,125,,125',
+',,26,,128,21,128,,128,,,,,,,26,22,22,,,,22,22,,,22,169,,128,,128,25',
+'128,9,,,,,,22,,,,,22,22,,125,,26,26,,,26,25,,,22,,26,,,,,,,,,22,,,,128',
+',,,,,,,,,128,126,126,126,126,,126,65,,,26,,,,26,9,,,,,,,9,9,,,,,,,,',
+',25,,,,25,,,9,25,25,,22,,9,,,22,22,,,,22,,,,25,,,,,,22,,,25,,,,,,,26',
+'22,,,,,,26,26,126,126,126,126,,,,,,,,21,,21,,,26,,,,,,26,22,26,,,,,22',
+'53,126,,,,53,,,,,,,22,,,,,,,,21,,,21,,,,,,,,,,53,53,53,,,,,,,,65,22',
+'21,22,22,,65,22,,,,,,22,,,,,,,,,,,,53,53,53,53,,,,,,,,,,22,,,,,,,,22',
+',,,22,,,,,,,,,21,,,,,21,21,,,,,53,,65,,65,,,65,65,53,53,,25,,25,,,,',
+',25,,,,,,,,25,,,,,,,,,,,,22,,,,,,,22,22,,,25,,,25,,,,,,,,,,,22,,,,,',
+'22,,22,,,25,,,,,21,,25,,,21,,,22,,,,,,53,21,,,,,52,,,,,52,,,,,,,,,,',
+',53,,,,,,,,65,,,,,,,25,52,52,52,,25,25,,,,,21,,,,,,,25,,,,,,21,,,,,25',
+',,,,,,52,52,52,52,,,,,,,53,,,,53,,,,53,53,,,21,21,,,21,,,,,,21,,,53',
+',,,65,,65,,65,53,52,,,,,,,,,52,52,25,,,,,25,,,,21,,,,,,25,,,,,,,,65',
+',,65,,,,,,,,,,,,,,65,,,,,,,,,,,,,,,,,25,,,,,,25,,,,,,,,,,21,,,25,,,',
+'21,21,,,52,65,,,,65,65,,,,,,,,21,,,,,,21,,21,52,,,25,25,,,25,,,,,,25',
+',,,,65,,,65,,,,,,,,,,,,,,,,,25,,,65,,,,,25,,,,25,,53,,53,,,,,,53,52',
+',,,52,,65,53,52,52,,,,,,,,,,,,,,,,52,,,,,53,,,53,52,,,,,,,,,,,,,,,25',
+',,,,,53,25,25,,,,,65,,,,,,,,,,,,25,,,,,,25,,25,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,53,,,,,53,53,,,,,,,,,,,,53,,,65,,,,,,,,53,,,,,,,,,,65,,,,,,',
+',,,,,,,,,,65,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,53,52,,52,,53,,,,52',
+',,,,,53,,52,,,,,,,,,,,,,,,,,,,,,,,52,,,52,,,,,,,,,,,,,,53,,,,,,53,,52',
+',,,,,,,,,,53,,,,,,,,32,,,,,,,,,32,32,32,,,,,,,,,,,32,32,32,,53,53,,',
+'53,,,,,,53,,52,32,32,,,52,52,,,,,,,,,,,,52,,,,,53,,,,,,52,,53,,,,53',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,52,,,53,,52',
+',,,,53,53,,,,52,,,,,,,,,,,,,53,,,,,,53,,53,,,,,,,,,,,,,,,,,,,,,52,,32',
+'32,32,,52,32,32,,,,,,,,,,,52,,,,32,,,32,32,32,32,32,32,32,32,32,32,32',
+'32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,,52,52,,,52,32,32,,,,52',
+',,,32,,,,,,,32,,32,,,32,32,,,,,,,,52,,,,,,,,52,,,,52,,,,,,,,,,,,,,,',
+',,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,52,,,,,,,52,52,,,,,,,',
+',,,,,,,,,52,,,,,,52,,52,,,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+'32,,32,32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,32,,32,,,,,',
+',,,,,,,,,,32,,,,,,,,,32,32,,,,,,,,,,32,,,32,,,,,,,,,,,,,,32,32,,,,,',
+',,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,32,,,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(3071, 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, 204, 18, nil, 66, 112, 68, 50, -315, 295,
+ -515, -564, -686, nil, -232, 22, 254, -19, -163, 186,
+ 52, 804, 546, -207, -359, 948, 354, -172, 43, -10,
+ 127, -19, 2094, -17, nil, nil, 32, -197, 12, -201,
+ -378, 3, -231, nil, 100, 59, 74, -137, nil, 55,
+ 26, -234, 1534, 1320, -266, 70, -69, -3, nil, nil,
+ 19, 16, -160, 37, 7, 1154, 167, -58, -10, -246,
+ 105, -17, -274, -244, -427, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 129, 126, -32, nil, -152, -293,
+ -617, -461, -327, 111, nil, -182, 71, nil, -503, 105,
+ 118, 116, -353, 104, 97, 93, -536, 89, -542, -396,
+ -747, -286, -567, -217, -225, -413, -684, -791, 76, -580,
+ -709, -460, nil, -112, -437, 156, 297, -448, 191, -530,
+ -513, nil, -522, -677, -741, -742, -355, -611, -154, -473,
+ -442, 0, -684, -684, -70, nil, -79, -79, -706, -459,
+ -592, nil, nil, 118, 0, 36, 117, 117, -264, -238,
+ 145, 145, 146, -331, -331, -319, -403, nil, nil, 129,
+ -549, -80, -685, -291, -537, -583, nil, -710, -733, nil,
+ nil, -424 ]
+
+racc_goto_default = [
+ nil, nil, nil, 3, nil, 4, 345, 293, nil, 522,
+ nil, 817, nil, 290, 291, nil, nil, nil, 11, 12,
+ 18, 228, 321, nil, nil, 226, 227, nil, nil, 17,
+ nil, 440, 21, 22, 23, 24, nil, 645, nil, nil,
+ nil, 310, nil, 25, 411, 32, nil, nil, 34, 37,
+ 36, nil, 223, 224, 357, nil, 131, 419, 130, 133,
+ 77, 78, nil, 92, 46, 282, nil, 785, 412, nil,
+ 413, 424, 599, 486, 280, 266, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, nil, 267, 61, nil, nil,
+ nil, nil, nil, nil, 69, nil, 537, 70, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 808, 673, nil,
+ 809, 910, 756, 661, nil, 662, nil, nil, 663, nil,
+ 665, 615, nil, nil, nil, 671, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 423, nil, nil, nil, nil,
+ nil, 76, 79, 80, nil, nil, nil, nil, nil, 566,
+ nil, nil, nil, nil, nil, nil, 877, 717, 660, nil,
+ 664, 885, 676, 678, 679, 768, 682, 683, 769, 686,
+ 689, 285 ]
+
+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, 244, :_reduce_281,
+ 4, 208, :_reduce_282,
+ 0, 245, :_reduce_283,
+ 0, 246, :_reduce_284,
+ 6, 208, :_reduce_285,
+ 0, 247, :_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,
+ 0, 248, :_reduce_303,
+ 3, 208, :_reduce_304,
+ 6, 208, :_reduce_305,
+ 6, 208, :_reduce_306,
+ 0, 249, :_reduce_307,
+ 0, 250, :_reduce_308,
+ 7, 208, :_reduce_309,
+ 0, 251, :_reduce_310,
+ 0, 252, :_reduce_311,
+ 7, 208, :_reduce_312,
+ 5, 208, :_reduce_313,
+ 4, 208, :_reduce_314,
+ 0, 253, :_reduce_315,
+ 0, 254, :_reduce_316,
+ 9, 208, :_reduce_317,
+ 0, 255, :_reduce_318,
+ 6, 208, :_reduce_319,
+ 0, 256, :_reduce_320,
+ 7, 208, :_reduce_321,
+ 0, 257, :_reduce_322,
+ 5, 208, :_reduce_323,
+ 0, 258, :_reduce_324,
+ 6, 208, :_reduce_325,
+ 0, 259, :_reduce_326,
+ 0, 260, :_reduce_327,
+ 9, 208, :_reduce_328,
+ 1, 208, :_reduce_329,
+ 1, 208, :_reduce_330,
+ 1, 208, :_reduce_331,
+ 1, 208, :_reduce_332,
+ 1, 166, :_reduce_none,
+ 1, 238, :_reduce_334,
+ 1, 241, :_reduce_335,
+ 1, 233, :_reduce_none,
+ 1, 233, :_reduce_none,
+ 2, 233, :_reduce_338,
+ 1, 235, :_reduce_none,
+ 1, 235, :_reduce_none,
+ 1, 234, :_reduce_none,
+ 5, 234, :_reduce_342,
+ 1, 155, :_reduce_none,
+ 2, 155, :_reduce_344,
+ 1, 237, :_reduce_none,
+ 1, 237, :_reduce_none,
+ 1, 261, :_reduce_347,
+ 3, 261, :_reduce_348,
+ 1, 264, :_reduce_349,
+ 3, 264, :_reduce_350,
+ 1, 263, :_reduce_none,
+ 4, 263, :_reduce_352,
+ 6, 263, :_reduce_353,
+ 3, 263, :_reduce_354,
+ 5, 263, :_reduce_355,
+ 2, 263, :_reduce_356,
+ 4, 263, :_reduce_357,
+ 1, 263, :_reduce_358,
+ 3, 263, :_reduce_359,
+ 4, 265, :_reduce_360,
+ 2, 265, :_reduce_361,
+ 2, 265, :_reduce_362,
+ 1, 265, :_reduce_363,
+ 2, 270, :_reduce_364,
+ 0, 270, :_reduce_365,
+ 6, 271, :_reduce_366,
+ 8, 271, :_reduce_367,
+ 4, 271, :_reduce_368,
+ 6, 271, :_reduce_369,
+ 4, 271, :_reduce_370,
+ 2, 271, :_reduce_none,
+ 6, 271, :_reduce_372,
+ 2, 271, :_reduce_373,
+ 4, 271, :_reduce_374,
+ 6, 271, :_reduce_375,
+ 2, 271, :_reduce_376,
+ 4, 271, :_reduce_377,
+ 2, 271, :_reduce_378,
+ 4, 271, :_reduce_379,
+ 1, 271, :_reduce_none,
+ 0, 184, :_reduce_381,
+ 1, 184, :_reduce_382,
+ 3, 275, :_reduce_383,
+ 1, 275, :_reduce_384,
+ 4, 275, :_reduce_385,
+ 1, 276, :_reduce_386,
+ 4, 276, :_reduce_387,
+ 1, 277, :_reduce_388,
+ 3, 277, :_reduce_389,
+ 1, 278, :_reduce_390,
+ 1, 278, :_reduce_none,
+ 0, 282, :_reduce_392,
+ 0, 283, :_reduce_393,
+ 4, 232, :_reduce_394,
+ 4, 280, :_reduce_395,
+ 1, 280, :_reduce_396,
+ 0, 286, :_reduce_397,
+ 4, 281, :_reduce_398,
+ 0, 287, :_reduce_399,
+ 4, 281, :_reduce_400,
+ 0, 288, :_reduce_401,
+ 5, 285, :_reduce_402,
+ 2, 179, :_reduce_403,
+ 4, 179, :_reduce_404,
+ 5, 179, :_reduce_405,
+ 5, 179, :_reduce_406,
+ 2, 231, :_reduce_407,
+ 4, 231, :_reduce_408,
+ 4, 231, :_reduce_409,
+ 3, 231, :_reduce_410,
+ 3, 231, :_reduce_411,
+ 3, 231, :_reduce_412,
+ 2, 231, :_reduce_413,
+ 1, 231, :_reduce_414,
+ 4, 231, :_reduce_415,
+ 0, 290, :_reduce_416,
+ 5, 230, :_reduce_417,
+ 0, 291, :_reduce_418,
+ 5, 230, :_reduce_419,
+ 5, 236, :_reduce_420,
+ 1, 292, :_reduce_421,
+ 1, 292, :_reduce_none,
+ 6, 154, :_reduce_423,
+ 0, 154, :_reduce_424,
+ 1, 293, :_reduce_425,
+ 1, 293, :_reduce_none,
+ 1, 293, :_reduce_none,
+ 2, 294, :_reduce_428,
+ 1, 294, :_reduce_none,
+ 2, 156, :_reduce_430,
+ 1, 156, :_reduce_none,
+ 1, 220, :_reduce_none,
+ 1, 220, :_reduce_none,
+ 1, 220, :_reduce_none,
+ 1, 221, :_reduce_435,
+ 1, 296, :_reduce_436,
+ 2, 296, :_reduce_437,
+ 3, 297, :_reduce_438,
+ 1, 297, :_reduce_439,
+ 1, 297, :_reduce_440,
+ 3, 222, :_reduce_441,
+ 4, 223, :_reduce_442,
+ 3, 224, :_reduce_443,
+ 0, 301, :_reduce_444,
+ 3, 301, :_reduce_445,
+ 1, 302, :_reduce_446,
+ 2, 302, :_reduce_447,
+ 3, 226, :_reduce_448,
+ 0, 304, :_reduce_449,
+ 3, 304, :_reduce_450,
+ 3, 225, :_reduce_451,
+ 3, 227, :_reduce_452,
+ 0, 305, :_reduce_453,
+ 3, 305, :_reduce_454,
+ 0, 306, :_reduce_455,
+ 3, 306, :_reduce_456,
+ 0, 298, :_reduce_457,
+ 2, 298, :_reduce_458,
+ 0, 299, :_reduce_459,
+ 2, 299, :_reduce_460,
+ 0, 300, :_reduce_461,
+ 2, 300, :_reduce_462,
+ 1, 303, :_reduce_463,
+ 2, 303, :_reduce_464,
+ 0, 308, :_reduce_465,
+ 4, 303, :_reduce_466,
+ 1, 307, :_reduce_467,
+ 1, 307, :_reduce_468,
+ 1, 307, :_reduce_469,
+ 1, 307, :_reduce_none,
+ 1, 204, :_reduce_471,
+ 3, 205, :_reduce_472,
+ 1, 295, :_reduce_473,
+ 2, 295, :_reduce_474,
+ 1, 207, :_reduce_475,
+ 1, 207, :_reduce_476,
+ 1, 207, :_reduce_477,
+ 1, 207, :_reduce_478,
+ 1, 196, :_reduce_479,
+ 1, 196, :_reduce_480,
+ 1, 196, :_reduce_481,
+ 1, 196, :_reduce_482,
+ 1, 196, :_reduce_483,
+ 1, 197, :_reduce_484,
+ 1, 197, :_reduce_485,
+ 1, 197, :_reduce_486,
+ 1, 197, :_reduce_487,
+ 1, 197, :_reduce_488,
+ 1, 197, :_reduce_489,
+ 1, 197, :_reduce_490,
+ 1, 228, :_reduce_491,
+ 1, 228, :_reduce_492,
+ 1, 165, :_reduce_493,
+ 1, 165, :_reduce_494,
+ 1, 169, :_reduce_495,
+ 1, 169, :_reduce_496,
+ 1, 239, :_reduce_497,
+ 0, 309, :_reduce_498,
+ 4, 239, :_reduce_499,
+ 2, 239, :_reduce_500,
+ 3, 242, :_reduce_501,
+ 0, 311, :_reduce_502,
+ 3, 242, :_reduce_503,
+ 4, 310, :_reduce_504,
+ 2, 310, :_reduce_505,
+ 2, 310, :_reduce_506,
+ 1, 310, :_reduce_507,
+ 2, 313, :_reduce_508,
+ 0, 313, :_reduce_509,
+ 6, 284, :_reduce_510,
+ 8, 284, :_reduce_511,
+ 4, 284, :_reduce_512,
+ 6, 284, :_reduce_513,
+ 4, 284, :_reduce_514,
+ 6, 284, :_reduce_515,
+ 2, 284, :_reduce_516,
+ 4, 284, :_reduce_517,
+ 6, 284, :_reduce_518,
+ 2, 284, :_reduce_519,
+ 4, 284, :_reduce_520,
+ 2, 284, :_reduce_521,
+ 4, 284, :_reduce_522,
+ 1, 284, :_reduce_523,
+ 0, 284, :_reduce_524,
+ 1, 279, :_reduce_525,
+ 1, 279, :_reduce_526,
+ 1, 279, :_reduce_527,
+ 1, 279, :_reduce_528,
+ 1, 262, :_reduce_none,
+ 1, 262, :_reduce_530,
+ 1, 315, :_reduce_531,
+ 1, 316, :_reduce_532,
+ 3, 316, :_reduce_533,
+ 1, 272, :_reduce_534,
+ 3, 272, :_reduce_535,
+ 1, 317, :_reduce_536,
+ 2, 318, :_reduce_537,
+ 1, 318, :_reduce_538,
+ 2, 319, :_reduce_539,
+ 1, 319, :_reduce_540,
+ 1, 266, :_reduce_541,
+ 3, 266, :_reduce_542,
+ 1, 312, :_reduce_543,
+ 3, 312, :_reduce_544,
+ 1, 320, :_reduce_none,
+ 1, 320, :_reduce_none,
+ 2, 267, :_reduce_547,
+ 1, 267, :_reduce_548,
+ 3, 321, :_reduce_549,
+ 3, 322, :_reduce_550,
+ 1, 273, :_reduce_551,
+ 3, 273, :_reduce_552,
+ 1, 314, :_reduce_553,
+ 3, 314, :_reduce_554,
+ 1, 323, :_reduce_none,
+ 1, 323, :_reduce_none,
+ 2, 274, :_reduce_557,
+ 1, 274, :_reduce_558,
+ 1, 324, :_reduce_none,
+ 1, 324, :_reduce_none,
+ 2, 269, :_reduce_561,
+ 2, 268, :_reduce_562,
+ 0, 268, :_reduce_563,
+ 1, 243, :_reduce_none,
+ 3, 243, :_reduce_565,
+ 0, 229, :_reduce_566,
+ 2, 229, :_reduce_none,
+ 1, 214, :_reduce_568,
+ 3, 214, :_reduce_569,
+ 3, 325, :_reduce_570,
+ 2, 325, :_reduce_571,
+ 4, 325, :_reduce_572,
+ 2, 325, :_reduce_573,
+ 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, 289, :_reduce_none,
+ 1, 289, :_reduce_none,
+ 1, 289, :_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_590,
+ 2, 168, :_reduce_591,
+ 0, 213, :_reduce_none,
+ 1, 213, :_reduce_none,
+ 1, 213, :_reduce_none,
+ 1, 240, :_reduce_595,
+ 1, 240, :_reduce_none,
+ 1, 150, :_reduce_none,
+ 2, 150, :_reduce_none,
+ 0, 211, :_reduce_599 ]
+
+racc_reduce_n = 600
+
+racc_shift_n = 1027
+
+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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "singleton",
+ "@5",
+ "@6",
+ "@7",
+ "@8",
+ "@9",
+ "@10",
+ "@11",
+ "@12",
+ "@13",
+ "@14",
+ "@15",
+ "@16",
+ "@17",
+ "@18",
+ "@19",
+ "@20",
+ "@21",
+ "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",
+ "@22",
+ "@23",
+ "f_args",
+ "do_block",
+ "@24",
+ "@25",
+ "@26",
+ "operation3",
+ "@27",
+ "@28",
+ "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",
+ "@29",
+ "@30",
+ "args_tail",
+ "@31",
+ "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
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_55(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ 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_internal(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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_304(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ 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)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ 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])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ 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)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_335(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+# reduce 336 omitted
+
+# reduce 337 omitted
+
+def _reduce_338(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 339 omitted
+
+# reduce 340 omitted
+
+# reduce 341 omitted
+
+def _reduce_342(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 343 omitted
+
+def _reduce_344(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 345 omitted
+
+# reduce 346 omitted
+
+def _reduce_347(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_349(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 351 omitted
+
+def _reduce_352(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2], val[3]))
+
+ result
+end
+
+def _reduce_353(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2], val[3])).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_354(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2]))
+
+ result
+end
+
+def _reduce_355(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_356(val, _values, result)
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_357(val, _values, result)
+ result = [ @builder.restarg(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_358(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+def _reduce_359(val, _values, result)
+ result = [ @builder.restarg(val[0]),
+ *val[2] ]
+
+ 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[1])
+
+ result
+end
+
+def _reduce_363(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_364(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_365(val, _values, result)
+ result = []
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_368(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+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)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 371 omitted
+
+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)
+ 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_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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ 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
+
+def _reduce_378(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_379(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 380 omitted
+
+def _reduce_381(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_382(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_383(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_384(val, _values, result)
+ result = @builder.args(val[0], [], val[0])
+
+ result
+end
+
+def _reduce_385(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 391 omitted
+
+def _reduce_392(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_393(val, _values, result)
+ result = @lexer.cmdarg.dup
+ @lexer.cmdarg.clear
+
+ result
+end
+
+def _reduce_394(val, _values, result)
+ @lexer.cmdarg = val[2]
+ @lexer.cmdarg.lexpop
+
+ result = [ val[1], val[3] ]
+
+ @static_env.unextend
+
+ result
+end
+
+def _reduce_395(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_396(val, _values, result)
+ result = @builder.args(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_401(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_402(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_403(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_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]
+ 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_406(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_407(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_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]
+ result = @builder.call_method(val[0], val[1], val[2],
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_410(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ 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[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[1]
+ result = @builder.keyword_cmd(:super, val[0],
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_414(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_415(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_416(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_417(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_418(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_419(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_421(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 422 omitted
+
+def _reduce_423(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_424(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 426 omitted
+
+# reduce 427 omitted
+
+def _reduce_428(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 429 omitted
+
+def _reduce_430(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 431 omitted
+
+# reduce 432 omitted
+
+# reduce 433 omitted
+
+# reduce 434 omitted
+
+def _reduce_435(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_437(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_438(val, _values, result)
+ result = @builder.string_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_439(val, _values, result)
+ result = @builder.string(val[0])
+
+ result
+end
+
+def _reduce_440(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_441(val, _values, result)
+ result = @builder.xstring_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_442(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_443(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ result = val[0] << val[1]
+
+ 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.word(val[1])
+
+ result
+end
+
+def _reduce_451(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ 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.string_internal(val[1])
+
+ result
+end
+
+def _reduce_455(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ result = val[0] << @builder.symbol_internal(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 = []
+
+ result
+end
+
+def _reduce_460(val, _values, result)
+ result = val[0] << 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 = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_464(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ @lexer.cond.push(false)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ @lexer.cond.lexpop
+ @lexer.cmdarg.lexpop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_467(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_469(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 470 omitted
+
+def _reduce_471(val, _values, result)
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_472(val, _values, result)
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_473(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_474(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_475(val, _values, result)
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_476(val, _values, result)
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_477(val, _values, result)
+ result = @builder.rational(val[0])
+
+ result
+end
+
+def _reduce_478(val, _values, result)
+ result = @builder.complex(val[0])
+
+ result
+end
+
+def _reduce_479(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_480(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_481(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_482(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_483(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_484(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_485(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_489(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_490(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_491(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_492(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_493(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_497(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_498(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_499(val, _values, result)
+ result = [ val[0], val[2] ]
+
+ result
+end
+
+def _reduce_500(val, _values, result)
+ yyerrok
+ result = nil
+
+ result
+end
+
+def _reduce_501(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_502(val, _values, result)
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_503(val, _values, result)
+ @context.in_kwarg = val[0]
+ result = @builder.args(nil, val[1], nil)
+
+ result
+end
+
+def _reduce_504(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_505(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_507(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_509(val, _values, result)
+ result = []
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_512(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ 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[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[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[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]
+
+ result
+end
+
+def _reduce_524(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_525(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_526(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_527(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_528(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 529 omitted
+
+def _reduce_530(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_531(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_532(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_533(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_534(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_535(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_536(val, _values, result)
+ check_kwarg_name(val[0])
+
+ @static_env.declare val[0][0]
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_537(val, _values, result)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_538(val, _values, result)
+ result = @builder.kwarg(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 = [ val[0] ]
+
+ result
+end
+
+def _reduce_542(val, _values, result)
+ result = val[0] << val[2]
+
+ 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
+
+# reduce 545 omitted
+
+# reduce 546 omitted
+
+def _reduce_547(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_548(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ result
+end
+
+def _reduce_549(val, _values, result)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_550(val, _values, result)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_551(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_552(val, _values, result)
+ result = val[0] << 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
+
+# reduce 555 omitted
+
+# reduce 556 omitted
+
+def _reduce_557(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_558(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 559 omitted
+
+# reduce 560 omitted
+
+def _reduce_561(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+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[1]
+
+ result
+end
+
+def _reduce_566(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 567 omitted
+
+def _reduce_568(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_569(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_570(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_571(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_572(val, _values, result)
+ result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_573(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# 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
+
+# reduce 587 omitted
+
+# reduce 588 omitted
+
+# reduce 589 omitted
+
+def _reduce_590(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_591(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 592 omitted
+
+# reduce 593 omitted
+
+# reduce 594 omitted
+
+def _reduce_595(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 596 omitted
+
+# reduce 597 omitted
+
+# reduce 598 omitted
+
+def _reduce_599(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby22
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby23.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby23.rb
new file mode 100644
index 000000000..c0430f00c
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby23.rb
@@ -0,0 +1,6669 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-580,-98,540,-101,518,-104,695,-580,-580,-580,272,-103,-580,-580,-580',
+'115,-580,272,540,582,114,221,218,219,-83,-580,-580,-580,-580,580,540',
+'785,967,546,-69,871,-580,-580,540,-580,-580,-580,-580,-580,-493,-105',
+'-99,817,785,-97,-97,-91,399,540,111,218,219,401,400,-286,-98,-104,222',
+'123,-100,-102,-580,-580,-580,-580,-580,-580,-580,-580,-580,-580,-580',
+'-580,-580,-580,-576,695,-580,-580,-580,581,751,-580,-577,-105,-580,695',
+'-104,-580,-580,579,-580,271,-580,-286,-580,-97,-580,-580,271,-580,-580',
+'-580,-580,-580,115,-580,-580,-580,-100,114,222,-91,-102,-98,115,-101',
+'208,-104,-98,114,-101,-580,-104,-103,-580,-580,-580,-580,-103,-580,115',
+'-580,-482,822,-99,114,-580,-101,870,-482,-482,-482,115,222,-482,-482',
+'-482,114,-482,-90,115,-91,209,-88,-91,114,-482,-105,-482,-482,-482,-97',
+'-105,-89,-91,115,-97,-90,-482,-482,114,-482,-482,-482,-482,-482,-100',
+'-102,210,115,217,-100,-102,-101,114,617,218,219,-92,115,749,261,-96',
+'552,114,-95,-103,553,-482,-482,-482,-482,-482,-482,-482,-482,-482,-482',
+'-482,-482,-482,-482,320,272,-482,-482,-482,-91,-482,-482,616,-93,-482',
+'321,-93,-482,-482,222,-482,389,-482,402,-482,-90,-482,-482,750,-482',
+'-482,-482,-482,-482,-289,-482,-494,-482,446,-100,-576,-289,-289,-289',
+'-99,-576,-92,-289,-289,-99,-289,-482,617,-577,-482,-482,-482,-482,447',
+'-482,448,-482,-580,617,449,-90,-482,-482,-90,267,-289,-289,222,-289',
+'-289,-289,-289,-289,-90,218,219,-479,-93,214,-92,-102,-92,616,-479,-92',
+'265,530,271,-98,532,272,617,-94,616,-92,-289,-289,-289,-289,-289,-289',
+'-289,-289,-289,-289,-289,-289,-289,-289,-580,-105,-289,-289,-289,221',
+'600,-580,-93,480,-289,-93,-576,-289,93,94,-580,616,-289,840,-289,-93',
+'-289,-289,489,-289,-289,-289,-289,-289,-479,-289,-479,-289,215,-580',
+'491,-479,-479,-479,93,94,-479,-479,-479,267,-479,-289,493,530,-289,-289',
+'532,-94,-479,-289,-479,-479,-479,115,688,687,-289,-103,114,-580,-479',
+'-479,271,-479,-479,-479,-479,-479,-494,530,-99,672,529,669,668,667,672',
+'670,669,668,667,-486,670,501,115,-68,95,96,-486,114,-479,-479,-479,-479',
+'-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,115,222,-479,-479',
+'-479,114,-479,-479,95,96,-479,-89,567,-479,-479,567,-479,567,-479,567',
+'-479,-98,-479,-479,504,-479,-479,-479,-479,-479,567,-479,-289,-479,222',
+'218,219,971,115,-289,-289,-289,-486,114,-289,-289,-289,-479,-289,986',
+'-479,-479,-479,-479,889,-479,115,-479,-289,-289,-289,114,-479,-479,530',
+'-573,216,532,-289,-289,505,-289,-289,-289,-289,-289,569,568,565,569',
+'568,569,568,569,568,565,817,785,512,728,276,726,222,632,569,568,570',
+'267,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289',
+'-289,242,-96,-289,-289,-289,-479,752,-289,218,219,-289,-105,-479,-289',
+'-289,567,-289,-573,-289,515,-289,-479,-289,-289,519,-289,-289,-289,-289',
+'-289,242,-289,239,-289,218,219,241,240,567,672,-573,669,668,667,677',
+'670,567,-289,222,567,-289,-289,-289,-289,680,-289,81,-289,-580,533,735',
+'534,-289,-103,493,-580,-580,-580,82,546,-479,-580,-580,391,-580,550',
+'675,551,83,569,568,572,559,-580,584,685,684,688,687,-491,587,-574,681',
+'-261,-580,-580,-491,-580,-580,-580,-580,-580,569,568,578,-491,589,-90',
+'222,-485,569,568,574,569,568,583,-485,-99,222,118,119,120,121,122,-580',
+'-580,-580,-580,-580,-580,-580,-580,-580,-580,-580,-580,-580,-580,593',
+'594,-580,-580,-580,-482,601,-484,214,267,-580,604,-482,-580,-484,555',
+'-491,-574,-580,607,-580,-482,-580,-580,557,-580,-580,-580,-580,-580',
+'242,-580,-580,-580,242,242,-485,-487,-492,518,-574,214,-279,-493,-487',
+'-492,242,-580,511,-279,-580,-580,-582,-92,-492,-580,222,509,-279,-582',
+'-582,-582,-580,-101,-582,-582,-582,214,-582,222,-482,222,-484,215,549',
+'-83,636,-582,-582,-582,-582,222,523,547,647,652,-95,653,-582,-582,-88',
+'-582,-582,-582,-582,-582,-104,214,655,691,-97,-333,-487,-492,444,546',
+'215,-279,-333,-490,698,715,725,445,729,730,-490,-333,-582,-582,-582',
+'-582,-582,-582,-582,-582,-582,-582,-582,-582,-582,-582,215,214,-582',
+'-582,-582,-262,736,-582,521,480,-582,480,-488,-582,-582,222,-582,445',
+'-582,-488,-582,754,-582,-582,261,-582,-582,-582,-582,-582,215,-582,-582',
+'-582,-333,491,214,-489,-290,-482,493,778,-490,265,-489,-290,-482,-582',
+'242,647,-582,-582,-582,-582,-290,-582,-414,-582,222,595,267,596,-582',
+'-414,-414,-414,215,267,-414,-414,-414,214,-414,647,242,785,222,-488',
+'213,794,239,-414,-414,-414,241,240,797,211,798,800,802,804,-414,-414',
+'812,-414,-414,-414,-414,-414,813,215,-489,-290,-482,-289,-91,672,-93',
+'669,668,667,-289,670,814,785,-100,-577,-102,821,222,-289,-414,-414,-414',
+'-414,-414,-414,-414,-414,-414,-414,-414,-414,-414,-414,215,222,-414',
+'-414,-414,830,-263,-414,806,267,-414,839,842,-414,-414,797,-414,809',
+'-414,845,-414,847,-414,-414,849,-414,-414,-414,-414,-414,-296,-414,-414',
+'-414,-289,851,222,-296,-296,-296,853,854,-296,-296,-296,214,-296,-414',
+'242,857,-414,-414,922,-414,859,-414,-296,-296,860,720,721,557,-414,722',
+'109,110,-296,-296,647,-296,-296,-296,-296,-296,862,214,-261,866,868',
+'214,239,222,922,887,241,240,977,237,238,222,891,557,893,899,902,975',
+'-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296',
+'215,-290,-296,-296,-296,222,906,-296,-290,276,-296,-264,916,-296,-296',
+'923,-296,-290,-296,924,-296,935,-296,-296,797,-296,-296,-296,-296,-296',
+'215,-296,-581,-296,215,937,939,941,943,-581,-581,-581,677,943,-581,-581',
+'-581,-296,-581,222,-296,-296,680,-296,949,-296,952,-581,-581,-581,-581',
+'919,-296,669,668,667,-290,670,-581,-581,953,-581,-581,-581,-581,-581',
+'919,-289,669,668,667,958,670,715,-289,688,687,797,961,-577,681,963,965',
+'-289,967,967,978,988,-581,-581,-581,-581,-581,-581,-581,-581,-581,-581',
+'-581,-581,-581,-581,-577,677,-581,-581,-581,-576,652,-581,1003,1004',
+'-581,680,1005,-581,-581,943,-581,943,-581,943,-581,1010,-581,-581,988',
+'-581,-581,-581,-581,-581,-289,-581,-581,-581,118,119,120,121,122,118',
+'119,120,121,122,688,687,1013,-581,1014,681,-581,-581,-581,-581,1015',
+'-581,-244,-581,967,967,967,222,-581,-244,-244,-244,988,943,-244,-244',
+'-244,672,-244,669,668,667,677,670,242,988,,-244,-244,,,672,680,669,668',
+'667,,670,-244,-244,,-244,-244,-244,-244,-244,672,,669,668,667,,670,',
+'675,,239,,,,241,240,,237,238,688,687,,806,672,681,669,668,667,,670,',
+'948,,-244,,-280,,806,,,-244,,-280,-280,-280,267,-244,-280,-280,-280',
+'672,-280,669,668,667,,670,,,,806,-280,-280,-280,,,,,-244,-244,,-280',
+'-280,,-280,-280,-280,-280,-280,,,,,-244,,,-244,806,,,,-244,,,,,809,',
+'-244,,,-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,,,672,,669,668,667,,670,',
+',,,-280,,,-280,-280,-280,-280,,-280,-244,-280,,,,,-280,-244,-244,-244',
+',,-244,-244,-244,242,-244,806,,,,,,,,-244,-244,-244,,,,256,257,,,,-244',
+'-244,,-244,-244,-244,-244,-244,,,,239,,245,,241,240,,237,238,,,243,',
+'244,,,,,,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244',
+'-244,-244,,,-244,-244,-244,,,-244,,267,-244,,,-244,-244,,-244,,-244',
+',-244,,-244,-244,,-244,-244,-244,-244,-244,,-244,-244,-244,672,,669',
+'668,667,,670,,672,,669,668,667,-244,670,,-244,-244,,-244,,-244,294,74',
+'75,71,9,57,-244,,,63,64,,,,67,806,65,66,68,30,31,72,73,806,,,,,29,28',
+'27,103,102,104,105,,,19,,,,,605,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250,258,259',
+'254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241',
+'240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',260,,-238,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,605,8,45,296,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251,252',
+'253,248,250,258,259,254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60',
+',35,239,,245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,',
+'86,88,87,89,,,,,82,90,,260,,,,,62,,83,95,96,5,74,75,71,9,57,,,,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,590',
+'8,45,7,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242',
+'246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,40,,,33',
+',,58,59,,,60,,35,239,,245,44,241,240,,237,238,249,247,243,20,244,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62,,83,95,96,294,74,75,71',
+'9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,42,43,41,242,246,251,252,253,248,250,258,259,254,255,,235,236',
+',,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238,249',
+'247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62,,83',
+'95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250,258,259',
+'254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241',
+'240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',260,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251,252,253',
+'248,250,258,259,254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60,,35',
+'239,,245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,260,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45',
+'296,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242',
+'246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,40,,,33',
+',,58,59,,,60,,35,239,,245,44,241,240,,237,238,249,247,243,20,244,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62,,83,95,96,294,74,75,71',
+'9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,42,43,41,242,246,251,252,253,248,250,258,259,254,255,,235,236',
+',,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238,249',
+'247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62,,83',
+'95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250,258,259',
+'254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241',
+'240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',260,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251,252,253',
+'248,250,258,259,254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60,,35',
+'239,,245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,260,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45',
+'296,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242',
+'246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,40,,,33',
+',,58,59,,,60,,35,239,,245,44,241,240,,237,238,249,247,243,20,244,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62,,83,95,96,5,74,75,71',
+'9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,7,10,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256',
+'257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238,249,247,243',
+'20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62,,83,95,96,294',
+'74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,242,246,251,252,253,248,250,258,259,254,255,,235',
+'236,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238',
+'249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62',
+',83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,',
+',,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250,258',
+'259,254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44',
+'241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,',
+'82,90,,260,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251,252',
+'253,248,250,258,259,254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60',
+',35,239,,245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,',
+'86,88,87,89,,,,,82,90,,260,,,,,62,,83,95,96,5,74,75,71,9,57,,,,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,',
+'8,45,7,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242',
+'246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,40,,,33',
+',,58,59,,,60,,35,239,,245,44,241,240,,237,238,249,247,243,20,244,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,222,260,,,,,62,,83,95,96,294,74,75',
+'71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,42,43,41,242,246,251,252,253,248,250,258,259,254,255,,235,236',
+',,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238,249',
+'247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62,,83',
+'95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250,,,254,255',
+',,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238',
+'249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83',
+'95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,-601,-601,-601,-601,248,250,,,-601',
+'-601,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237',
+'238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62',
+',83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,',
+',,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,242,-601,-601,-601,-601,248,250',
+',,-601,-601,,,,,,256,257,,40,,,298,,,58,59,,,60,,35,239,,245,44,241',
+'240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248',
+'250,258,,254,255,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44',
+'241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,',
+'82,90,,,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,,,,,,,,,,,',
+',,,,256,257,,40,,,298,,,58,59,,,60,,35,239,,245,44,241,240,,237,238',
+',,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96',
+'294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,242,-601,-601,-601,-601,248,250,,,-601,-601',
+',,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238',
+'249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83',
+'95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,-601,-601,-601,-601,248,250,,,-601',
+'-601,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237',
+'238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62',
+',83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,',
+',,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250,258',
+'259,254,255,,-601,-601,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245',
+'44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,',
+',,,82,90,,,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,-601,-601,-601',
+'-601,248,250,,,-601,-601,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239',
+',245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,-601,-601',
+'-601,-601,248,250,,,-601,-601,,,,,,256,257,,40,,,33,,,58,59,,,60,,35',
+'239,,245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296',
+'10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,,,,',
+',,,,,,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237',
+'238,,,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83',
+'95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250,258,259',
+'254,255,,-601,-601,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241',
+'240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,,,,,,,,,,,,,,,,256',
+'257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238,,,243,20',
+'244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,294,74',
+'75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,242,,,,,,,,,,,,,,,,256,257,,40,,,298,,,58,59,,,60,,35',
+'239,,,44,241,240,,237,238,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,',
+',,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,242,,,,,,,,,,,,,,,,256,257,,227',
+',,233,,,58,59,,,60,,,239,,245,44,241,240,,237,238,,,,232,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311',
+',242,107,106,108,97,56,99,98,100,,101,109,110,,93,94,256,257,317,,,',
+',,,,,,,,,,239,,245,,241,240,307,237,238,303,,,58,59,,,60,,,,,,,,,,,',
+',,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96',
+'63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105',
+',,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,74,75,71,9,57,,,',
+'63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19',
+',,,,,8,45,,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,629,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,',
+',307,,,233,,,58,59,,,60,,,672,,669,668,667,677,670,,,,,,,,,680,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,507,,675,62,,83,95,96,74,75,71,,57,688',
+'687,,63,64,681,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,283,,44,,,289,,,',
+',,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,311,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,317',
+',,,,,,,,,,,,,,,,,,,307,,,303,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,,,856,,,233',
+',,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309',
+'310,316,103,102,104,105,,,234,,,,,,,311,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,,,930,,,233,,,58,59,,,60',
+',,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103',
+'102,104,105,,,234,,,,,,,311,,,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,,,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,58,59,,,60,,302,,,,,,,,',
+',,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,311,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+',,317,,,,,,,,,,,,,,,,,,,,307,,,233,,,58,59,,,60,,,672,,669,668,667,677',
+'670,,,,,,,,,680,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,319,,675,62,',
+'83,95,96,74,75,71,,57,688,687,,63,64,681,,,67,,65,66,68,313,314,72,73',
+',,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56',
+'99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,,,,62,,83,95,96,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,7,10,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33',
+',,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,',
+',29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,',
+'60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,',
+',,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,',
+',,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,',
+',,,,311,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,317,,,,',
+',,,,,,,,,,,,,,,307,,,303,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,',
+',,,227,,,233,,,58,59,,,60,,629,,283,,44,,,289,,,,,,232,,,,,91,286,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,222,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,523,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,',
+',,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58',
+'59,,,60,,733,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,',
+',,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,',
+',,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,',
+',,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,407,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,',
+',,,227,,,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,',
+',,,,,,,227,,,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,,,,44,,,,,,,,,232,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311',
+',,107,106,108,356,56,99,98,357,,101,109,110,,93,94,,,317,,,,,,,,,,,',
+',,,,,363,,,358,,,233,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,',
+',351,,,33,,,58,59,,,60,,35,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58',
+'59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,',
+',74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309',
+'310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,',
+'60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,115,,,,,114,62,,83,95,96,74,75',
+'71,,57,,,,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102',
+'104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72',
+'73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,',
+',,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58',
+'59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309',
+'310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,',
+'60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310',
+'316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,',
+',,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316',
+'103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102',
+'104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56',
+'99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86',
+'88,87,89,,,,,82,90,222,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311,,',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,',
+',,,,,856,,,233,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72',
+'73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,',
+',,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58',
+'59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309',
+'310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,',
+'60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310',
+'316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,',
+',,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316',
+'103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102',
+'104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,407,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,',
+',,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,',
+',,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72',
+'73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,',
+',,,309,310,316,103,102,104,105,,,234,,,,,,,311,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,58,59',
+',,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75',
+'71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,',
+'283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310',
+'316,103,102,104,105,,,234,,,,,,,311,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,58,59,,,60,,,672',
+',669,668,667,677,670,,,,,,,,,680,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',,,,,675,62,,83,95,96,74,75,71,9,57,688,687,,63,64,681,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,,10,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56',
+'99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,',
+',,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58',
+'59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,',
+',,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,74,75',
+'71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,',
+',,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,391,62,,83,95,96',
+'74,75,71,,57,,,,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316',
+'103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102',
+'104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,283,,44',
+',,289,,,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103',
+'102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,629,',
+'283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310',
+'316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288',
+'101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60',
+',285,,,,44,,,289,,,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,',
+',74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28',
+'27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,',
+',,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,74,75,71,9,57',
+',,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',19,,,,,,8,45,7,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42',
+'43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,391,62,,83,95,96,74,75,71',
+',57,,,,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102',
+'104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,',
+',,45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,',
+',,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232',
+',,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,',
+',311,,,107,106,108,356,56,99,98,357,,101,109,110,,93,94,,,317,,,,,,',
+',,,,,,,,,,,,,358,,,233,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,',
+'86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,',
+',,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,289,,,,,,232,,,,,91,286,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,',
+',,,227,,,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45',
+',,107,106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,',
+',,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,289,,,,,,232,,,,,91,286',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,',
+',45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,629,,,,44,,,289,,,,,,232,,',
+',,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,',
+',,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,',
+',,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,',
+',107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,',
+',,,,,,,,,227,,,233,,,58,59,,,60,,407,,,,44,,,,,,,,,232,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,',
+',,,227,,,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,175,186,176,199,172,192,182,181,202',
+'203,197,180,179,174,200,204,205,184,173,187,191,193,185,178,,,,194,201',
+'196,195,188,198,183,171,190,189,,,,,,170,177,168,169,165,166,167,126',
+'128,,,127,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161',
+'162,148,149,,,,,,,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143',
+'135,157,136,,,164,91,,,,,,,,,,,,,,90,175,186,176,199,172,192,182,181',
+'202,203,197,180,179,174,200,204,205,184,173,187,191,193,185,178,,,,194',
+'201,196,195,188,198,183,171,190,189,,,,,,170,177,168,169,165,166,167',
+'126,128,,,127,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142',
+',,,161,162,148,149,,,,,,,,,,,,,,153,152,,137,158,155,154,163,150,151',
+'145,143,135,157,136,,,164,91,,,,,,,,,,,,,,90,175,186,176,199,172,192',
+'182,181,202,203,197,180,179,174,200,204,205,184,173,187,191,193,185',
+'178,,,,194,201,196,195,188,198,183,171,190,189,,,,,,170,177,168,169',
+'165,166,167,126,128,,,127,,,,,,,,159,160,,156,138,139,140,147,144,146',
+',,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153,152,,137,158,155,154,163',
+'150,151,145,143,135,157,136,,,164,91,,,,,,,,,,,,,,90,175,186,176,199',
+'172,192,182,181,202,203,197,180,179,174,200,204,205,184,173,187,191',
+'193,185,178,,,,194,201,196,195,188,198,183,171,190,189,,,,,,170,177',
+'168,169,165,166,167,126,128,125,,127,,,,,,,,159,160,,156,138,139,140',
+'147,144,146,,,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153,152,,137,158',
+'155,154,163,150,151,145,143,135,157,136,,,164,91,,,,,,,,,,,,,,90,175',
+'186,176,199,172,192,182,181,202,203,197,180,179,174,200,204,205,184',
+'173,187,191,193,185,178,,,,194,201,196,195,188,198,183,171,190,189,',
+',,,,170,177,168,169,165,166,167,126,128,,,127,,,,,,,,159,160,,156,138',
+'139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153,152',
+',137,158,155,154,163,150,151,145,143,135,157,136,,,164,175,186,176,199',
+'172,192,182,181,202,203,197,180,179,174,200,204,205,184,173,187,191',
+'193,185,178,,,,194,201,196,374,373,375,372,171,190,189,,,,,,170,177',
+'168,169,369,370,371,367,128,99,98,368,,101,,,,,,159,160,,156,138,139',
+'140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,379,,,,,,,,153,152',
+',137,158,155,154,163,150,151,145,143,135,157,136,973,427,164,,972,,',
+',,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149',
+',,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157',
+'136,608,420,164,,609,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141',
+'142,,,,161,162,148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163',
+'150,151,145,143,135,157,136,610,427,164,,611,,,,,,,,159,160,,156,138',
+'139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,,,153',
+'152,,137,158,155,154,163,150,151,145,143,135,157,136,703,427,164,,704',
+',,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148',
+'149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135',
+'157,136,1001,427,164,,1002,,,,,,,,159,160,,156,138,139,140,147,144,146',
+',,141,142,,,,161,162,148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154',
+'163,150,151,145,143,135,157,136,999,420,164,,1000,,,,,,,,159,160,,156',
+'138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,',
+',153,152,,137,158,155,154,163,150,151,145,143,135,157,136,610,427,164',
+',611,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162',
+'148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143',
+'135,157,136,416,420,164,,417,,,,,,,,159,160,,156,138,139,140,147,144',
+'146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,,,153,152,,137,158,155',
+'154,163,150,151,145,143,135,157,136,608,420,164,,609,,,,,,,,159,160',
+',156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,267,',
+',,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136,423,427',
+'164,,422,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161',
+'162,148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145',
+'143,135,157,136,478,420,164,,479,,,,,,,,159,160,,156,138,139,140,147',
+'144,146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,,,153,152,,137,158',
+'155,154,163,150,151,145,143,135,157,136,701,420,164,,702,,,,,,,,159',
+'160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,267',
+',,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136,643',
+'427,164,,644,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,',
+',,161,162,148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151',
+'145,143,135,157,136,706,427,164,,707,,,,,,,,159,160,,156,138,139,140',
+'147,144,146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,,,153,152,,137',
+'158,155,154,163,150,151,145,143,135,157,136,640,420,164,,641,,,,,,,',
+'159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,',
+',,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136',
+'478,420,164,,479,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142',
+',,,161,162,148,149,672,,669,668,667,677,670,,,,,,,153,152,680,137,158',
+'155,154,163,150,151,145,143,135,157,136,,672,164,669,668,667,677,670',
+'672,675,669,668,667,677,670,,680,,,,688,687,,680,,681,672,,669,668,667',
+'677,670,,,,,,675,658,,680,,,,675,,685,684,688,687,,,,681,,688,687,,',
+',681,672,675,669,668,667,677,670,,,,685,684,688,687,,680,,681,672,,669',
+'668,667,677,670,672,,669,668,667,677,670,,680,,,,675,,672,680,669,668',
+'667,677,670,685,684,688,687,,,,681,680,675,,,,,,,675,,,,688,687,,,,681',
+',688,687,,675,,681,,,,,,,685,684,688,687,,,672,681,669,668,667,677,670',
+',672,,669,668,667,677,670,680,,,,,,,,680,,672,,669,668,667,677,670,',
+',,,,675,,,680,,,,,675,685,684,688,687,,,,681,685,684,688,687,,,,681',
+'675,,672,,669,668,667,677,670,685,684,688,687,,,,681,680,,672,,669,668',
+'667,677,670,,672,,669,668,667,677,670,680,,,,,675,,,680,,,,,,685,684',
+'688,687,,,,681,675,,,,,,,,675,,,688,687,,,,681,685,684,688,687,,,672',
+'681,669,668,667,677,670,672,,669,668,667,677,670,,680,,,,,,,680,,,,',
+',,,,,,,,,,675,,,,,,,675,,685,684,688,687,,,,681,,688,687,,,,681' ]
+ racc_action_table = arr = ::Array.new(25101, 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 = [
+'610,928,865,1001,446,978,542,610,610,610,61,1002,610,610,610,3,610,620',
+'699,387,3,19,650,650,635,610,610,610,610,386,341,897,1023,897,635,792',
+'610,610,342,610,610,610,610,610,225,931,824,989,989,927,348,640,125',
+'892,1,440,440,125,125,58,349,446,19,7,999,1000,610,610,610,610,610,610',
+'610,610,610,610,610,610,610,610,1001,825,610,610,610,387,610,610,1002',
+'352,610,543,550,610,610,386,610,61,610,58,610,225,610,610,620,610,610',
+'610,610,610,542,610,610,610,701,542,650,640,702,928,865,1001,10,978',
+'928,865,1001,610,978,1002,610,610,610,610,1002,610,699,610,100,699,1020',
+'699,610,610,792,100,100,100,341,440,100,100,100,341,100,824,342,640',
+'12,348,640,342,100,931,100,100,100,927,931,349,640,892,927,780,100,100',
+'892,100,100,100,100,100,999,1000,13,825,16,999,1000,703,825,621,564',
+'564,643,543,608,22,352,358,543,550,704,358,100,100,100,100,100,100,100',
+'100,100,100,100,100,100,100,37,312,100,100,100,701,100,100,621,702,100',
+'40,641,100,100,45,100,111,100,206,100,780,100,100,609,100,100,100,100',
+'100,422,100,226,100,227,608,703,422,422,422,1020,643,643,422,422,1020',
+'422,100,476,704,100,100,100,100,228,100,229,100,706,484,230,780,100',
+'100,780,312,422,422,564,422,422,422,422,422,780,560,560,367,641,377',
+'703,609,643,476,367,643,377,333,312,226,333,26,485,704,484,643,422,422',
+'422,422,422,422,422,422,422,422,422,422,422,422,706,228,422,422,422',
+'234,422,706,641,266,422,641,706,422,41,41,706,485,422,753,422,641,422',
+'422,280,422,422,422,422,422,97,422,367,422,377,706,281,97,97,97,317',
+'317,97,97,97,26,97,422,284,656,422,422,656,422,97,422,97,97,97,560,797',
+'797,422,422,560,706,97,97,26,97,97,97,97,97,39,332,753,948,332,948,948',
+'948,809,948,809,809,809,375,809,296,292,297,41,41,375,292,97,97,97,97',
+'97,97,97,97,97,97,97,97,97,97,828,299,97,97,97,828,97,97,317,317,97',
+'39,495,97,97,577,97,575,97,381,97,39,97,97,300,97,97,97,97,97,382,97',
+'611,97,917,340,340,917,833,611,611,611,375,833,611,611,611,97,611,948',
+'97,97,97,97,809,97,345,97,611,611,611,345,97,97,336,356,15,336,611,611',
+'301,611,611,611,611,611,495,495,495,577,577,575,575,381,381,381,690',
+'690,307,577,310,575,311,495,382,382,382,316,611,611,611,611,611,611',
+'611,611,611,611,611,611,611,611,452,15,611,611,611,356,611,611,526,526',
+'611,15,356,611,611,383,611,356,611,318,611,356,611,611,322,611,611,611',
+'611,611,325,611,452,611,17,17,452,452,385,616,356,616,616,616,616,616',
+'384,611,330,388,611,611,611,611,616,611,79,611,423,334,591,335,611,611',
+'337,423,423,423,79,346,356,423,423,347,423,351,616,353,79,383,383,383',
+'362,423,397,616,616,616,616,304,403,357,616,406,423,423,304,423,423',
+'423,423,423,385,385,385,304,408,591,412,374,384,384,384,388,388,388',
+'374,591,616,6,6,6,6,6,423,423,423,423,423,423,423,423,423,423,423,423',
+'423,423,414,415,423,423,423,357,423,373,360,424,423,432,357,423,373',
+'360,304,357,423,442,423,357,423,423,360,423,423,423,423,423,454,423',
+'423,423,455,456,374,372,305,321,357,306,308,38,372,305,457,423,306,308',
+'423,423,428,423,305,423,482,306,308,428,428,428,423,423,428,428,428',
+'350,428,486,357,502,373,360,350,503,506,428,428,428,428,508,513,350',
+'516,524,321,525,428,428,38,428,428,428,428,428,321,224,527,539,38,46',
+'372,305,224,544,306,308,46,371,545,562,572,224,580,582,371,46,428,428',
+'428,428,428,428,428,428,428,428,428,428,428,428,350,323,428,428,428',
+'588,592,428,323,597,428,602,370,428,428,612,428,323,428,370,428,614',
+'428,428,619,428,428,428,428,428,224,428,428,428,46,626,24,369,512,368',
+'628,634,371,24,369,512,368,428,453,637,428,428,428,428,512,428,27,428',
+'639,416,642,417,428,27,27,27,323,645,27,27,27,14,27,646,649,651,654',
+'370,14,660,453,27,27,27,453,453,661,14,663,664,665,674,27,27,682,27',
+'27,27,27,27,686,24,369,512,368,644,416,806,417,806,806,806,644,806,689',
+'692,416,644,417,697,700,644,27,27,27,27,27,27,27,27,27,27,27,27,27,27',
+'14,709,27,27,27,713,732,27,806,27,27,737,755,27,27,756,27,806,27,758',
+'27,759,27,27,760,27,27,27,27,27,28,27,27,27,644,762,763,28,28,28,764',
+'765,28,28,28,855,28,27,471,769,27,27,855,27,773,27,28,28,774,568,568',
+'855,27,568,568,568,28,28,779,28,28,28,28,28,783,921,786,787,790,929',
+'471,793,921,808,471,471,929,471,471,810,815,921,818,827,831,929,28,28',
+'28,28,28,28,28,28,28,28,28,28,28,28,855,553,28,28,28,832,835,28,553',
+'28,28,836,852,28,28,856,28,553,28,858,28,872,28,28,873,28,28,28,28,28',
+'921,28,427,28,929,877,878,880,881,427,427,427,794,883,427,427,427,28',
+'427,886,28,28,794,28,888,28,894,427,427,427,427,853,28,853,853,853,553',
+'853,427,427,895,427,427,427,427,427,971,707,971,971,971,901,971,905',
+'707,794,794,907,910,707,794,911,912,707,913,915,930,950,427,427,427',
+'427,427,427,427,427,427,427,427,427,427,427,972,842,427,427,427,973',
+'974,427,979,980,427,842,981,427,427,982,427,983,427,984,427,985,427',
+'427,987,427,427,427,427,427,707,427,427,427,295,295,295,295,295,500',
+'500,500,500,500,842,842,990,427,991,842,427,427,427,427,992,427,477',
+'427,993,994,995,998,427,477,477,477,1011,1021,477,477,477,1015,477,1015',
+'1015,1015,1015,1015,472,1022,,477,477,,,887,1015,887,887,887,,887,477',
+'477,,477,477,477,477,477,1010,,1010,1010,1010,,1010,,1015,,472,,,,472',
+'472,,472,472,1015,1015,,887,889,1015,889,889,889,,889,,887,,477,,56',
+',1010,,,477,,56,56,56,477,477,56,56,56,675,56,675,675,675,,675,,,,889',
+'56,56,56,,,,,477,477,,56,56,,56,56,56,56,56,,,,,477,,,477,675,,,,477',
+',,,,675,,477,,,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,,,988,',
+'988,988,988,,988,,,,,56,,,56,56,56,56,,56,418,56,,,,,56,418,418,418',
+',,418,418,418,464,418,988,,,,,,,,418,418,418,,,,464,464,,,,418,418,',
+'418,418,418,418,418,,,,464,,464,,464,464,,464,464,,,464,,464,,,,,,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,986,,986,986,986,,986,,949,,949,949,949,418,949,,418,418',
+',418,,418,624,624,624,624,624,624,418,,,624,624,,,,624,986,624,624,624',
+'624,624,624,624,949,,,,,624,624,624,624,624,624,624,,,624,,,,,435,624',
+'624,624,624,624,624,624,624,624,624,624,624,,624,624,624,,624,624,624',
+'624,624,435,435,435,435,435,435,435,435,435,435,435,,435,435,,,435,435',
+',624,,,624,,,624,624,,,624,,624,435,,435,624,435,435,,435,435,435,435',
+'435,624,435,,,,624,624,624,624,,624,624,624,624,,,,,624,624,,435,,435',
+',,624,,624,624,624,926,926,926,926,926,926,,,,926,926,,,,926,,926,926',
+'926,926,926,926,926,,,,,,926,926,926,926,926,926,926,,,926,,,,,613,926',
+'926,926,926,926,926,926,926,926,926,926,926,,926,926,926,,926,926,926',
+'926,926,613,613,613,613,613,613,613,613,613,613,613,,613,613,,,613,613',
+',926,,,926,,,926,926,,,926,,926,613,,613,926,613,613,,613,613,613,613',
+'613,926,613,,,,926,926,926,926,,926,926,926,926,,,,,926,926,,613,,,',
+',926,,926,926,926,123,123,123,123,123,123,,,,123,123,,,,123,,123,123',
+'123,123,123,123,123,,,,,,123,123,123,123,123,123,123,,,123,,,,,411,123',
+'123,123,123,123,123,123,123,123,123,123,123,,123,123,123,,123,123,123',
+'123,123,411,411,411,411,411,411,411,411,411,411,411,,411,411,,,411,411',
+',123,,,123,,,123,123,,,123,,123,411,,411,123,411,411,,411,411,411,411',
+'411,123,411,,,,123,123,123,123,,123,123,123,123,,,,,123,123,,411,,,',
+',123,,123,123,123,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,430,430,430,430,430,430,430,430,430,430,430,,430,430,,,430,430',
+',208,,,208,,,208,208,,,208,,208,430,,430,208,430,430,,430,430,430,430',
+'430,208,430,,,,208,208,208,208,,208,208,208,208,,,,,208,208,,430,,,',
+',208,,208,208,208,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,734,734,734,734,734,734,734,734,734,734,734,,734,734,,,734,734',
+',785,,,785,,,785,785,,,785,,785,734,,734,785,734,734,,734,734,734,734',
+'734,785,734,,,,785,785,785,785,,785,785,785,785,,,,,785,785,,734,,,',
+',785,,785,785,785,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,739,739,739,739,739,739,739,739,739,739,739,,739,739,,,739,739',
+',623,,,623,,,623,623,,,623,,623,739,,739,623,739,739,,739,739,739,739',
+'739,623,739,,,,623,623,623,623,,623,623,623,623,,,,,623,623,,739,,,',
+',623,,623,623,623,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,741,741,741,741,741,741,741,741,741,741,741,,741,741,,,741,741',
+',538,,,538,,,538,538,,,538,,538,741,,741,538,741,741,,741,741,741,741',
+'741,538,741,,,,538,538,538,538,,538,538,538,538,,,,,538,538,,741,,,',
+',538,,538,538,538,933,933,933,933,933,933,,,,933,933,,,,933,,933,933',
+'933,933,933,933,933,,,,,,933,933,933,933,933,933,933,,,933,,,,,,933',
+'933,933,933,933,933,933,933,933,933,933,933,,933,933,933,,933,933,933',
+'933,933,744,744,744,744,744,744,744,744,744,744,744,,744,744,,,744,744',
+',933,,,933,,,933,933,,,933,,933,744,,744,933,744,744,,744,744,744,744',
+'744,933,744,,,,933,933,933,933,,933,933,933,933,,,,,933,933,,744,,,',
+',933,,933,933,933,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,746,746,746,746,746,746,746,746,746,746,746,,746,746,,,746,746',
+',934,,,934,,,934,934,,,934,,934,746,,746,934,746,746,,746,746,746,746',
+'746,934,746,,,,934,934,934,934,,934,934,934,934,,,,,934,934,,746,,,',
+',934,,934,934,934,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,748,748,748,748,748,748,748,748,748,748,748,,748,748,,,748,748',
+',561,,,561,,,561,561,,,561,,561,748,,748,561,748,748,,748,748,748,748',
+'748,561,748,,,,561,561,561,561,,561,561,561,561,,,,,561,561,,748,,,',
+',561,,561,561,561,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,21,21,21,21,21,21,21,21,21,21,21,,21,21,,,21,21,,618,,,618,',
+',618,618,,,618,,618,21,,21,618,21,21,,21,21,21,21,21,618,21,,,,618,618',
+'618,618,,618,618,618,618,,,,,618,618,,21,,,,,618,,618,618,618,0,0,0',
+'0,0,0,,,,0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0,0',
+'0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,278,278,278,278,278,278,278,278,278',
+'278,278,,278,278,,,278,278,,0,,,0,,,0,0,,,0,,0,278,,278,0,278,278,,278',
+'278,278,278,278,0,278,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,278,,,,,0,,0,0,0',
+'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,648,648,648',
+'648,648,648,648,648,648,648,648,,648,648,,,648,648,,862,,,862,,,862',
+'862,,,862,,862,648,,648,862,648,648,,648,648,648,648,648,862,648,,,',
+'862,862,862,862,,862,862,862,862,,,,,862,862,,648,,,,,862,,862,862,862',
+'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,838,838,838',
+'838,838,838,838,838,838,838,838,,838,838,,,838,838,,959,,,959,,,959',
+'959,,,959,,959,838,,838,959,838,838,,838,838,838,838,838,959,838,,,',
+'959,959,959,959,,959,959,959,959,,,,,959,959,,838,,,,,959,,959,959,959',
+'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,841,841,841',
+'841,841,841,841,841,841,841,841,,841,841,,,841,841,,541,,,541,,,541',
+'541,,,541,,541,841,,841,541,841,841,,841,841,841,841,841,541,841,,,',
+'541,541,541,541,,541,541,541,541,,,,,541,541,,841,,,,,541,,541,541,541',
+'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,475,475,475',
+'475,475,475,475,475,475,475,475,,475,475,,,475,475,,501,,,501,,,501',
+'501,,,501,,501,475,,475,501,475,475,,475,475,475,475,475,501,475,,,',
+'501,501,501,501,,501,501,501,501,,,,,501,501,475,475,,,,,501,,501,501',
+'501,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,951,951,951',
+'951,951,951,951,951,951,951,,951,951,951,,951,951,951,951,951,522,522',
+'522,522,522,522,522,522,522,522,522,,522,522,,,522,522,,951,,,951,,',
+'951,951,,,951,,951,522,,522,951,522,522,,522,522,522,522,522,951,522',
+',,,951,951,951,951,,951,951,951,951,,,,,951,951,,522,,,,,951,,951,951',
+'951,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,823,823,823',
+'823,823,823,823,823,823,823,,823,823,823,,823,823,823,823,823,473,473',
+'473,473,473,473,473,,,473,473,,,,,,473,473,,823,,,823,,,823,823,,,823',
+',823,473,,473,823,473,473,,473,473,473,473,473,823,473,,,,823,823,823',
+'823,,823,823,823,823,,,,,823,823,,,,,,,823,,823,823,823,957,957,957',
+'957,957,957,,,,957,957,,,,957,,957,957,957,957,957,957,957,,,,,,957',
+'957,957,957,957,957,957,,,957,,,,,,957,957,957,957,957,957,957,957,957',
+'957,957,957,,957,957,957,,957,957,957,957,957,469,469,469,469,469,469',
+'469,,,469,469,,,,,,469,469,,957,,,957,,,957,957,,,957,,957,469,,469',
+'957,469,469,,469,469,469,469,469,957,469,,,,957,957,957,957,,957,957',
+'957,957,,,,,957,957,,,,,,,957,,957,957,957,33,33,33,33,33,33,,,,33,33',
+',,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,33,33',
+'33,33,33,33,33,33,33,33,33,33,,33,33,33,,33,33,33,33,33,470,470,470',
+'470,470,470,470,,,470,470,,,,,,470,470,,33,,,33,,,33,33,,,33,,33,470',
+',470,33,470,470,,470,470,470,470,470,33,470,,,,33,33,33,33,,33,33,33',
+'33,,,,,33,33,,,,,,,33,,33,33,33,710,710,710,710,710,710,,,,710,710,',
+',,710,,710,710,710,710,710,710,710,,,,,,710,710,710,710,710,710,710',
+',,710,,,,,,710,710,710,710,710,710,710,710,710,710,710,710,,710,710',
+'710,,710,710,710,710,710,474,474,474,474,474,474,474,474,,474,474,,',
+',,,474,474,,710,,,710,,,710,710,,,710,,710,474,,474,710,474,474,,474',
+'474,474,474,474,710,474,,,,710,710,710,710,,710,710,710,710,,,,,710',
+'710,,,,,,,710,,710,710,710,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,465,,,,,,,,,,,,,,,,465,465,,298,,,298,,,298,298,,,298',
+',298,465,,465,298,465,465,,465,465,,,465,298,465,,,,298,298,298,298',
+',298,298,298,298,,,,,298,298,,,,,,,298,,298,298,298,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,466,466,466,466,466,466,466',
+',,466,466,,,,,,466,466,,829,,,829,,,829,829,,,829,,829,466,,466,829',
+'466,466,,466,466,466,466,466,829,466,,,,829,829,829,829,,829,829,829',
+'829,,,,,829,829,,,,,,,829,,829,829,829,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,467,467,467,467,467,467,467,,,467,467,',
+',,,,467,467,,772,,,772,,,772,772,,,772,,772,467,,467,772,467,467,,467',
+'467,467,467,467,772,467,,,,772,772,772,772,,772,772,772,772,,,,,772',
+'772,,,,,,,772,,772,772,772,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,451,451,451,451,451,451,451,451,451,451,451,,451,451',
+',,451,451,,714,,,714,,,714,714,,,714,,714,451,,451,714,451,451,,451',
+'451,451,451,451,714,451,,,,714,714,714,714,,714,714,714,714,,,,,714',
+'714,,,,,,,714,,714,714,714,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,468,468,468,468,468,468,468,,,468,468,,,,,,468,468,',
+'724,,,724,,,724,724,,,724,,724,468,,468,724,468,468,,468,468,468,468',
+'468,724,468,,,,724,724,724,724,,724,724,724,724,,,,,724,724,,,,,,,724',
+',724,724,724,233,233,233,233,233,233,,,,233,233,,,,233,,233,233,233',
+'233,233,233,233,,,,,,233,233,233,233,233,233,233,,,233,,,,,,233,233',
+'233,233,233,233,233,233,233,233,233,233,,233,233,233,,233,233,233,233',
+'233,461,461,461,461,461,461,461,,,461,461,,,,,,461,461,,233,,,233,,',
+'233,233,,,233,,233,461,,461,233,461,461,,461,461,461,461,461,233,461',
+',,,233,233,233,233,,233,233,233,233,,,,,233,233,,,,,,,233,,233,233,233',
+'328,328,328,328,328,328,,,,328,328,,,,328,,328,328,328,328,328,328,328',
+',,,,,328,328,328,328,328,328,328,,,328,,,,,,328,328,328,328,328,328',
+'328,328,328,328,328,328,,328,328,328,,328,328,328,328,328,462,,,,,,',
+',,,,,,,,,462,462,,328,,,328,,,328,328,,,328,,328,462,,462,328,462,462',
+',462,462,,,462,328,462,,,,328,328,328,328,,328,328,328,328,,,,,328,328',
+',,,,,,328,,328,328,328,819,819,819,819,819,819,,,,819,819,,,,819,,819',
+'819,819,819,819,819,819,,,,,,819,819,819,819,819,819,819,,,819,,,,,',
+'819,819,819,819,819,819,819,819,819,819,819,819,,819,819,819,,819,819',
+'819,819,819,450,450,450,450,450,450,450,450,450,450,450,,450,450,,,450',
+'450,,819,,,819,,,819,819,,,819,,819,450,,450,819,450,450,,450,450,450',
+'450,450,819,450,,,,819,819,819,819,,819,819,819,819,,,,,819,819,,,,',
+',,819,,819,819,819,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,820,,820,820,820,,820,820,820',
+'820,820,463,,,,,,,,,,,,,,,,463,463,,820,,,820,,,820,820,,,820,,820,463',
+',463,820,463,463,,463,463,,,463,820,463,,,,820,820,820,820,,820,820',
+'820,820,,,,,820,820,,,,,,,820,,820,820,820,303,303,303,303,303,303,',
+',,303,303,,,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303,303',
+'303,303,,,303,,,,,,303,303,303,303,303,303,303,303,303,303,303,303,',
+'303,303,303,,303,303,303,303,303,460,,,,,,,,,,,,,,,,460,460,,303,,,303',
+',,303,303,,,303,,303,460,,,303,460,460,,460,460,,,,303,,,,,303,303,303',
+'303,,303,303,303,303,,,,,303,303,,,,238,238,238,303,238,303,303,303',
+'238,238,,,,238,,238,238,238,238,238,238,238,,,,,,238,238,238,238,238',
+'238,238,,,238,,,,,,,238,,,238,238,238,238,238,238,238,238,,238,238,238',
+',238,238,238,238,238,458,,,,,,,,,,,,,,,,458,458,,238,,,238,,,238,238',
+',,238,,,458,,458,238,458,458,,458,458,,,,238,,,,,238,238,238,238,,238',
+'238,238,238,,,,,238,238,,,,647,647,647,238,647,238,238,238,647,647,',
+',,647,,647,647,647,647,647,647,647,,,,,,647,647,647,647,647,647,647',
+',,647,,,,,,,647,,459,647,647,647,647,647,647,647,647,,647,647,647,,647',
+'647,459,459,647,,,,,,,,,,,,,,459,,459,,459,459,647,459,459,647,,,647',
+'647,,,647,,,,,,,,,,,,,,,,,,,,647,647,647,647,,647,647,647,647,,,,,647',
+'647,,,,237,237,237,647,237,647,647,647,237,237,,,,237,,237,237,237,237',
+'237,237,237,,,,,,237,237,237,237,237,237,237,,,237,,,,,,,237,,,237,237',
+'237,237,237,237,237,237,,237,237,237,,237,237,237,237,237,,,,,,,,,,',
+',,,,,,,,,237,,,237,,,237,237,,,237,,,,,,237,,,,,,,,,237,,,,,237,237',
+'237,237,,237,237,237,237,,,,,237,237,,,,804,804,804,237,804,237,237',
+'237,804,804,,,,804,,804,804,804,804,804,804,804,,,,,,804,804,804,804',
+'804,804,804,,,804,,,,,,,804,,,804,804,804,804,804,804,804,804,,804,804',
+'804,,804,804,804,804,804,,,,,,,,,,,,,,,,,,,,804,,,804,,,804,804,,,804',
+',,,,,804,,,,,,,,,804,,,,,804,804,804,804,,804,804,804,804,,,,,804,804',
+',,,236,236,236,804,236,804,804,804,236,236,,,,236,,236,236,236,236,236',
+'236,236,,,,,,236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236',
+'236,236,236,236,236,,236,236,236,,236,236,236,236,236,,,,,,,,,,,,,,',
+',,,,,236,,,236,,,236,236,,,236,,,,,,236,,,,,,,,,236,,,,,236,236,236',
+'236,,236,236,236,236,,,,,236,236,,,,,,,236,,236,236,236,294,294,294',
+'294,294,,,,294,294,,,,294,,294,294,294,294,294,294,294,,,,,,294,294',
+'294,294,294,294,294,,,294,,,,,,294,294,,294,294,294,294,294,294,294',
+'294,294,,294,294,294,,294,294,294,294,294,,,,,,,,,,,,,,,,,,,,294,,,294',
+',,294,294,,,294,,294,,,,294,,,,,,,,,294,,,,,294,294,294,294,,294,294',
+'294,294,,,,,294,294,,,,235,235,235,294,235,294,294,294,235,235,,,,235',
+',235,235,235,235,235,235,235,,,,,,235,235,235,235,235,235,235,,,235',
+',,,,,,235,,,235,235,235,235,235,235,235,235,,235,235,235,,235,235,235',
+'235,235,,,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,',
+',,235,,,,,235,235,235,235,,235,235,235,235,,,,,235,235,,,,817,817,817',
+'235,817,235,235,235,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,,,,,817,817,,,,822,822,822,817,822,817,817,817,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,822,,,,,822,822,,,,253,253,253',
+'822,253,822,822,822,253,253,,,,253,,253,253,253,253,253,253,253,,,,',
+',253,253,253,253,253,253,253,,,253,,,,,,,253,,,253,253,253,253,253,253',
+'253,253,,253,253,253,,253,253,253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253',
+',,253,253,,,253,,,,,,253,,,,,,,,,253,,,,,253,253,253,253,,253,253,253',
+'253,,,,,253,253,,,,29,29,29,253,29,253,253,253,29,29,,,,29,,29,29,29',
+'29,29,29,29,,,,,,29,29,29,29,29,29,29,,,29,,,,,,,29,,,29,29,29,29,29',
+'29,29,29,29,29,29,29,,29,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,,,,302,302,302,31,302,31,31',
+'31,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,,,1005',
+',1005,1005,1005,1005,1005,,,,,,,,,1005,,302,302,302,302,,302,302,302',
+'302,,,,,302,302,,,,302,,1005,302,,302,302,302,20,20,20,,20,1005,1005',
+',20,20,1005,,,20,,20,20,20,20,20,20,20,,,,,,20,20,20,20,20,20,20,,,20',
+',,,,,,20,,,20,20,20,20,20,20,20,20,,20,20,20,,20,20,20,20,20,,,,,,,',
+',,,,,,,,,,,,20,,,20,,,20,20,,,20,,,,,,20,,,,,,,,,20,,,,,20,20,20,20',
+',20,20,20,20,,,,,20,20,,,,839,839,839,20,839,20,20,20,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,,,,,,839,,,,,839,839,839,839,,839,839,839,839,,,,,839,839,,,,840',
+'840,840,839,840,839,839,839,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,840,840',
+',840,840,840,840,,,,,840,840,,,,636,636,636,840,636,840,840,840,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,,,,232,232,232',
+'636,232,636,636,636,232,232,,,,232,,232,232,232,232,232,232,232,,,,',
+',232,232,232,232,232,232,232,,,232,,,,,,,232,,,232,232,232,232,232,232',
+'232,232,,232,232,232,,232,232,232,232,232,,,,,,,,,,,,,,,,,,,,232,,,232',
+',,232,232,,,232,,,,,,232,,,,,,,,,232,,,,,232,232,232,232,,232,232,232',
+'232,,,,,232,232,,,,632,632,632,232,632,232,232,232,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,,,,629,629,629,632',
+'629,632,632,632,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,,,,854,854,854,629,854,629,629,629,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,,,,866,866,866,854,866,854,854',
+'854,866,866,,,,866,,866,866,866,866,866,866,866,,,,,,866,866,866,866',
+'866,866,866,,,866,,,,,,,866,,,866,866,866,866,866,866,866,866,,866,866',
+'866,,866,866,,,866,,,,,,,,,,,,,,,,,,,,866,,,866,,,866,866,,,866,,,,',
+',,,,,,,,,,,,,,,866,866,866,866,,866,866,866,866,,,,,866,866,,,,34,34',
+'34,866,34,866,866,866,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34',
+'34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,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,,,967,,967,967,967,967,967,,,,,,,,,967,,35,35,35,35,,35',
+'35,35,35,,,,,35,35,,,,35,,967,35,,35,35,35,605,605,605,,605,967,967',
+',605,605,967,,,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,5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5',
+'5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,',
+',,,,,,,,,,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,,5,5,5,5,',
+',,,5,5,,,,604,604,604,5,604,5,5,5,604,604,,,,604,,604,604,604,604,604',
+'604,604,,,,,,604,604,604,604,604,604,604,,,604,,,,,,,604,,,604,604,604',
+'604,604,604,604,604,,604,604,604,,604,604,604,604,604,,,,,,,,,,,,,,',
+',,,,,604,,,604,,,604,604,,,604,,,,,,604,,,,,,,,,604,,,,,604,604,604',
+'604,,604,604,604,604,,,,,604,604,,,,601,601,601,604,601,604,604,604',
+'601,601,,,,601,,601,601,601,601,601,601,601,,,,,,601,601,601,601,601',
+'601,601,,,601,,,,,,,601,,,601,601,601,601,601,601,601,601,,601,601,601',
+',601,601,601,601,601,,,,,,,,,,,,,,,,,,,,601,,,601,,,601,601,,,601,,',
+',,,601,,,,,,,,,601,,,,,601,601,601,601,,601,601,601,601,,,,,601,601',
+',,,600,600,600,601,600,601,601,601,600,600,,,,600,,600,600,600,600,600',
+'600,600,,,,,,600,600,600,600,600,600,600,,,600,,,,,,,600,,,600,600,600',
+'600,600,600,600,600,,600,600,600,,600,600,600,600,600,,,,,,,,,,,,,,',
+',,,,,600,,,600,,,600,600,,,600,,,,,,600,,,,,,,,,600,,,,,600,600,600',
+'600,,600,600,600,600,,,,,600,600,,,,596,596,596,600,596,600,600,600',
+'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',
+',,,319,319,319,596,319,596,596,596,319,319,,,,319,,319,319,319,319,319',
+'319,319,,,,,,319,319,319,319,319,319,319,,,319,,,,,,,319,,,319,319,319',
+'319,319,319,319,319,,319,319,319,,319,319,,,319,,,,,,,,,,,,,,,,,,,,319',
+',,319,,,319,319,,,319,,,,,,,,,,,,,,,,,,,,319,319,319,319,,319,319,319',
+'319,,,,,319,319,,,,595,595,595,319,595,319,319,319,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,,,,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,,,,,594,594,,,,593,593,593,594,593,594,594,594,593,593,',
+',,593,,593,593,593,593,593,593,593,,,,,,593,593,593,593,593,593,593',
+',,593,,,,,,,593,,,593,593,593,593,593,593,593,593,593,593,593,593,,593',
+'593,593,593,593,,,,,,,,,,,,,,,,,,,,593,,,593,,,593,593,,,593,,593,,593',
+',593,,,593,,,,,,593,,,,,593,593,593,593,,593,593,593,593,,,,,593,593',
+',,,221,221,221,593,221,593,593,593,221,221,,,,221,,221,221,221,221,221',
+'221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,,,221,,,221,221,221',
+'221,221,221,221,221,,221,221,221,,221,221,221,221,221,,,,,,,,,,,,,,',
+',,,,,221,,,221,,,221,221,,,221,,,,,,221,,,,,,,,,221,,,,,221,221,221',
+'221,,221,221,221,221,,,,,221,221,221,,,590,590,590,221,590,221,221,221',
+'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,,,,,590,590',
+',,,327,327,327,590,327,590,590,590,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,,,,329,329,329,327,329,327,327,327',
+'329,329,,,,329,,329,329,329,329,329,329,329,,,,,,329,329,329,329,329',
+'329,329,,,329,,,,,,,329,,,329,329,329,329,329,329,329,329,,329,329,329',
+',329,329,329,329,329,,,,,,,,,,,,,,,,,,,,329,,,329,,,329,329,,,329,,',
+',,,329,,,,,,,,,329,,,,,329,329,329,329,,329,329,329,329,,,,,329,329',
+',,,589,589,589,329,589,329,329,329,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,589,,,,,589,589,,,,220,220,220,589,220,589,589,589',
+'220,220,,,,220,,220,220,220,220,220,220,220,,,,,,220,220,220,220,220',
+'220,220,,,220,,,,,,,220,,,220,220,220,220,220,220,220,220,,220,220,220',
+',220,220,220,220,220,,,,,,,,,,,,,,,,,,,,220,,,220,,,220,220,,,220,,',
+',,,220,,,,,,,,,220,,,,,220,220,220,220,,220,220,220,220,,,,,220,220',
+',,,219,219,219,220,219,220,220,220,219,219,,,,219,,219,219,219,219,219',
+'219,219,,,,,,219,219,219,219,219,219,219,,,219,,,,,,,219,,,219,219,219',
+'219,219,219,219,219,,219,219,219,,219,219,219,219,219,,,,,,,,,,,,,,',
+',,,,,219,,,219,,,219,219,,,219,,,,,,219,,,,,,,,,219,,,,,219,219,219',
+'219,,219,219,219,219,,,,,219,219,,,,218,218,218,219,218,219,219,219',
+'218,218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218,218,218,218',
+'218,218,,,218,,,,,,,218,,,218,218,218,218,218,218,218,218,,218,218,218',
+',218,218,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,,,218,218,,,218,,',
+',,,218,,,,,,,,,218,,,,,218,218,218,218,,218,218,218,218,,,,,218,218',
+',,,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,217,,,,216,216,216,217,216,217,217,217',
+'216,216,,,,216,,216,216,216,216,216,216,216,,,,,,216,216,216,216,216',
+'216,216,,,216,,,,,,,216,,,216,216,216,216,216,216,216,216,,216,216,216',
+',216,216,216,216,216,,,,,,,,,,,,,,,,,,,,216,,,216,,,216,216,,,216,,',
+',,,216,,,,,,,,,216,,,,,216,216,216,216,,216,216,216,216,,,,,216,216',
+',,,557,557,557,216,557,216,216,216,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,557,557,557,,,,,557,557,,,,547,547,547,557,547',
+'557,557,557,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,547,,,,,547,547,,,,546,546,546,547,546,547,547,547,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,546,,',
+',42,42,42,546,42,546,546,546,42,42,,,,42,,42,42,42,42,42,42,42,,,,,',
+'42,42,42,42,42,42,42,,,42,,,,,,,42,,,42,42,42,42,42,42,42,42,,42,42',
+'42,,42,42,42,42,42,,,,,,,,,,,,,,,,,,,,42,,,42,,,42,42,,,42,,,,,,42,',
+',,,,,,,42,,,,,42,42,42,42,,42,42,42,42,,,,,42,42,,,,69,69,69,42,69,42',
+'42,42,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,,,,68,68,68,69,68,69,69,69,68,68,,,,68,,68,68,68',
+'68,68,68,68,,,,,,68,68,68,68,68,68,68,,,68,,,,,,,68,,,68,68,68,68,68',
+'68,68,68,,68,68,68,,68,68,,,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,',
+'68,,68,,,,,,,,,,,,,,,,,,68,68,68,68,,68,68,68,68,,,,,68,68,,,,63,63',
+'63,68,63,68,68,68,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,,,,407,407,407,63,407,63,63,63,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,',
+',,64,64,64,407,64,407,407,407,64,64,,,,64,,64,64,64,64,64,64,64,,,,',
+',64,64,64,64,64,64,64,,,64,,,,,,,64,,,64,64,64,64,64,64,64,64,,64,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,252,252,252,,252,,',
+',252,252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252,252',
+'252,252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,252,252',
+',252,252,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,',
+',,,252,,,,,,,,,252,,,,,252,252,252,252,,252,252,252,252,,,,,252,252',
+',,,255,255,255,252,255,252,252,252,255,255,,,,255,,255,255,255,255,255',
+'255,255,,,,,,255,255,255,255,255,255,255,,,255,,,,,,,255,,,255,255,255',
+'255,255,255,255,255,,255,255,255,,255,255,255,255,255,,,,,,,,,,,,,,',
+',,,,,255,,,255,,,255,255,,,255,,,,,,255,,,,,,,,,255,,,,,255,255,255',
+'255,,255,255,255,255,,,,,255,255,,,,733,733,733,255,733,255,255,255',
+'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,,,,,733,733',
+',,,251,251,251,733,251,733,733,733,251,251,,,,251,,251,251,251,251,251',
+'251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,,,251,,,251,251,251',
+'251,251,251,251,251,,251,251,251,,251,251,251,251,251,,,,,,,,,,,,,,',
+',,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,,251,,,,,251,251,251',
+'251,,251,251,251,251,,,,,251,251,,,,735,735,735,251,735,251,251,251',
+'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,,,,,735,735',
+',,,256,256,256,735,256,735,735,735,256,256,,,,256,,256,256,256,256,256',
+'256,256,,,,,,256,256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256',
+'256,256,256,256,256,,256,256,256,,256,256,256,256,256,,,,,,,,,,,,,,',
+',,,,,256,,,256,,,256,256,,,256,,,,,,256,,,,,,,,,256,,,,,256,256,256',
+'256,,256,256,256,256,,,,,256,256,,,,250,250,250,256,250,256,256,256',
+'250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250,250,250',
+'250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250,250,250',
+',250,250,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250,,',
+',,,250,,,,,,,,,250,,,,,250,250,250,250,,250,250,250,250,,,,,250,250',
+',,,249,249,249,250,249,250,250,250,249,249,,,,249,,249,249,249,249,249',
+'249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249',
+'249,249,249,249,249,,249,249,249,,249,249,249,249,249,,,,,,,,,,,,,,',
+',,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,,249,,,,,249,249,249',
+'249,,249,249,249,249,,,,,249,249,,,,248,248,248,249,248,249,249,249',
+'248,248,,,,248,,248,248,248,248,248,248,248,,,,,,248,248,248,248,248',
+'248,248,,,248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248,248,248',
+',248,248,248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,',
+',,,248,,,,,,,,,248,,,,,248,248,248,248,,248,248,248,248,,,,,248,248',
+',,,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,,,,678,678,678,247,678,247,247,247',
+'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',
+',,,749,749,749,678,749,678,678,678,749,749,,,,749,,749,749,749,749,749',
+'749,749,,,,,,749,749,749,749,749,749,749,,,749,,,,,,,749,,,749,749,749',
+'749,749,749,749,749,,749,749,749,,749,749,749,749,749,,,,,,,,,,,,,,',
+',,,,,749,,,749,,,749,749,,,749,,,,,,749,,,,,,,,,749,,,,,749,749,749',
+'749,,749,749,749,749,,,,,749,749,,,,750,750,750,749,750,749,749,749',
+'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',
+',,,751,751,751,750,751,750,750,750,751,751,,,,751,,751,751,751,751,751',
+'751,751,,,,,,751,751,751,751,751,751,751,,,751,,,,,,,751,,,751,751,751',
+'751,751,751,751,751,,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,,,,752,752,752,751,752,751,751,751',
+'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',
+',,,246,246,246,752,246,752,752,752,246,246,,,,246,,246,246,246,246,246',
+'246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246,246,246',
+'246,246,246,246,246,,246,246,246,,246,246,246,246,246,,,,,,,,,,,,,,',
+',,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,,246,,,,,246,246,246',
+'246,,246,246,246,246,,,,,246,246,,,,754,754,754,246,754,246,246,246',
+'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',
+',,,257,257,257,754,257,754,754,754,257,257,,,,257,,257,257,257,257,257',
+'257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257,257',
+'257,257,257,257,257,,257,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',
+',,,259,259,259,258,259,258,258,258,259,259,,,,259,,259,259,259,259,259',
+'259,259,,,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259',
+'259,259,259,259,259,,259,259,259,,259,259,259,259,259,,,,,,,,,,,,,,',
+',,,,,259,,,259,,,259,259,,,259,,,,,,259,,,,,,,,,259,,,,,259,259,259',
+'259,,259,259,259,259,,,,,259,259,,,,260,260,260,259,260,259,259,259',
+'260,260,,,,260,,260,260,260,260,260,260,260,,,,,,260,260,260,260,260',
+'260,260,,,260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260,260,260',
+',260,260,260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,',
+',,,260,,,,,,,,,260,,,,,260,260,260,260,,260,260,260,260,,,,,260,260',
+',,,245,245,245,260,245,260,260,260,245,245,,,,245,,245,245,245,245,245',
+'245,245,,,,,,245,245,245,245,245,245,245,,,245,,,,,,,245,,,245,245,245',
+'245,245,245,245,245,,245,245,245,,245,245,245,245,245,,,,,,,,,,,,,,',
+',,,,,245,,,245,,,245,245,,,245,,,,,,245,,,,,,,,,245,,,,,245,245,245',
+'245,,245,245,245,245,,,,,245,245,,,,244,244,244,245,244,245,245,245',
+'244,244,,,,244,,244,244,244,244,244,244,244,,,,,,244,244,244,244,244',
+'244,244,,,244,,,,,,,244,,,244,244,244,244,244,244,244,244,,244,244,244',
+',244,244,244,244,244,,,,,,,,,,,,,,,,,,,,244,,,244,,,244,244,,,244,,',
+',,,244,,,,,,,,,244,,,,,244,244,244,244,,244,244,244,244,,,,,244,244',
+',,,267,267,267,244,267,244,244,244,267,267,,,,267,,267,267,267,267,267',
+'267,267,,,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267,267,267',
+'267,267,267,267,267,267,267,267,267,,267,267,267,267,267,,,,,,,,,,,',
+',,,,,,,,267,,,267,,,267,267,,,267,,267,,267,,267,,,267,,,,,,267,,,,',
+'267,267,267,267,,267,267,267,267,,,,,267,267,,,,268,268,268,267,268',
+'267,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,268,,,,,268,268,,,,276,276,276,268,276,268,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,,,,,276,276',
+'276,,,766,766,766,276,766,276,276,276,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,,,,243,243,243,766,243,766,766,766,243,243,',
+',,243,,243,243,243,243,243,243,243,,,,,,243,243,243,243,243,243,243',
+',,243,,,,,,,243,,,243,243,243,243,243,243,243,243,,243,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,,,,283,283,283,242,283,242,242,242,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,',
+',,241,241,241,283,241,283,283,283,241,241,,,,241,,241,241,241,241,241',
+'241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241',
+'241,241,241,241,241,,241,241,241,,241,241,241,241,241,,,,,,,,,,,,,,',
+',,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,,241,,,,,241,241,241',
+'241,,241,241,241,241,,,,,241,241,,,,285,285,285,241,285,241,241,241',
+'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',
+',,,288,288,288,285,288,285,285,285,288,288,,,,288,,288,288,288,288,288',
+'288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,,,288,,,288,288,288',
+'288,288,288,288,288,,288,288,288,,288,288,288,288,288,,,,,,,,,,,,,,',
+',,,,,288,,,288,,,288,288,,,288,,,,,,288,,,,,,,,,288,,,,,288,288,288',
+'288,,288,288,288,288,,,,,288,288,,,,289,289,289,288,289,288,288,288',
+'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',
+',,,705,705,705,289,705,289,289,289,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,,,,240,240,240,705,240,705,705,705',
+'240,240,,,,240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240',
+'240,240,,,240,,,,,,,240,,,240,240,240,240,240,240,240,240,,240,240,240',
+',240,240,240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,240,,,240,,',
+',,,240,,,,,,,,,240,,,,,240,240,240,240,,240,240,240,240,,,,,240,240',
+',,,652,652,652,240,652,240,240,240,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,,,,239,239,239,652,239,652,652,652',
+'239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239,239,239,239,239',
+'239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239,239,,239,239,239',
+',239,239,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239,,,239,239,,,239,,',
+',,,239,,,,,,,,,239,,,,,239,239,239,239,,239,239,239,239,,,,,239,239',
+',,,343,343,343,239,343,239,239,239,343,343,,,,343,,343,343,343,343,343',
+'343,343,,,,,,343,343,343,343,343,343,343,,,343,,,,,,,343,,,343,343,343',
+'343,343,343,343,343,,343,343,343,,343,343,343,343,343,,,,,,,,,,,,,,',
+',,,,,343,,,343,,,343,343,,,343,,,,,,343,,,,,,,,,343,,,,,343,343,343',
+'343,,343,343,343,343,,,,,343,343,,,,344,344,344,343,344,343,343,343',
+'344,344,,,,344,,344,344,344,344,344,344,344,,,,,,344,344,344,344,344',
+'344,344,,,344,,,,,,,344,,,344,344,344,344,344,344,344,344,,344,344,344',
+',344,344,344,344,344,,,,,,,,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,',
+',,,344,,,,,,,,,344,,,,,344,344,344,344,,344,344,344,344,,,,,344,344',
+',,,518,518,518,344,518,344,344,344,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,,,,515,515,515,518,515,518,518,518',
+'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,,,515,515,,,515,,,,,,,,',
+',,,,,,,,,,,515,515,515,515,,515,515,515,515,,,,,515,515,,,,509,509,509',
+'515,509,515,515,515,509,509,,,,509,,509,509,509,509,509,509,509,,,,',
+',509,509,509,509,509,509,509,,,509,,,,,,,509,,,509,509,509,509,509,509',
+'509,509,509,509,509,509,,509,509,509,509,509,,,,,,,,,,,,,,,,,,,,509',
+',,509,,,509,509,,,509,,509,,509,,509,,,509,,,,,,509,,,,,509,509,509',
+'509,,509,509,509,509,,,,,509,509,,,,507,507,507,509,507,509,509,509',
+'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,,,939,,939',
+'939,939,939,939,,,,,,,,,939,,507,507,507,507,,507,507,507,507,,,,,507',
+'507,,,,,,939,507,,507,507,507,122,122,122,122,122,939,939,,122,122,939',
+',,122,,122,122,122,122,122,122,122,,,,,,122,122,122,122,122,122,122',
+',,122,,,,,,122,122,,122,122,122,122,122,122,122,122,122,,122,122,122',
+',122,122,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122,,122',
+',,,122,,,,,,,,,122,,,,,122,122,122,122,,122,122,122,122,,,,,122,122',
+',,,711,711,711,122,711,122,122,122,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,,,,254,254,254,711,254,711,711,711',
+'254,254,,,,254,,254,254,254,254,254,254,254,,,,,,254,254,254,254,254',
+'254,254,,,254,,,,,,,254,,,254,254,254,254,254,254,254,254,,254,254,254',
+',254,254,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,',
+',,,254,,,,,,,,,254,,,,,254,254,254,254,,254,254,254,254,,,,,254,254',
+',,,121,121,121,254,121,254,254,254,121,121,,,,121,,121,121,121,121,121',
+'121,121,,,,,,121,121,121,121,121,121,121,,,121,,,,,,,121,,,121,121,121',
+'121,121,121,121,121,,121,121,121,,121,121,121,121,121,,,,,,,,,,,,,,',
+',,,,,121,,,121,,,121,121,,,121,,,,,,121,,,,,,,,,121,,,,,121,121,121',
+'121,,121,121,121,121,,,,,121,121,,,,120,120,120,121,120,121,121,121',
+'120,120,,,,120,,120,120,120,120,120,120,120,,,,,,120,120,120,120,120',
+'120,120,,,120,,,,,,,120,,,120,120,120,120,120,120,120,120,,120,120,120',
+',120,120,120,120,120,,,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,',
+',,,120,,,,,,,,,120,,,,,120,120,120,120,,120,120,120,120,,,,,120,120',
+',,,,,,120,,120,120,120,499,499,499,499,499,,,,499,499,,,,499,,499,499',
+'499,499,499,499,499,,,,,,499,499,499,499,499,499,499,,,499,,,,,,499',
+'499,499,499,499,499,499,499,499,499,499,499,,499,499,499,,499,499,499',
+'499,499,,,,,,,,,,,,,,,,,,,,499,,,499,,,499,499,,,499,,499,,,,499,,,',
+',,,,,499,,,,,499,499,499,499,,499,499,499,499,,,,,499,499,,,,,,499,499',
+',499,499,499,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,,,,491,491,491,493,491,493,493,493',
+'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,491,491,491,,,,',
+'491,491,,,,489,489,489,491,489,491,491,491,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,,,,59,59,59,489',
+'59,489,489,489,59,59,,,,59,,59,59,59,59,59,59,59,,,,,,59,59,59,59,59',
+'59,59,,,59,,,,,,,59,,,59,59,59,59,59,59,59,59,59,59,59,59,,59,59,59',
+'59,59,,,,,,,,,,,,,,,,,,,,59,,,59,,,59,59,,,59,,59,,,,59,,,59,,,,,,59',
+',,,,59,59,59,59,,59,59,59,59,,,,,59,59,,,,363,363,363,59,363,59,59,59',
+'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,,,,,363,363',
+',,,119,119,119,363,119,363,363,363,119,119,,,,119,,119,119,119,119,119',
+'119,119,,,,,,119,119,119,119,119,119,119,,,119,,,,,,,119,,,119,119,119',
+'119,119,119,119,119,,119,119,119,,119,119,119,119,119,,,,,,,,,,,,,,',
+',,,,,119,,,119,,,119,119,,,119,,,,,,119,,,,,,,,,119,,,,,119,119,119',
+'119,,119,119,119,119,,,,,119,119,,,,118,118,118,119,118,119,119,119',
+'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,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,,,,,113,113,,,,,,113,113',
+',113,113,113,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,,,,448,448,448,449,448,449,449,449',
+'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',
+',,,447,447,447,448,447,448,448,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,447,447,447,447,,,,,,,,,,,,,,',
+',,,,,447,,,447,,,447,447,,,447,,,,,,447,,,,,,,,,447,,,,,447,447,447',
+'447,,447,447,447,447,,,,,447,447,,,,445,445,445,447,445,447,447,447',
+'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,445,,,,379,379,379,445,379,445,445,445,379,379,,,,379,,379,379',
+'379,379,379,379,379,,,,,,379,379,379,379,379,379,379,,,379,,,,,,,379',
+',,379,379,379,379,379,379,379,379,,379,379,379,,379,379,379,379,379',
+',,,,,,,,,,,,,,,,,,,379,,,379,,,379,379,,,379,,,,,,379,,,,,,,,,379,,',
+',,379,379,379,379,,379,379,379,379,,,,,379,379,,,,70,70,70,379,70,379',
+'379,379,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70,70,70,70,70,70',
+',,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70,70,,,70,,,,,,',
+',,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,,,,,,,,,,,,,,,70,70,70,70,,70',
+'70,70,70,,,,,70,70,,,,60,60,60,70,60,70,70,70,60,60,,,,60,,60,60,60',
+'60,60,60,60,,,,,,60,60,60,60,60,60,60,,,60,,,,,,,60,,,60,60,60,60,60',
+'60,60,60,60,60,60,60,,60,60,60,60,60,,,,,,,,,,,,,,,,,,,,60,,,60,,,60',
+'60,,,60,,,,,,60,,,60,,,,,,60,,,,,60,60,60,60,,60,60,60,60,,,,,60,60',
+',,,211,211,211,60,211,60,60,60,211,211,,,,211,,211,211,211,211,211,211',
+'211,,,,,,211,211,211,211,211,211,211,,,211,,,,,,,211,,,211,211,211,211',
+'211,211,211,211,211,211,211,211,,211,211,211,211,211,,,,,,,,,,,,,,,',
+',,,,211,,,211,,,211,211,,,211,,211,,211,,211,,,211,,,,,,211,,,,,211',
+'211,211,211,,211,211,211,211,,,,,211,211,,,,532,532,532,211,532,211',
+'211,211,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,,,,529,529,529,532,529,532,532,532,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,,,,210,210,210',
+'529,210,529,529,529,210,210,,,,210,,210,210,210,210,210,210,210,,,,',
+',210,210,210,210,210,210,210,,,210,,,,,,,210,,,210,210,210,210,210,210',
+'210,210,,210,210,210,,210,210,210,210,210,,,,,,,,,,,,,,,,,,,,210,,,210',
+',,210,210,,,210,,,,,,210,,,,,,,,,210,,,,,210,210,210,210,,210,210,210',
+'210,,,,,210,210,,,,43,43,43,210,43,210,210,210,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,,,,209',
+'209,209,43,209,43,43,43,209,209,,,,209,,209,209,209,209,209,209,209',
+',,,,,209,209,209,209,209,209,209,,,209,,,,,,,209,,,209,209,209,209,209',
+'209,209,209,,209,209,209,,209,209,209,209,209,,,,,,,,,,,,,,,,,,,,209',
+',,209,,,209,209,,,209,,209,,,,209,,,,,,,,,209,,,,,209,209,209,209,,209',
+'209,209,209,,,,,209,209,,,,44,44,44,209,44,209,209,209,44,44,,,,44,',
+'44,44,44,44,44,44,44,,,,,,44,44,44,44,44,44,44,,,44,,,,,,,44,,,44,44',
+'44,44,44,44,44,44,,44,44,44,,44,44,44,44,44,,,,,,,,,,,,,,,,,,,,44,,',
+'44,,,44,44,,,44,,,,,,44,,,,,,,,,44,,,,,44,44,44,44,,44,44,44,44,,,,',
+'44,44,,,,975,975,975,44,975,44,44,44,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,975,975,,,,,975,975,,,,523,523,523,975',
+'523,975,975,975,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,,,,519,519,519,523,519,523,523,523,519,519,,,,519,,519',
+'519,519,519,519,519,519,,,,,,519,519,519,519,519,519,519,,,519,,,,,',
+',519,,,519,519,519,519,519,519,519,519,,519,519,519,,519,519,519,519',
+'519,,,,,,,,,,,,,,,,,,,,519,,,519,,,519,519,,,519,,,,,,519,,,,,,,,,519',
+',,,,519,519,519,519,,519,519,519,519,,,,,519,519,,,,,,,519,,519,519',
+'519,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586',
+'586,586,586,586,586,586,586,586,,,,586,586,586,586,586,586,586,586,586',
+'586,,,,,,586,586,586,586,586,586,586,586,586,,,586,,,,,,,,586,586,,586',
+'586,586,586,586,586,586,,,586,586,,,,586,586,586,586,,,,,,,,,,,,,,586',
+'586,,586,586,586,586,586,586,586,586,586,586,586,586,,,586,586,,,,,',
+',,,,,,,,586,398,398,398,398,398,398,398,398,398,398,398,398,398,398',
+'398,398,398,398,398,398,398,398,398,398,,,,398,398,398,398,398,398,398',
+'398,398,398,,,,,,398,398,398,398,398,398,398,398,398,,,398,,,,,,,,398',
+'398,,398,398,398,398,398,398,398,,,398,398,,,,398,398,398,398,,,,,,',
+',,,,,,,398,398,,398,398,398,398,398,398,398,398,398,398,398,398,,,398',
+'398,,,,,,,,,,,,,,398,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9',
+',,,9,9,9,9,9,9,9,9,9,9,,,,,,9,9,9,9,9,9,9,9,9,,,9,,,,,,,,9,9,,9,9,9',
+'9,9,9,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,717,717,717,717,717,717,717,717,717,717,717,717',
+'717,717,717,717,717,717,717,717,717,717,717,717,,,,717,717,717,717,717',
+'717,717,717,717,717,,,,,,717,717,717,717,717,717,717,717,717,,,717,',
+',,,,,,717,717,,717,717,717,717,717,717,717,,,717,717,,,,717,717,717',
+'717,,,,,,,,,,,,,,717,717,,717,717,717,717,717,717,717,717,717,717,717',
+'717,,,717,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71',
+'71,71,71,71,,,,71,71,71,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71',
+'71,71,71,71,71,71,,71,,,,,,71,71,,71,71,71,71,71,71,71,,,71,71,,,,71',
+'71,71,71,,,,,,71,,,,,,,,71,71,,71,71,71,71,71,71,71,71,71,71,71,71,922',
+'922,71,,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,520,520,922,,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,521,521,520,,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',
+'549,549,521,,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,977,977,549,,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,976,976,977,,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,444,444,976,,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,212,212,444,,212,,,,,,,,212,212,,212,212',
+'212,212,212,212,212,,,212,212,,,,212,212,212,212,,,,,,212,,,,,,,,212',
+'212,,212,212,212,212,212,212,212,212,212,212,212,212,443,443,212,,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,213,213,443,,213,,,,,,,,213,213,,213,213,213,213,213,213,213',
+',,213,213,,,,213,213,213,213,,,,,,213,,,,,,,,213,213,,213,213,213,213',
+'213,213,213,213,213,213,213,213,556,556,213,,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,548,548,556',
+',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,511,511,548,,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,555,555,511,,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,510,510',
+'555,,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,263,263,510,,263,,,,,,,,263,263,,263,263,263,263,263',
+'263,263,,,263,263,,,,263,263,263,263,965,,965,965,965,965,965,,,,,,',
+'263,263,965,263,263,263,263,263,263,263,263,263,263,263,263,,537,263',
+'537,537,537,537,537,963,965,963,963,963,963,963,,537,,,,965,965,,963',
+',965,961,,961,961,961,961,961,,,,,,537,537,,961,,,,963,,537,537,537',
+'537,,,,537,,963,963,,,,963,715,961,715,715,715,715,715,,,,961,961,961',
+'961,,715,,961,941,,941,941,941,941,941,943,,943,943,943,943,943,,941',
+',,,715,,658,943,658,658,658,658,658,715,715,715,715,,,,715,658,941,',
+',,,,,943,,,,941,941,,,,941,,943,943,,658,,943,,,,,,,658,658,658,658',
+',,937,658,937,937,937,937,937,,716,,716,716,716,716,716,937,,,,,,,,716',
+',798,,798,798,798,798,798,,,,,,937,,,798,,,,,716,937,937,937,937,,,',
+'937,716,716,716,716,,,,716,798,,800,,800,800,800,800,800,798,798,798',
+'798,,,,798,800,,802,,802,802,802,802,802,,845,,845,845,845,845,845,802',
+',,,,800,,,845,,,,,,800,800,800,800,,,,800,802,,,,,,,,845,,,802,802,',
+',,802,845,845,845,845,,,847,845,847,847,847,847,847,849,,849,849,849',
+'849,849,,847,,,,,,,849,,,,,,,,,,,,,,,847,,,,,,,849,,847,847,847,847',
+',,,847,,849,849,,,,849' ]
+ racc_action_check = arr = ::Array.new(25101, 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 = [
+ 3124, 54, nil, -115, nil, 9353, 630, -49, 23417, 23289,
+ 10, nil, 15, 98, 814, 418, 43, 548, nil, -68,
+ 7765, 2984, 170, nil, 779, nil, 284, 876, 986, 7233,
+ 7364, 7495, nil, 4244, 8944, 9075, nil, 85, 645, 316,
+ 174, 281, 12235, 22239, 22501, 103, 712, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 1313, nil, -31, 20127,
+ 21584, -15, nil, 12628, 12890, nil, nil, 13021, 12497, 12366,
+ 21453, 23658, nil, nil, nil, nil, nil, nil, nil, 490,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 358, nil, nil,
+ 138, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 235, nil, 20659, nil, nil, nil, nil, 20520, 20389,
+ 19456, 19325, 18932, 1864, nil, -1, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 104, nil, 2004, 22370,
+ 22108, 21715, 24146, 24268, nil, nil, 11711, 11580, 11449, 11318,
+ 11187, 10532, nil, nil, 708, -42, 164, 197, 186, 131,
+ 192, nil, 8289, 5224, 244, 6709, 6439, 6177, 5915, 18007,
+ 17745, 17090, 16828, 16697, 16042, 15911, 15125, 14339, 14208, 14077,
+ 13946, 13553, 13160, 7102, 19194, 13291, 13815, 15387, 15518, 15649,
+ 15780, nil, nil, 24634, nil, nil, 241, 16173, 16304, nil,
+ nil, nil, nil, nil, nil, nil, 16435, nil, 3124, nil,
+ 219, 231, nil, 16959, 289, 17221, nil, nil, 17352, 17483,
+ nil, nil, 288, nil, 6578, 1173, 305, 276, 4524, 309,
+ 372, 375, 7626, 5784, 562, 649, 652, 471, 653, nil,
+ 439, 400, 194, nil, nil, nil, 446, 307, 436, 10008,
+ nil, 641, 508, 744, nil, 514, nil, 10794, 5364, 10925,
+ 468, nil, 273, 175, 515, 498, 372, 527, nil, nil,
+ 437, 18, 26, 18138, 18269, 364, 603, 488, 26, 36,
+ 678, 570, 65, 603, nil, nil, 478, 616, 148, nil,
+ 619, nil, 525, 20258, nil, nil, nil, 218, 782, 780,
+ 755, 720, 648, 618, 582, 338, nil, 220, nil, 21322,
+ nil, 397, 408, 505, 536, 528, -31, -41, 539, nil,
+ nil, nil, nil, nil, nil, nil, nil, 521, 23161, nil,
+ nil, nil, nil, 527, nil, nil, 510, 12759, 523, nil,
+ nil, 1864, 528, nil, 555, 556, 793, 795, 1449, nil,
+ nil, nil, 248, 608, 608, nil, nil, 1098, 740, nil,
+ 2004, nil, 556, nil, nil, 1584, nil, nil, nil, nil,
+ 19, nil, 617, 24207, 24085, 21191, -82, 21060, 20929, 20798,
+ 5504, 4944, 484, 802, 652, 656, 657, 668, 5915, 6027,
+ 5784, 5224, 5364, 5644, 1398, 4524, 4664, 4804, 5084, 4104,
+ 4244, 938, 1190, 3964, 4384, 3684, 192, 1234, nil, nil,
+ nil, nil, 614, nil, 203, 236, 627, nil, nil, 19996,
+ nil, 19865, nil, 19734, nil, 390, nil, nil, nil, 19595,
+ 1178, 3684, 629, 630, nil, nil, 631, 18793, 639, 18662,
+ 24573, 24451, 781, 681, nil, 18531, 639, nil, 18400, 22894,
+ 23780, 23841, 3824, 22763, 766, 766, 522, 696, nil, 21977,
+ nil, nil, 21846, nil, nil, nil, nil, 24696, 2424, 775,
+ nil, 3544, -20, 65, 777, 789, 12104, 11973, 24390, 23902,
+ 68, nil, nil, 990, nil, 24512, 24329, 11842, nil, nil,
+ 257, 2844, 710, nil, 156, nil, nil, nil, 962, nil,
+ nil, nil, 681, nil, nil, 395, nil, 393, nil, nil,
+ 668, nil, 669, nil, nil, nil, 23033, nil, 692, 11056,
+ 10663, 524, 732, 10401, 10270, 10139, 9877, 733, nil, nil,
+ 9746, 9615, 735, nil, 9484, 9214, nil, nil, 110, 156,
+ 0, 470, 705, 1724, 709, nil, 538, nil, 2984, 817,
+ -8, 117, nil, 2284, 1584, nil, 722, nil, 773, 8551,
+ nil, nil, 8420, nil, 748, -109, 8158, 736, nil, 748,
+ 27, 206, 791, 170, 848, 798, 760, 6046, 3264, 828,
+ -14, 881, 17876, nil, 766, nil, 247, nil, 24796, nil,
+ 766, 773, nil, 775, 776, 777, nil, nil, nil, nil,
+ nil, nil, nil, nil, 768, 1277, nil, nil, 14470, nil,
+ nil, nil, 863, nil, nil, nil, 869, nil, nil, 883,
+ 511, nil, 921, nil, nil, nil, nil, 930, nil, 6,
+ 810, 90, 94, 165, 178, 17614, 251, 1066, nil, 827,
+ 4384, 19063, nil, 952, 4944, 24757, 24856, 23545, nil, nil,
+ nil, nil, nil, nil, 5084, nil, nil, nil, nil, nil,
+ nil, nil, 829, 13422, 2144, 13684, nil, 834, nil, 2284,
+ nil, 2424, nil, nil, 2564, nil, 2704, nil, 2844, 14601,
+ 14732, 14863, 14994, 261, 15256, 835, 838, nil, 842, 844,
+ 847, nil, 882, 862, 861, 854, 16566, nil, nil, 996,
+ nil, nil, 4804, 897, 1005, nil, nil, nil, nil, 891,
+ 149, nil, nil, 1022, nil, 2144, 899, 946, nil, nil,
+ 944, nil, 7, 907, 1052, nil, nil, 289, 24873, nil,
+ 24912, nil, 24929, nil, 6308, nil, 876, nil, 906, 359,
+ 915, nil, nil, nil, nil, 1037, nil, 6840, 1039, 5504,
+ 5644, nil, 6971, 3964, 22, 55, nil, 1040, 308, 4664,
+ nil, 1041, 941, 346, nil, 945, 944, nil, 3404, 7896,
+ 8027, 3544, 1123, nil, nil, 24937, nil, 24989, nil, 24996,
+ nil, nil, 969, 1076, 8682, 924, 1026, nil, 972, nil,
+ nil, nil, 3264, nil, nil, -10, 8813, nil, nil, nil,
+ nil, nil, 997, 957, nil, nil, nil, 968, 969, nil,
+ 970, 971, nil, 976, nil, nil, 985, 1212, 987, 1250,
+ nil, nil, 41, nil, 1113, 1127, nil, 17, nil, nil,
+ nil, 1138, nil, nil, nil, 1060, nil, 1020, nil, nil,
+ 1021, 1024, 1025, 1027, nil, 1028, nil, 342, nil, nil,
+ nil, 954, 23719, nil, nil, nil, 1724, 37, -11, 958,
+ 1107, 33, nil, 2564, 2704, nil, nil, 24848, nil, 18840,
+ nil, 24775, nil, 24782, nil, nil, nil, nil, 354, 1520,
+ 1030, 3824, nil, nil, nil, nil, nil, 4104, nil, 3404,
+ nil, 24721, nil, 24703, nil, 24667, nil, 9122, nil, nil,
+ nil, 1091, 1089, 1094, 1177, 22632, 24024, 23963, -7, 1073,
+ 1178, 1057, 1060, 1062, 1064, 1066, 1512, 1069, 1378, 34,
+ 1215, 1217, 1099, 1103, 1104, 1105, nil, nil, 1109, 52,
+ 53, -9, -1, nil, nil, 7673, nil, nil, nil, nil,
+ 1227, 1111, nil, nil, nil, 1198, nil, nil, nil, nil,
+ 128, 1112, 1124, -101, nil, nil ]
+
+racc_action_default = [
+ -3, -601, -1, -587, -4, -601, -7, -601, -601, -601,
+ -601, -29, -601, -601, -601, -279, -601, -40, -43, -589,
+ -601, -48, -50, -51, -52, -56, -256, -256, -256, -293,
+ -329, -330, -68, -11, -72, -80, -82, -601, -491, -492,
+ -601, -601, -601, -601, -601, -589, -237, -270, -271, -272,
+ -273, -274, -275, -276, -277, -278, -575, -281, -283, -600,
+ -565, -301, -303, -601, -601, -307, -310, -587, -601, -601,
+ -601, -601, -331, -332, -334, -335, -432, -433, -434, -435,
+ -436, -457, -439, -440, -459, -461, -444, -449, -453, -455,
+ -471, -459, -473, -475, -476, -477, -478, -573, -480, -481,
+ -574, -483, -484, -485, -486, -487, -488, -489, -490, -495,
+ -496, -601, -2, -588, -596, -597, -598, -6, -601, -601,
+ -601, -601, -601, -3, -17, -601, -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, -601,
+ -601, -246, -601, -601, -585, -586, -601, -601, -601, -601,
+ -601, -589, -590, -47, -601, -491, -492, -601, -279, -601,
+ -601, -229, -601, -11, -601, -601, -601, -601, -601, -601,
+ -601, -601, -601, -601, -601, -601, -601, -601, -601, -601,
+ -601, -601, -601, -601, -601, -601, -601, -601, -601, -601,
+ -601, -401, -403, -601, -583, -584, -57, -246, -601, -300,
+ -407, -416, -418, -63, -413, -64, -589, -65, -238, -251,
+ -260, -260, -255, -601, -261, -601, -457, -567, -601, -601,
+ -66, -67, -587, -12, -601, -15, -601, -70, -11, -589,
+ -601, -73, -76, -11, -88, -89, -601, -601, -96, -293,
+ -296, -589, -601, -329, -330, -333, -414, -601, -78, -601,
+ -84, -290, -474, -601, -214, -215, -230, -601, -11, -601,
+ -589, -239, -593, -593, -601, -601, -593, -601, -302, -392,
+ -49, -601, -601, -601, -601, -587, -601, -588, -491, -492,
+ -601, -601, -279, -601, -345, -346, -106, -107, -601, -109,
+ -601, -279, -499, -601, -491, -492, -322, -111, -112, -153,
+ -154, -155, -171, -176, -183, -186, -324, -601, -563, -601,
+ -437, -601, -601, -601, -601, -601, -601, -601, -601, 1026,
+ -5, -599, -23, -24, -25, -26, -27, -601, -601, -19,
+ -20, -21, -121, -601, -30, -39, -266, -601, -601, -265,
+ -31, -196, -589, -247, -260, -260, -576, -577, -256, -411,
+ -578, -579, -577, -576, -256, -410, -412, -578, -579, -37,
+ -204, -38, -601, -41, -42, -194, -261, -44, -45, -46,
+ -589, -299, -601, -601, -601, -246, -290, -601, -601, -601,
+ -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, -589, -381, -256, -576, -577,
+ -54, -58, -589, -257, -381, -381, -589, -295, -252, -601,
+ -253, -601, -258, -601, -262, -601, -570, -572, -10, -588,
+ -14, -3, -589, -69, -288, -85, -74, -601, -589, -246,
+ -601, -601, -95, -601, -474, -601, -81, -86, -601, -601,
+ -601, -601, -235, -601, -424, -601, -284, -601, -240, -595,
+ -594, -242, -595, -291, -292, -566, -304, -523, -11, -336,
+ -337, -11, -601, -601, -601, -601, -601, -246, -601, -601,
+ -290, -315, -106, -107, -108, -601, -601, -246, -318, -497,
+ -601, -11, -501, -326, -589, -438, -458, -463, -601, -465,
+ -441, -460, -601, -462, -443, -601, -446, -601, -448, -451,
+ -601, -452, -601, -472, -8, -18, -601, -28, -269, -601,
+ -601, -415, -601, -248, -250, -601, -601, -59, -245, -408,
+ -601, -601, -61, -409, -601, -601, -298, -591, -576, -577,
+ -576, -577, -589, -194, -601, -382, -589, -384, -11, -53,
+ -404, -381, -243, -11, -11, -294, -260, -259, -263, -601,
+ -568, -569, -601, -13, -601, -71, -601, -77, -83, -589,
+ -576, -577, -244, -580, -94, -601, -79, -601, -203, -213,
+ -589, -600, -600, -282, -589, -287, -593, -393, -523, -396,
+ -562, -562, -506, -508, -508, -508, -522, -524, -525, -526,
+ -527, -528, -529, -530, -531, -601, -533, -535, -537, -542,
+ -544, -545, -547, -552, -554, -555, -557, -558, -559, -601,
+ -600, -338, -600, -308, -339, -340, -311, -601, -314, -601,
+ -589, -576, -577, -580, -289, -601, -106, -107, -110, -589,
+ -11, -601, -320, -601, -11, -523, -523, -601, -564, -464,
+ -467, -468, -469, -470, -11, -442, -445, -447, -450, -454,
+ -456, -122, -267, -601, -197, -601, -592, -260, -33, -199,
+ -34, -200, -60, -35, -202, -36, -201, -62, -195, -601,
+ -601, -601, -601, -415, -601, -562, -562, -363, -365, -365,
+ -365, -380, -601, -589, -386, -531, -539, -540, -550, -601,
+ -406, -405, -11, -601, -601, -254, -264, -571, -16, -75,
+ -415, -87, -297, -600, -343, -11, -425, -600, -426, -427,
+ -601, -241, -601, -589, -601, -504, -505, -601, -601, -515,
+ -601, -518, -601, -520, -601, -347, -601, -349, -351, -358,
+ -589, -536, -546, -556, -560, -601, -341, -601, -601, -11,
+ -11, -313, -601, -11, -415, -601, -415, -601, -601, -11,
+ -323, -601, -589, -601, -327, -601, -268, -32, -198, -249,
+ -601, -236, -601, -361, -362, -371, -373, -601, -376, -601,
+ -378, -383, -601, -601, -601, -538, -601, -402, -601, -417,
+ -419, -9, -11, -431, -344, -601, -601, -429, -285, -394,
+ -397, -399, -601, -562, -543, -561, -507, -508, -508, -534,
+ -508, -508, -553, -508, -531, -548, -589, -601, -356, -601,
+ -532, -305, -601, -306, -601, -601, -263, -600, -316, -319,
+ -498, -601, -325, -500, -502, -501, -466, -562, -541, -364,
+ -365, -365, -365, -365, -551, -365, -385, -589, -388, -390,
+ -391, -549, -601, -290, -55, -430, -11, -491, -492, -601,
+ -601, -279, -428, -11, -11, -395, -503, -601, -511, -601,
+ -513, -601, -516, -601, -519, -521, -348, -350, -354, -601,
+ -359, -11, -309, -312, -420, -421, -422, -11, -321, -11,
+ -360, -601, -368, -601, -370, -601, -374, -601, -377, -379,
+ -387, -601, -289, -580, -424, -246, -601, -601, -290, -601,
+ -601, -508, -508, -508, -508, -352, -601, -357, -601, -600,
+ -601, -601, -365, -365, -365, -365, -389, -423, -589, -576,
+ -577, -580, -289, -398, -400, -601, -509, -512, -514, -517,
+ -601, -355, -342, -317, -328, -601, -366, -369, -372, -375,
+ -415, -508, -353, -365, -510, -367 ]
+
+clist = [
+'220,418,424,26,376,525,212,223,26,331,338,279,279,279,490,301,264,262',
+'412,116,714,651,2,26,270,274,327,545,815,591,6,434,26,26,26,6,26,263',
+'341,342,381,409,345,759,315,315,124,207,481,431,554,630,477,318,129',
+'129,659,693,696,132,132,134,134,266,273,275,26,26,113,627,26,627,516',
+'322,482,810,795,796,315,315,315,528,531,116,762,535,112,783,666,280',
+'280,280,630,392,393,394,395,950,717,918,299,538,541,300,277,290,291',
+'297,920,882,861,382,633,914,947,206,26,129,388,332,441,26,26,26,26,26',
+'26,355,818,766,340,340,117,405,340,879,362,366,618,575,577,398,621,6',
+'586,397,623,624,490,334,346,620,396,6,630,378,335,987,536,281,281,281',
+'353,558,377,328,329,654,330,339,343,843,844,627,627,487,819,793,344',
+'820,705,957,879,710,829,340,340,340,340,333,336,561,760,279,1011,562',
+'404,410,503,571,573,576,576,429,433,571,886,1,905,666,419,26,26,26,26',
+'947,443,996,1022,26,26,26,26,26,26,697,920,914,761,753,763,852,418,424',
+'832,833,26,917,713,657,390,869,537,792,933,495,882,708,934,279,279,476',
+'612,484,485,954,780,787,279,428,637,872,865,380,383,384,666,666,646',
+'408,26,26,910,385,386,387,719,408,403,26,879,724,711,772,877,437,438',
+'439,440,936,874,908,513,,,,,26,510,642,517,26,13,300,879,,26,13,116',
+'642,270,527,315,,274,520,639,824,542,543,506,,,960,500,,826,1012,280',
+'315,,26,26,955,,13,280,642,,606,898,,548,483,,642,26,26,,514,,486,,',
+'700,766,,499,766,775,766,116,766,959,709,502,26,,300,264,508,,297,300',
+'878,498,880,297,,742,,622,26,,747,625,,827,,779,563,831,727,592,727',
+',526,,281,630,,635,,,,791,281,638,,,340,340,,,,13,598,,434,627,,911',
+'603,912,13,13,,279,544,,560,,,,,,585,,,,,419,,,129,,564,,26,132,,134',
+'14,,,597,614,14,,823,,602,,718,,,,,,,775,997,224,,766,598,766,,766,',
+'766,224,224,224,788,14,306,306,517,,428,279,,,,,517,,,,,,26,,26,,901',
+',419,,13,,26,981,619,224,224,315,419,224,350,360,360,634,,315,26,,766',
+'279,,6,,,,13,,992,,279,,26,,,26,805,419,,,782,26,,,,419,,758,428,694',
+'694,26,,,,26,14,,428,,771,224,224,224,224,14,14,712,,956,,,,738,740',
+',,,743,745,,650,433,,592,,428,13,764,26,26,13,428,789,26,26,13,699,26',
+'690,,,692,,,770,1020,,517,,626,592,26,,,731,926,26,26,781,,13,674,129',
+',,790,991,132,,134,598,,,603,,,315,,,,834,,951,,,,,315,,656,14,224,224',
+'224,,,,,224,224,224,224,224,224,,,805,,,888,825,592,,756,,14,828,,769',
+',592,,,773,774,,,,,,,,,,,,,,26,890,765,,408,26,26,,,26,,224,224,,837',
+'737,,,,26,224,,,903,,863,,,,867,26,,881,,883,,764,,14,,,,14,,674,,306',
+'14,,805,,805,,,,129,,642,,,,,,306,340,,764,26,315,,340,,14,224,998,',
+',946,,913,26,915,,757,892,,835,224,224,,,,39,13,,13,,39,,,,674,674,',
+',,,224,,,985,805,26,,26,26,,,26,,846,848,850,224,26,39,305,305,,,,,13',
+'694,858,13,900,,,,,904,,,,,,864,805,,805,,,873,,13,315,26,,,349,365',
+'365,365,,,,,315,982,,983,805,984,,,340,,,,,894,895,,674,897,674,,,224',
+'970,,,993,,994,,995,,,,907,,,756,39,756,,756,,,,13,976,39,39,,13,13',
+',,26,,,925,,,,26,26,,765,,765,,,,1021,,,,,,14,,14,26,1023,,279,,306',
+'26,224,26,,799,801,803,306,428,875,,,875,,419,224,,,26,592,962,964,966',
+'968,,969,,,337,,14,,,14,,,974,,,224,,,,979,980,,,,39,224,,,13,14,,,13',
+'875,,,757,989,757,428,757,,13,990,756,,756,674,756,39,756,,,,,,,,,,',
+',38,224,224,,,38,224,224,,765,224,,,,,,1016,1017,1018,1019,,,,,14,,',
+',13,14,14,,,38,304,304,756,,,,,13,306,,,,,1025,39,,,,39,306,,,305,39',
+',,,,,,,,,,348,364,364,364,,305,,13,13,,,13,,,39,,,13,,,,,757,406,757',
+',757,,757,,,436,,,,,,,,,,,,224,,38,,,14,224,13,,14,,38,38,,,,,,16,14',
+',938,940,16,942,944,,945,,,224,,,757,,,,,,,15,,,,,15,,,,,,16,,,492,',
+'494,,,496,497,855,,,,,,14,,,,13,,15,308,308,,,13,13,14,,,,,,354,,,,',
+',,,,,13,38,,,,,13,,13,,,,352,361,361,,224,,14,14,,,14,,,,38,,14,1006',
+'1007,1008,1009,,,16,,,,,,,,,16,16,39,,39,,,,,921,305,,,15,,,,14,305',
+',,929,15,15,,1024,,,,,,,,,,,,,588,,,39,,38,39,,,38,,,,304,38,,,,,,,',
+',,,,39,,,,304,,,,,,,,,38,,,,14,,,,,16,,14,14,,,,,,432,,,,,,,,,,,14,',
+'15,,,16,14,,14,,,,,,628,39,337,,631,,39,39,,,224,,,15,,,,,,305,,,,,',
+',,,,,305,,,,,,,,,,628,,,337,,,,,,,,,16,,,,16,436,,,,16,,,,,,,,,,,,,15',
+',,,15,,,,308,15,,,16,,,,,,,39,,,,39,,308,732,,,,628,337,,39,15,,,,,',
+',,,,,,,,,,,,,,38,,38,,,,,,304,,,,776,,,777,304,,,,,365,,,,,,39,,,,,',
+',,786,,,,38,39,,38,,,,,,,,,,,,,,,,,,,811,38,,,,,,,,,,,,39,39,,,39,,',
+',,,39,,,,,,,,,,,,,,,,,,,,,,,,,365,,,,,,,836,39,,38,,928,,,38,38,,,,16',
+',16,,,,,,304,,,,,,,,,,,304,,,15,,15,,,,,,308,,,,,,,,308,16,,,16,,,,',
+',,,,,39,,,,,,885,39,39,15,16,,15,,,,,,,,,,,,896,39,,,,,38,39,15,39,38',
+',,,,723,,337,,,38,,,,,,,,,432,,,,,,,,,,,,,,16,,,,,16,16,,,,,,,,,,,,',
+'364,,,15,,,38,,15,15,,,,,,,,,,38,,308,,,,,,,,,,,308,,,,,,,,,,,,,,,,',
+',,,,38,38,,,38,,,,,,38,,,,,,,,,,16,,,,16,,,,,,,,,,16,364,,,,,,,15,38',
+',,15,927,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,16,,,,,,,,,,,,,16,,,361',
+',,,,,15,,,38,,,,,,,38,38,,15,,,,,,,,231,,,,16,16,,38,16,278,278,278',
+',38,16,38,,,,,,,324,325,326,,15,15,,,15,,,,,,15,,,278,278,,,,,,,16,',
+',,932,,,,,,,,,,361,,,,,,,,15,,,,931,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,16,,,,,,,16,16,,,,,,,,,,,,,,15,,,16,,,,15,15,16,,16,,,,,,,,,,,',
+',,15,,,,,,15,,15,,,,,,,,,,,,,,,,,,,,,,,278,411,278,,,,,430,435,,,,,',
+',,,,,,,,,231,,,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,475,,,,,,,278,278,,,,,,',
+',278,,,,,,,278,,278,,,278,278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,522',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,430,613,411',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,278,,278,,,,,,,,,,,,,,,',
+'278,,,,,,,,,648,649,,,,,,,,,,278,,,278,,,,,,,,,,,,,,278,278,,,,,,,,',
+',278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,734,,,278,278,739,741,,,,744',
+'746,,,613,748,,,,,,,,,,,,,,,,,,,,,,,,278,,,278,,,,,,,,,,,,,,,,,,,,278',
+',,,,,,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,278,,838,,,,,,,,,,,,,,739,741,746,744,,841,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,278,,,,',
+',,,,,,,,,,,,278,838,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,278' ]
+ racc_goto_table = arr = ::Array.new(2946, 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,38,38,42,57,8,25,20,42,68,87,34,34,34,74,50,25,142,23,97,99,10,2',
+'42,72,72,32,93,91,24,7,18,42,42,42,7,42,37,17,17,155,28,17,130,65,65',
+'15,15,40,28,55,182,38,51,58,58,141,92,92,61,61,62,62,39,39,39,42,42',
+'6,75,42,75,52,64,23,120,125,125,65,65,65,70,70,97,133,70,4,11,167,69',
+'69,69,182,17,17,17,17,121,116,135,47,90,90,9,45,45,45,46,136,178,12',
+'156,14,179,118,16,42,58,156,69,48,42,42,42,42,42,42,19,11,174,30,30',
+'5,29,30,173,56,56,41,159,159,31,43,7,63,2,41,41,74,67,4,73,7,7,182,85',
+'86,121,89,71,71,71,94,96,100,101,102,103,104,105,106,125,125,75,75,48',
+'107,141,108,109,110,111,173,112,113,30,30,30,30,71,71,114,131,34,121',
+'115,20,20,48,160,160,160,160,20,20,160,120,1,117,167,72,42,42,42,42',
+'118,25,135,121,42,42,42,42,42,42,93,136,179,122,24,128,133,38,38,141',
+'141,42,134,8,137,5,138,139,140,143,155,178,55,144,34,34,145,23,147,148',
+'149,24,150,34,58,52,133,151,154,157,158,167,167,52,69,42,42,130,161',
+'162,163,164,69,9,42,173,165,166,41,171,30,30,30,30,125,175,176,32,,',
+',,42,25,38,50,42,21,9,173,,42,21,97,38,72,32,65,,72,25,23,24,17,17,51',
+',,125,7,,24,91,69,65,,42,42,11,,21,69,38,,48,92,,25,45,,38,42,42,,64',
+',45,,,23,174,,6,174,74,174,97,174,99,23,47,42,,9,25,47,,46,9,131,4,131',
+'46,,40,,48,42,,40,48,,8,,52,37,8,160,32,160,,30,,71,182,,48,,,,70,71',
+'48,,,30,30,,,,21,72,,18,75,,131,72,131,21,21,,34,4,,30,,,,,,15,,,,,72',
+',,58,,30,,42,61,,62,22,,,39,32,22,,90,,39,,48,,,,,,,74,10,22,,174,72',
+'174,,174,,174,22,22,22,28,22,22,22,50,,58,34,,,,,50,,,,,,42,,42,,8,',
+'72,,21,,42,131,39,22,22,65,72,22,22,22,22,2,,65,42,,174,34,,7,,,,21',
+',131,,34,,42,,,42,119,72,,,48,42,,,,72,,129,58,97,97,42,,,,42,22,,58',
+',87,22,22,22,22,22,22,97,,93,,,,20,20,,,,20,20,,30,20,,32,,58,21,32',
+'42,42,21,58,68,42,42,21,69,42,9,,,9,,,142,24,,50,,71,32,42,,,15,90,42',
+'42,50,,21,172,58,,,32,8,61,,62,72,,,72,,,65,,,,57,,90,,,,,65,,71,22',
+'22,22,22,,,,,22,22,22,22,22,22,,,119,,,119,17,32,,124,,22,17,,9,,32',
+',,9,9,,,,,,,,,,,,,,42,48,172,,69,42,42,,,42,,22,22,,20,71,,,,42,22,',
+',48,,68,,,,68,42,,129,,129,,32,,22,,,,22,,172,,22,22,,119,,119,,,,58',
+',38,,,,,,22,30,,32,42,65,,30,,22,22,23,,,48,,129,42,129,,126,17,,9,22',
+'22,,,,54,21,,21,,54,,,,172,172,,,,,22,,,119,119,42,,42,42,,,42,,127',
+'127,127,22,42,54,54,54,,,,,21,97,9,21,97,,,,,97,,,,,,9,119,,119,,,124',
+',21,65,42,,,54,54,54,54,,,,,65,129,,129,119,129,,,30,,,,,9,9,,172,9',
+'172,,,22,32,,,129,,129,,129,,,,124,,,124,54,124,,124,,,,21,25,54,54',
+',21,21,,,42,,,9,,,,42,42,,172,,172,,,,129,,,,,,22,,22,42,129,,34,,22',
+'42,22,42,,170,170,170,22,58,126,,,126,,72,22,,,42,32,127,127,127,127',
+',127,,,66,,22,,,22,,,9,,,22,,,,9,9,,,,54,22,,,21,22,,,21,126,,,126,9',
+'126,58,126,,21,9,124,,124,172,124,54,124,,,,,,,,,,,,53,22,22,,,53,22',
+'22,,172,22,,,,,,127,127,127,127,,,,,22,,,,21,22,22,,,53,53,53,124,,',
+',,21,22,,,,,127,54,,,,54,22,,,54,54,,,,,,,,,,,53,53,53,53,,54,,21,21',
+',,21,,,54,,,21,,,,,126,66,126,,126,,126,,,66,,,,,,,,,,,,22,,53,,,22',
+'22,21,,22,,53,53,,,,,,27,22,,170,170,27,170,170,,170,,,22,,,126,,,,',
+',,26,,,,,26,,,,,,27,,,66,,66,,,66,66,22,,,,,,22,,,,21,,26,26,26,,,21',
+'21,22,,,,,,27,,,,,,,,,,21,53,,,,,21,,21,,,,26,26,26,,22,,22,22,,,22',
+',,,53,,22,170,170,170,170,,,27,,,,,,,,,27,27,54,,54,,,,,22,54,,,26,',
+',,22,54,,,22,26,26,,170,,,,,,,,,,,,,66,,,54,,53,54,,,53,,,,53,53,,,',
+',,,,,,,,54,,,,53,,,,,,,,,53,,,,22,,,,,27,,22,22,,,,,,27,,,,,,,,,,,22',
+',26,,,27,22,,22,,,,,,66,54,66,,66,,54,54,,,22,,,26,,,,,,54,,,,,,,,,',
+',54,,,,,,,,,,66,,,66,,,,,,,,,27,,,,27,66,,,,27,,,,,,,,,,,,,26,,,,26',
+',,,26,26,,,27,,,,,,,54,,,,54,,26,66,,,,66,66,,54,26,,,,,,,,,,,,,,,,',
+',,,53,,53,,,,,,53,,,,66,,,66,53,,,,,54,,,,,,54,,,,,,,,66,,,,53,54,,53',
+',,,,,,,,,,,,,,,,,,66,53,,,,,,,,,,,,54,54,,,54,,,,,,54,,,,,,,,,,,,,,',
+',,,,,,,,,,54,,,,,,,66,54,,53,,54,,,53,53,,,,27,,27,,,,,,53,,,,,,,,,',
+',53,,,26,,26,,,,,,26,,,,,,,,26,27,,,27,,,,,,,,,,54,,,,,,66,54,54,26',
+'27,,26,,,,,,,,,,,,66,54,,,,,53,54,26,54,53,,,,,26,,66,,,53,,,,,,,,,27',
+',,,,,,,,,,,,,27,,,,,27,27,,,,,,,,,,,,,53,,,26,,,53,,26,26,,,,,,,,,,53',
+',26,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,53,53,,,53,,,,,,53,,,,,,,,,,27',
+',,,27,,,,,,,,,,27,53,,,,,,,26,53,,,26,53,,,,,,,,,26,,,,,,,,,,,,,,,,',
+',,,,,,,,,27,,,,,,,,,,,,,27,,,26,,,,,,26,,,53,,,,,,,53,53,,26,,,,,,,',
+'33,,,,27,27,,53,27,33,33,33,,53,27,53,,,,,,,33,33,33,,26,26,,,26,,,',
+',,26,,,33,33,,,,,,,27,,,,27,,,,,,,,,,26,,,,,,,,26,,,,26,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,27,,,,,,,27,27,,,,,,,,,,,,,,26,,,27,,,,26,26',
+'27,,27,,,,,,,,,,,,,,26,,,,,,26,,26,,,,,,,,,,,,,,,,,,,,,,,33,33,33,,',
+',,33,33,,,,,,,,,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,33,33',
+'33,33,33,33,33,33,33,33,33,33,33,33,,,,,,,33,33,,,,,,,,33,,,,,,,33,',
+'33,,,33,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,33,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,33,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,33,,33,33,33,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,33,,33,,33,,,,,,,,,,,,,,,,33,,,,,,,,,33,33,,,,,,,',
+',,33,,,33,,,,,,,,,,,,,,33,33,,,,,,,,,,33,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,33,33,,,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(2946, 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, 207, 22, nil, 83, 127, 65, 30, -323, 70,
+ -503, -564, -673, nil, -387, 38, 106, -25, -186, 59,
+ -13, 302, 452, -193, -383, -8, 1197, 1175, -168, -76,
+ 67, 17, -19, 1970, -18, nil, nil, 13, -211, 37,
+ -218, -338, 3, -338, nil, 75, 74, 67, -101, nil,
+ -19, 18, -247, 1046, 800, -308, 67, -67, 46, nil,
+ nil, 51, 53, -258, 32, 10, 928, 90, -50, 60,
+ -251, 130, -2, -326, -267, -420, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 84, 96, -51, nil, -181,
+ -240, -662, -485, -319, 94, nil, -199, 16, nil, -542,
+ 93, 108, 108, -359, 110, 107, 105, -517, 112, -517,
+ -371, -717, -375, -528, -175, -181, -465, -626, -773, -130,
+ -600, -792, -388, nil, 67, -584, 175, 70, -386, -60,
+ -573, -424, nil, -532, -616, -754, -745, -298, -551, -97,
+ -414, -481, -5, -626, -623, -10, nil, -18, -18, -642,
+ -395, -525, nil, nil, 184, -41, 27, 179, 179, -245,
+ -183, 186, 186, 186, -292, -288, -277, -449, nil, nil,
+ 301, -514, 94, -663, -487, -504, -551, nil, -691, -734,
+ nil, nil, -440 ]
+
+racc_goto_default = [
+ nil, nil, nil, 3, nil, 4, 347, 295, nil, 524,
+ nil, 816, nil, 292, 293, nil, nil, nil, 11, 12,
+ 18, 230, 323, nil, nil, 556, 228, 229, nil, nil,
+ 17, nil, 442, 21, 22, 23, 24, nil, 645, nil,
+ nil, nil, 312, nil, 25, 413, 32, nil, nil, 34,
+ 37, 36, nil, 225, 226, 359, nil, 131, 421, 130,
+ 133, 77, 78, nil, 92, 46, 284, nil, 784, 414,
+ nil, 415, 426, 599, 488, 282, 268, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, nil, 269, 61, nil,
+ nil, nil, nil, nil, nil, 69, nil, 539, 70, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 807, 673,
+ nil, 808, 909, 755, 661, nil, 662, nil, nil, 663,
+ nil, 665, 615, nil, nil, nil, 671, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 425, nil, nil, nil,
+ nil, nil, 76, 79, 80, nil, nil, nil, nil, nil,
+ 566, nil, nil, nil, nil, nil, nil, 876, 716, 660,
+ nil, 664, 884, 676, 678, 679, 767, 682, 683, 768,
+ 686, 689, 287 ]
+
+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, 246, :_reduce_281,
+ 4, 210, :_reduce_282,
+ 0, 247, :_reduce_283,
+ 0, 248, :_reduce_284,
+ 6, 210, :_reduce_285,
+ 0, 249, :_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,
+ 0, 250, :_reduce_303,
+ 3, 210, :_reduce_304,
+ 6, 210, :_reduce_305,
+ 6, 210, :_reduce_306,
+ 0, 251, :_reduce_307,
+ 0, 252, :_reduce_308,
+ 7, 210, :_reduce_309,
+ 0, 253, :_reduce_310,
+ 0, 254, :_reduce_311,
+ 7, 210, :_reduce_312,
+ 5, 210, :_reduce_313,
+ 4, 210, :_reduce_314,
+ 0, 255, :_reduce_315,
+ 0, 256, :_reduce_316,
+ 9, 210, :_reduce_317,
+ 0, 257, :_reduce_318,
+ 6, 210, :_reduce_319,
+ 0, 258, :_reduce_320,
+ 7, 210, :_reduce_321,
+ 0, 259, :_reduce_322,
+ 5, 210, :_reduce_323,
+ 0, 260, :_reduce_324,
+ 6, 210, :_reduce_325,
+ 0, 261, :_reduce_326,
+ 0, 262, :_reduce_327,
+ 9, 210, :_reduce_328,
+ 1, 210, :_reduce_329,
+ 1, 210, :_reduce_330,
+ 1, 210, :_reduce_331,
+ 1, 210, :_reduce_332,
+ 1, 167, :_reduce_none,
+ 1, 240, :_reduce_334,
+ 1, 243, :_reduce_335,
+ 1, 235, :_reduce_none,
+ 1, 235, :_reduce_none,
+ 2, 235, :_reduce_338,
+ 1, 237, :_reduce_none,
+ 1, 237, :_reduce_none,
+ 1, 236, :_reduce_none,
+ 5, 236, :_reduce_342,
+ 1, 156, :_reduce_none,
+ 2, 156, :_reduce_344,
+ 1, 239, :_reduce_none,
+ 1, 239, :_reduce_none,
+ 1, 263, :_reduce_347,
+ 3, 263, :_reduce_348,
+ 1, 266, :_reduce_349,
+ 3, 266, :_reduce_350,
+ 1, 265, :_reduce_none,
+ 4, 265, :_reduce_352,
+ 6, 265, :_reduce_353,
+ 3, 265, :_reduce_354,
+ 5, 265, :_reduce_355,
+ 2, 265, :_reduce_356,
+ 4, 265, :_reduce_357,
+ 1, 265, :_reduce_358,
+ 3, 265, :_reduce_359,
+ 4, 267, :_reduce_360,
+ 2, 267, :_reduce_361,
+ 2, 267, :_reduce_362,
+ 1, 267, :_reduce_363,
+ 2, 272, :_reduce_364,
+ 0, 272, :_reduce_365,
+ 6, 273, :_reduce_366,
+ 8, 273, :_reduce_367,
+ 4, 273, :_reduce_368,
+ 6, 273, :_reduce_369,
+ 4, 273, :_reduce_370,
+ 2, 273, :_reduce_none,
+ 6, 273, :_reduce_372,
+ 2, 273, :_reduce_373,
+ 4, 273, :_reduce_374,
+ 6, 273, :_reduce_375,
+ 2, 273, :_reduce_376,
+ 4, 273, :_reduce_377,
+ 2, 273, :_reduce_378,
+ 4, 273, :_reduce_379,
+ 1, 273, :_reduce_none,
+ 0, 186, :_reduce_381,
+ 1, 186, :_reduce_382,
+ 3, 277, :_reduce_383,
+ 1, 277, :_reduce_384,
+ 4, 277, :_reduce_385,
+ 1, 278, :_reduce_386,
+ 4, 278, :_reduce_387,
+ 1, 279, :_reduce_388,
+ 3, 279, :_reduce_389,
+ 1, 280, :_reduce_390,
+ 1, 280, :_reduce_none,
+ 0, 284, :_reduce_392,
+ 0, 285, :_reduce_393,
+ 4, 234, :_reduce_394,
+ 4, 282, :_reduce_395,
+ 1, 282, :_reduce_396,
+ 0, 288, :_reduce_397,
+ 4, 283, :_reduce_398,
+ 0, 289, :_reduce_399,
+ 4, 283, :_reduce_400,
+ 0, 290, :_reduce_401,
+ 5, 287, :_reduce_402,
+ 2, 181, :_reduce_403,
+ 4, 181, :_reduce_404,
+ 5, 181, :_reduce_405,
+ 5, 181, :_reduce_406,
+ 2, 233, :_reduce_407,
+ 4, 233, :_reduce_408,
+ 4, 233, :_reduce_409,
+ 3, 233, :_reduce_410,
+ 3, 233, :_reduce_411,
+ 3, 233, :_reduce_412,
+ 2, 233, :_reduce_413,
+ 1, 233, :_reduce_414,
+ 4, 233, :_reduce_415,
+ 0, 292, :_reduce_416,
+ 5, 232, :_reduce_417,
+ 0, 293, :_reduce_418,
+ 5, 232, :_reduce_419,
+ 5, 238, :_reduce_420,
+ 1, 294, :_reduce_421,
+ 1, 294, :_reduce_none,
+ 6, 155, :_reduce_423,
+ 0, 155, :_reduce_424,
+ 1, 295, :_reduce_425,
+ 1, 295, :_reduce_none,
+ 1, 295, :_reduce_none,
+ 2, 296, :_reduce_428,
+ 1, 296, :_reduce_none,
+ 2, 157, :_reduce_430,
+ 1, 157, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 223, :_reduce_435,
+ 1, 298, :_reduce_436,
+ 2, 298, :_reduce_437,
+ 3, 299, :_reduce_438,
+ 1, 299, :_reduce_439,
+ 1, 299, :_reduce_440,
+ 3, 224, :_reduce_441,
+ 4, 225, :_reduce_442,
+ 3, 226, :_reduce_443,
+ 0, 303, :_reduce_444,
+ 3, 303, :_reduce_445,
+ 1, 304, :_reduce_446,
+ 2, 304, :_reduce_447,
+ 3, 228, :_reduce_448,
+ 0, 306, :_reduce_449,
+ 3, 306, :_reduce_450,
+ 3, 227, :_reduce_451,
+ 3, 229, :_reduce_452,
+ 0, 307, :_reduce_453,
+ 3, 307, :_reduce_454,
+ 0, 308, :_reduce_455,
+ 3, 308, :_reduce_456,
+ 0, 300, :_reduce_457,
+ 2, 300, :_reduce_458,
+ 0, 301, :_reduce_459,
+ 2, 301, :_reduce_460,
+ 0, 302, :_reduce_461,
+ 2, 302, :_reduce_462,
+ 1, 305, :_reduce_463,
+ 2, 305, :_reduce_464,
+ 0, 310, :_reduce_465,
+ 4, 305, :_reduce_466,
+ 1, 309, :_reduce_467,
+ 1, 309, :_reduce_468,
+ 1, 309, :_reduce_469,
+ 1, 309, :_reduce_none,
+ 1, 206, :_reduce_471,
+ 3, 207, :_reduce_472,
+ 1, 297, :_reduce_473,
+ 2, 297, :_reduce_474,
+ 1, 209, :_reduce_475,
+ 1, 209, :_reduce_476,
+ 1, 209, :_reduce_477,
+ 1, 209, :_reduce_478,
+ 1, 198, :_reduce_479,
+ 1, 198, :_reduce_480,
+ 1, 198, :_reduce_481,
+ 1, 198, :_reduce_482,
+ 1, 198, :_reduce_483,
+ 1, 199, :_reduce_484,
+ 1, 199, :_reduce_485,
+ 1, 199, :_reduce_486,
+ 1, 199, :_reduce_487,
+ 1, 199, :_reduce_488,
+ 1, 199, :_reduce_489,
+ 1, 199, :_reduce_490,
+ 1, 230, :_reduce_491,
+ 1, 230, :_reduce_492,
+ 1, 166, :_reduce_493,
+ 1, 166, :_reduce_494,
+ 1, 171, :_reduce_495,
+ 1, 171, :_reduce_496,
+ 0, 311, :_reduce_497,
+ 4, 241, :_reduce_498,
+ 0, 241, :_reduce_499,
+ 3, 244, :_reduce_500,
+ 0, 313, :_reduce_501,
+ 3, 244, :_reduce_502,
+ 4, 312, :_reduce_503,
+ 2, 312, :_reduce_504,
+ 2, 312, :_reduce_505,
+ 1, 312, :_reduce_506,
+ 2, 315, :_reduce_507,
+ 0, 315, :_reduce_508,
+ 6, 286, :_reduce_509,
+ 8, 286, :_reduce_510,
+ 4, 286, :_reduce_511,
+ 6, 286, :_reduce_512,
+ 4, 286, :_reduce_513,
+ 6, 286, :_reduce_514,
+ 2, 286, :_reduce_515,
+ 4, 286, :_reduce_516,
+ 6, 286, :_reduce_517,
+ 2, 286, :_reduce_518,
+ 4, 286, :_reduce_519,
+ 2, 286, :_reduce_520,
+ 4, 286, :_reduce_521,
+ 1, 286, :_reduce_522,
+ 0, 286, :_reduce_523,
+ 1, 281, :_reduce_524,
+ 1, 281, :_reduce_525,
+ 1, 281, :_reduce_526,
+ 1, 281, :_reduce_527,
+ 1, 264, :_reduce_none,
+ 1, 264, :_reduce_529,
+ 1, 317, :_reduce_530,
+ 1, 318, :_reduce_531,
+ 3, 318, :_reduce_532,
+ 1, 274, :_reduce_533,
+ 3, 274, :_reduce_534,
+ 1, 319, :_reduce_535,
+ 2, 320, :_reduce_536,
+ 1, 320, :_reduce_537,
+ 2, 321, :_reduce_538,
+ 1, 321, :_reduce_539,
+ 1, 268, :_reduce_540,
+ 3, 268, :_reduce_541,
+ 1, 314, :_reduce_542,
+ 3, 314, :_reduce_543,
+ 1, 322, :_reduce_none,
+ 1, 322, :_reduce_none,
+ 2, 269, :_reduce_546,
+ 1, 269, :_reduce_547,
+ 3, 323, :_reduce_548,
+ 3, 324, :_reduce_549,
+ 1, 275, :_reduce_550,
+ 3, 275, :_reduce_551,
+ 1, 316, :_reduce_552,
+ 3, 316, :_reduce_553,
+ 1, 325, :_reduce_none,
+ 1, 325, :_reduce_none,
+ 2, 276, :_reduce_556,
+ 1, 276, :_reduce_557,
+ 1, 326, :_reduce_none,
+ 1, 326, :_reduce_none,
+ 2, 271, :_reduce_560,
+ 2, 270, :_reduce_561,
+ 0, 270, :_reduce_562,
+ 1, 245, :_reduce_none,
+ 3, 245, :_reduce_564,
+ 0, 231, :_reduce_565,
+ 2, 231, :_reduce_none,
+ 1, 216, :_reduce_567,
+ 3, 216, :_reduce_568,
+ 3, 327, :_reduce_569,
+ 2, 327, :_reduce_570,
+ 4, 327, :_reduce_571,
+ 2, 327, :_reduce_572,
+ 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, 291, :_reduce_none,
+ 1, 291, :_reduce_none,
+ 1, 291, :_reduce_none,
+ 1, 182, :_reduce_none,
+ 1, 182, :_reduce_none,
+ 1, 170, :_reduce_585,
+ 1, 170, :_reduce_586,
+ 0, 149, :_reduce_none,
+ 1, 149, :_reduce_none,
+ 0, 177, :_reduce_none,
+ 1, 177, :_reduce_none,
+ 2, 193, :_reduce_591,
+ 2, 169, :_reduce_592,
+ 0, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 242, :_reduce_596,
+ 1, 242, :_reduce_none,
+ 1, 151, :_reduce_none,
+ 2, 151, :_reduce_none,
+ 0, 213, :_reduce_600 ]
+
+racc_reduce_n = 601
+
+racc_shift_n = 1026
+
+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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "singleton",
+ "@5",
+ "@6",
+ "@7",
+ "@8",
+ "@9",
+ "@10",
+ "@11",
+ "@12",
+ "@13",
+ "@14",
+ "@15",
+ "@16",
+ "@17",
+ "@18",
+ "@19",
+ "@20",
+ "@21",
+ "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",
+ "@22",
+ "@23",
+ "f_args",
+ "do_block",
+ "@24",
+ "@25",
+ "@26",
+ "operation3",
+ "@27",
+ "@28",
+ "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",
+ "@29",
+ "@30",
+ "args_tail",
+ "@31",
+ "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
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_55(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ 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_internal(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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_304(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ 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)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ 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])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ 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)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_335(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+# reduce 336 omitted
+
+# reduce 337 omitted
+
+def _reduce_338(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 339 omitted
+
+# reduce 340 omitted
+
+# reduce 341 omitted
+
+def _reduce_342(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 343 omitted
+
+def _reduce_344(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 345 omitted
+
+# reduce 346 omitted
+
+def _reduce_347(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_349(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 351 omitted
+
+def _reduce_352(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2], val[3]))
+
+ result
+end
+
+def _reduce_353(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2], val[3])).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_354(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2]))
+
+ result
+end
+
+def _reduce_355(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_356(val, _values, result)
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_357(val, _values, result)
+ result = [ @builder.restarg(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_358(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+def _reduce_359(val, _values, result)
+ result = [ @builder.restarg(val[0]),
+ *val[2] ]
+
+ 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[1])
+
+ result
+end
+
+def _reduce_363(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_364(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_365(val, _values, result)
+ result = []
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_368(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+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)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 371 omitted
+
+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)
+ 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_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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ 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
+
+def _reduce_378(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_379(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 380 omitted
+
+def _reduce_381(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_382(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_383(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_384(val, _values, result)
+ result = @builder.args(val[0], [], val[0])
+
+ result
+end
+
+def _reduce_385(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 391 omitted
+
+def _reduce_392(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_393(val, _values, result)
+ result = @lexer.cmdarg.dup
+ @lexer.cmdarg.clear
+
+ result
+end
+
+def _reduce_394(val, _values, result)
+ @lexer.cmdarg = val[2]
+ @lexer.cmdarg.lexpop
+
+ result = [ val[1], val[3] ]
+
+ @static_env.unextend
+
+ result
+end
+
+def _reduce_395(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_396(val, _values, result)
+ result = @builder.args(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_401(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_402(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_403(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_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]
+ 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_406(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_407(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_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]
+ result = @builder.call_method(val[0], val[1], val[2],
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_410(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ 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[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[1]
+ result = @builder.keyword_cmd(:super, val[0],
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_414(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_415(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_416(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_417(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_418(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_419(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_421(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 422 omitted
+
+def _reduce_423(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_424(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 426 omitted
+
+# reduce 427 omitted
+
+def _reduce_428(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 429 omitted
+
+def _reduce_430(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 431 omitted
+
+# reduce 432 omitted
+
+# reduce 433 omitted
+
+# reduce 434 omitted
+
+def _reduce_435(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_437(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_438(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_439(val, _values, result)
+ string = @builder.string(val[0])
+ result = @builder.dedent_string(string, @lexer.dedent_level)
+
+ result
+end
+
+def _reduce_440(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_441(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_442(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_443(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ result = val[0] << val[1]
+
+ 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.word(val[1])
+
+ result
+end
+
+def _reduce_451(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ 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.string_internal(val[1])
+
+ result
+end
+
+def _reduce_455(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ result = val[0] << @builder.symbol_internal(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 = []
+
+ result
+end
+
+def _reduce_460(val, _values, result)
+ result = val[0] << 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 = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_464(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ @lexer.cond.push(false)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ @lexer.cond.lexpop
+ @lexer.cmdarg.lexpop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_467(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_469(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 470 omitted
+
+def _reduce_471(val, _values, result)
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_472(val, _values, result)
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_473(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_474(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_475(val, _values, result)
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_476(val, _values, result)
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_477(val, _values, result)
+ result = @builder.rational(val[0])
+
+ result
+end
+
+def _reduce_478(val, _values, result)
+ result = @builder.complex(val[0])
+
+ result
+end
+
+def _reduce_479(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_480(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_481(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_482(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_483(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_484(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_485(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_489(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_490(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_491(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_492(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_493(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_497(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_498(val, _values, result)
+ result = [ val[0], val[2] ]
+
+ result
+end
+
+def _reduce_499(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_500(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_501(val, _values, result)
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_502(val, _values, result)
+ @context.in_kwarg = val[0]
+ result = @builder.args(nil, val[1], nil)
+
+ result
+end
+
+def _reduce_503(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_504(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_505(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_507(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ result = []
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ 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[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[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[1])
+
+ result
+end
+
+def _reduce_521(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_522(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_523(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_524(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_525(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_526(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_527(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 528 omitted
+
+def _reduce_529(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_530(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_531(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_532(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_533(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_534(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_535(val, _values, result)
+ check_kwarg_name(val[0])
+
+ @static_env.declare val[0][0]
+
+ result = 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 = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_539(val, _values, result)
+ result = @builder.kwarg(val[0])
+
+ 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.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_547(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ result
+end
+
+def _reduce_548(val, _values, result)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_549(val, _values, result)
+ result = @builder.optarg(val[0], val[1], 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
+
+def _reduce_552(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_553(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 554 omitted
+
+# reduce 555 omitted
+
+def _reduce_556(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_557(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 558 omitted
+
+# reduce 559 omitted
+
+def _reduce_560(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+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[1]
+
+ result
+end
+
+def _reduce_565(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 566 omitted
+
+def _reduce_567(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_568(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_569(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_570(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_571(val, _values, result)
+ result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_572(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# 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 = [:dot, val[0][1]]
+
+ result
+end
+
+def _reduce_586(val, _values, result)
+ result = [:anddot, val[0][1]]
+
+ result
+end
+
+# reduce 587 omitted
+
+# reduce 588 omitted
+
+# reduce 589 omitted
+
+# reduce 590 omitted
+
+def _reduce_591(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_592(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 593 omitted
+
+# reduce 594 omitted
+
+# reduce 595 omitted
+
+def _reduce_596(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 597 omitted
+
+# reduce 598 omitted
+
+# reduce 599 omitted
+
+def _reduce_600(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby23
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby24.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby24.rb
new file mode 100644
index 000000000..40f1f781f
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby24.rb
@@ -0,0 +1,6736 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-485,999,272,211,212,211,212,-485,-485,-485,111,545,-485,-485,-485,587',
+'-485,774,-102,585,221,774,211,212,-485,399,-485,-485,-485,115,401,400',
+'818,787,114,-107,-485,-485,-104,-485,-485,-485,-485,-485,545,-103,-105',
+'545,-100,-100,-103,-102,773,-85,-101,115,773,115,272,123,114,222,114',
+'-71,870,-106,-485,-485,-485,-485,-485,-485,-485,-485,-485,-485,-485',
+'-485,-485,-485,208,586,-485,-485,-485,584,-485,-485,-104,271,-485,-99',
+'-105,-485,-485,-101,-485,222,-485,222,-485,209,-485,-485,-107,-485,-485',
+'-485,-485,-485,545,-485,-290,-485,545,-582,222,-106,-99,-290,-290,-290',
+'-582,-583,-290,-290,-290,-485,-290,115,-485,-485,-485,-485,114,-485',
+'-102,-485,-290,-290,-290,-102,-485,-485,-98,271,210,701,-290,-290,523',
+'-290,-290,-290,-290,-290,-104,-583,-91,-94,-93,-104,115,-103,-105,115',
+'-100,114,-103,-105,114,-100,-101,869,-97,701,701,-101,-290,-290,-290',
+'-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,211,212,-290',
+'-290,-290,-95,763,-290,-90,-96,-290,572,-92,-290,-290,-106,-290,272',
+'-290,115,-290,213,-290,-290,114,-290,-290,-290,-290,-290,-107,-290,272',
+'-290,219,-107,115,115,261,823,115,114,114,-106,-99,114,572,-290,-106',
+'-99,-290,-290,-290,-290,320,-290,-499,-290,-586,115,-500,321,-290,-105',
+'114,-586,-586,-586,93,94,-586,-586,-586,-94,-586,574,573,588,211,212',
+'787,267,551,-586,-586,-586,-586,115,115,694,693,-107,114,114,-586,-586',
+'267,-586,-586,-586,-586,-586,93,94,271,760,222,-95,-92,-93,574,573,678',
+'-99,675,674,673,-100,676,271,734,523,211,212,-586,-586,-586,-586,-586',
+'-586,-586,-586,-586,-586,-586,-586,-586,-586,-582,-94,-586,-586,-586',
+'389,762,-586,95,96,-586,761,606,-586,-586,557,-586,402,-586,558,-586',
+'451,-586,-586,-102,-586,-586,-586,-586,-586,-97,-586,-586,-586,115,-95',
+'-92,-93,572,114,-106,-94,95,96,-94,818,787,-586,452,572,-586,-586,-586',
+'-586,-94,-586,888,-586,-488,-95,747,842,-586,-103,605,-488,-488,-488',
+'-104,-104,-488,-488,-488,453,-488,-95,-92,-93,-95,-92,-93,606,-488,454',
+'-488,-488,-488,221,-95,-92,-93,485,494,605,-488,-488,496,-488,-488,-488',
+'-488,-488,574,573,678,-107,675,674,673,217,676,-93,732,574,573,577,265',
+'-101,-101,535,498,-102,537,747,-488,-488,-488,-488,-488,-488,-488,-488',
+'-488,-488,-488,-488,-488,-488,-104,506,-488,-488,-488,535,-488,-488',
+'537,-70,-488,572,-102,-488,-488,572,-488,219,-488,572,-488,-500,-488',
+'-488,572,-488,-488,-488,-488,-488,-290,-488,-92,-488,222,509,218,-290',
+'-290,-290,510,517,-101,-290,-290,276,-290,-488,986,222,-488,-488,-488',
+'-488,217,-488,535,-488,-579,534,267,265,-488,-488,-98,520,-290,-290',
+'-91,-290,-290,-290,-290,-290,-107,574,573,570,-100,574,573,570,524,574',
+'573,575,572,-499,574,573,579,535,638,242,537,222,-290,-290,-290,-290',
+'-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-485,538,-290,-290',
+'-290,222,610,-485,1003,218,-290,539,-579,-290,498,551,-485,391,-290',
+'555,-290,556,-290,-290,-90,-290,-290,-290,-290,-290,-290,-290,564,-290',
+'-99,-579,589,-290,-290,-290,574,573,583,-290,-290,592,-290,-290,242',
+'-263,-290,-290,81,-96,-492,-290,594,595,-580,599,222,-492,-290,-105',
+'82,-485,-290,-290,603,-290,-290,-290,-290,-290,83,217,604,267,615,217',
+'239,-491,526,-490,241,240,216,-493,-491,242,-490,450,242,242,-493,214',
+'-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290',
+'-488,217,-290,-290,-290,242,610,-488,972,-492,-290,222,-580,-290,-496',
+'222,-488,562,-290,222,-290,-496,-290,-290,-85,-290,-290,-290,-290,-290',
+'218,-290,-586,-290,218,-580,-491,642,-490,-586,-586,-586,-493,222,528',
+'-586,-586,-290,-586,653,-290,-290,658,-290,217,-290,659,-586,222,242',
+'661,977,-290,-105,697,-488,218,551,-586,-586,975,-586,-586,-586,-586',
+'-586,704,217,721,-496,731,-291,-494,-495,449,-488,735,-485,-291,-494',
+'-495,239,-488,450,-485,241,240,-291,-586,-586,-586,-586,-586,-586,-586',
+'-586,-586,-586,-586,-586,-586,-586,736,-264,-586,-586,-586,-334,611',
+'218,748,485,-586,485,-334,-586,222,-586,765,766,-586,261,-586,-334,-586',
+'-586,771,-586,-586,-586,-586,-586,218,-586,-586,-586,-291,-494,-495',
+'776,-488,496,-485,217,-290,498,780,653,222,-586,598,-290,-586,-586,-586',
+'-586,-583,-586,267,596,-290,-586,-586,-586,-586,-103,267,-586,-586,-586',
+'-586,969,-334,675,674,673,-586,676,653,-586,678,-582,675,674,673,-586',
+'676,242,787,795,-586,-586,798,-586,-586,-586,-586,-586,799,-290,801',
+'803,805,813,-586,814,-290,815,218,-290,969,-583,675,674,673,-290,676',
+'807,787,822,-586,-586,-586,-586,-586,-586,-586,-586,-586,-586,-586,-586',
+'-586,-586,-586,222,-586,-586,-586,-497,611,222,-498,831,-586,-265,-497',
+'-586,222,-498,841,845,-586,653,-586,-497,-586,-586,-498,-586,-586,-586',
+'-586,-586,-290,-586,-586,-586,678,862,675,674,673,683,676,217,118,119',
+'120,121,122,-586,516,686,-586,-586,-415,-94,-263,-586,866,514,222,-415',
+'-415,-415,-586,-103,-415,-415,-415,886,-415,222,-497,681,890,-498,892',
+'242,898,-415,-415,-415,691,690,694,693,901,222,905,687,-415,-415,-266',
+'-415,-415,-415,-415,-415,678,907,675,674,673,-281,676,798,910,912,218',
+'239,-281,914,916,241,240,222,237,238,222,-281,-415,-415,-415,-415,-415',
+'-415,-415,-415,-415,-415,-415,-415,-415,-415,918,807,-415,-415,-415',
+'217,919,-415,-291,267,-415,932,972,-415,-415,-291,-415,798,-415,934',
+'-415,562,-415,-415,-291,-415,-415,-415,-415,-415,936,-415,-415,-415',
+'-281,242,683,938,217,683,940,217,940,222,946,560,686,-415,554,686,-415',
+'-415,-246,-415,562,-415,949,552,950,-246,-246,-246,-415,955,-246,-246',
+'-246,239,-246,721,218,241,240,-291,237,238,966,-246,-246,694,693,973',
+'694,693,687,978,988,687,-246,-246,798,-246,-246,-246,-246,-246,678,993',
+'675,674,673,995,676,218,726,727,218,997,728,109,110,999,999,678,658',
+'675,674,673,683,676,118,119,120,121,122,1012,1013,1014,686,-246,940',
+'-246,940,807,940,1019,-246,988,-246,-246,-246,267,-246,-246,-246,-246',
+'1022,-246,1023,678,681,675,674,673,-583,676,-246,-246,-246,691,690,694',
+'693,-582,-246,-246,687,-246,-246,222,-246,-246,-246,-246,-246,988,1032',
+'999,999,-246,999,940,-246,988,,,807,-246,118,119,120,121,122,,-246,810',
+',-246,-246,-246,-246,-246,-246,-246,-246,-246,-246,-246,-246,-246,-246',
+',,-246,-246,-246,,,-246,,267,-246,,,-246,-246,,-246,,-246,,-246,,-246',
+'-246,,-246,-246,-246,-246,-246,-282,-246,-246,-246,,,,-282,-282,-282',
+',,-282,-282,-282,,-282,-246,,,-246,-246,,-246,,-246,-282,-282,-282,',
+',,-246,,,,-282,-282,,-282,-282,-282,-282,-282,678,,675,674,673,678,676',
+'675,674,673,678,676,675,674,673,,676,118,119,120,121,122,-282,-282,-282',
+'-282,-282,-282,-282,-282,-282,-282,-282,-282,-282,-282,,807,-282,-282',
+'-282,,807,-282,,,-282,807,,-282,-282,945,-282,,-282,,-282,,-282,-282',
+',-282,-282,-282,-282,-282,,-282,,-282,678,,675,674,673,,676,,,,,,,-282',
+',,-282,-282,-282,-282,,-282,-587,-282,,,,,-282,-587,-587,-587,,,-587',
+'-587,-587,807,-587,242,,,,,,,810,-587,-587,-587,-587,,,,,256,257,,-587',
+'-587,,-587,-587,-587,-587,-587,,,,,,239,,245,,241,240,,237,238,,,243',
+',244,,,,-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,-588,-587,,,,,-587,-588,-588,-588,,,-588',
+'-588,-588,242,-588,,,,,,,,,-588,-588,-588,-588,,,256,257,,,,-588,-588',
+',-588,-588,-588,-588,-588,,,,239,,245,,241,240,,237,238,,,243,,244,',
+',,,,-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,-297,-588,,,,,-588,-297,-297,-297,,,-297,-297,-297',
+'242,-297,,,,,,,,,,-297,-297,,,,256,257,,,,-297,-297,,-297,-297,-297',
+'-297,-297,,,,239,,245,,241,240,,237,238,,,243,,244,,,,,,-297,-297,-297',
+'-297,-297,-297,-297,-297,-297,-297,-297,-297,-297,-297,,,-297,-297,-297',
+',,-297,,276,-297,,,-297,-297,,-297,,-297,,-297,,-297,-297,,-297,-297',
+'-297,-297,-297,,-297,,-297,,,,,,,,,,,,,,-297,,,-297,-297,,-297,,-297',
+'294,74,75,71,9,57,-297,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28',
+'27,103,102,104,105,,,19,,,,,600,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250,258,259',
+'254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241',
+'240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',260,,-238,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,600,8,45,296,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251,252',
+'253,248,250,258,259,254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60',
+',35,239,,245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,',
+'86,88,87,89,,,,,82,90,,260,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,',
+',,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,40',
+',,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238,249,247,243,20,244',
+',,,91,81,84,85,,86,88,87,89,,,,,82,90,222,260,,,,,62,,83,95,96,294,74',
+'75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,242,246,251,252,253,248,250,258,259,254,255,,235,236',
+',,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238,249',
+'247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62,,83',
+'95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250,258,259',
+'254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241',
+'240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',260,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251,252,253',
+'248,250,258,259,254,255,,235,236,,,256,257,,40,,,33,,,58,59,,,60,,35',
+'239,,245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,260,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45',
+'296,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242',
+'246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,40,,,33',
+',,58,59,,,60,,35,239,,245,44,241,240,,237,238,249,247,243,20,244,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62,,83,95,96,294,74,75,71',
+'9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,42,43,41,242,246,251,252,253,248,250,258,259,254,255,,235,236',
+',,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238,249',
+'247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,260,,,,,62,,83',
+'95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,-607,-607,-607,-607,248,250,,,-607',
+'-607,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237',
+'238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62',
+',83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,',
+',,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,242,-607,-607,-607,-607,248,250',
+',,-607,-607,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240',
+',237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,',
+',,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250',
+'258,259,254,255,,-607,-607,,,256,257,,40,,,33,,,58,59,,,60,,35,239,',
+'245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,5,74,75,71,9,57,,,,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,7,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,-607,-607,-607',
+'-607,248,250,,,-607,-607,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239',
+',245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,5,74,75,71,9,57,,,,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,7,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,,,,,,,,,,,',
+',,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238,',
+',243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96',
+'294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,242,-607,-607,-607,-607,248,250,,,-607,-607',
+',,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237,238',
+'249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83',
+'95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,242,-607,-607,-607,-607,248,250,,,-607',
+'-607,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240,,237',
+'238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62',
+',83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,',
+',,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,242,-607,-607,-607,-607,248,250',
+',,-607,-607,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,245,44,241,240',
+',237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,',
+',,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251,252,253,248,250',
+'258,259,254,255,,-607,-607,,,256,257,,40,,,33,,,58,59,,,60,,35,239,',
+'245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251',
+'252,253,248,250,,,254,255,,,,,,256,257,,40,,,298,,,58,59,,,60,,35,239',
+',245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,246,251',
+'252,253,248,250,258,,254,255,,,,,,256,257,,40,,,33,,,58,59,,,60,,35',
+'239,,245,44,241,240,,237,238,249,247,243,20,244,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296',
+'10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,,,,',
+',,,,,,,,,,,256,257,,40,,,298,,,58,59,,,60,,35,239,,245,44,241,240,,237',
+'238,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96',
+'294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,242,,,,,,,,,,,,,,,,256,257,,40,,,33,,,58,59',
+',,60,,35,239,,245,44,241,240,,237,238,,,,20,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,242,,,,,,,',
+',,,,,,,,256,257,,40,,,33,,,58,59,,,60,,35,239,,,44,241,240,,237,238',
+',,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,294',
+'74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44',
+',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96',
+'5,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,19,,,,,,8,45,7,10,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44',
+',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96',
+'294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35',
+',,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83',
+'95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59',
+',,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,',
+',,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,298',
+',,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,294,74,75,71,9,57,,,,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,296,10',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,',
+',,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,',
+',307,,,233,,,58,59,,,60,,,678,,675,674,673,683,676,,,,,,,,,686,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,512,,681,62,,83,95,96,74,75,71,,57,694',
+'693,,63,64,687,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102',
+'104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,311,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+',,317,,,,,,,,,,,,,,,,,,,,921,,,233,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,',
+',,,,311,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,317,,,,',
+',,,,,,,,,,,,,,,927,,,233,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,,,307',
+',,303,,,58,59,,,60,,302,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,',
+',,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72',
+'73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,,,307,,,233',
+',,58,59,,,60,,,678,,675,674,673,683,676,,,,,,,,,686,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,319,,681,62,,83,95,96,74,75,71,9,57,694,693,,63',
+'64,687,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19',
+',,,,,8,45,7,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,',
+',,,,311,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,317,,,,',
+',,,,,,,,,,,,,,,307,,,303,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,,,307,,,303',
+',,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309',
+'310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,',
+'60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310',
+'316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,',
+',,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316',
+'103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234',
+',,,,,,311,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,317,,',
+',,,,,,,,,,,,,,,,,921,,,233,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72',
+'73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,635,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,',
+',82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73',
+',,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72',
+'73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58',
+'59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,',
+',74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309',
+'310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,',
+'60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310',
+'316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,',
+',,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316',
+'103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102',
+'104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,',
+',,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,',
+',,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72',
+'73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,',
+',,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58',
+'59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309',
+'310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,',
+'60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310',
+'316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,',
+',,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316',
+'103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,,283,,44',
+',,289,,,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,,283',
+',44,,,289,,,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75',
+'71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,',
+'283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,222,',
+',74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309',
+'310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,',
+'60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310',
+'316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101',
+'109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,',
+',,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71',
+'62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316',
+'103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102',
+'104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,407,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72',
+'73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,',
+',,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58',
+'59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,',
+',,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309',
+'310,316,103,102,104,105,,,234,,,,,,,311,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,58,59,,,60',
+',,678,,675,674,673,683,676,,,,,,,,,686,,91,81,84,85,,86,88,87,89,,,',
+',82,90,,,,,,681,62,,83,95,96,74,75,71,9,57,694,693,,63,64,687,,,67,',
+'65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,,10',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,',
+',,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,,,283,,44,,,289,,,,,,232,,,,,91,286,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56',
+'99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,222,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,',
+',,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98',
+'100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59',
+',,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27',
+'103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,,283,,44',
+',,289,,,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103',
+'102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,',
+',,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105',
+',,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,,283,,44,,,289',
+',,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105',
+',,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,',
+',,,,,,,227,,,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,,,,44,,,,,,,,,232,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,',
+',107,106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,',
+',,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,',
+'91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,',
+',,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,',
+',,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,',
+',45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,289,,,,,,232,,,,,91',
+'286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,',
+',67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,',
+',,,,,45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,635,,,,44,,,289,,,,,,232',
+',,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,',
+',,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,',
+',,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,',
+',,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,407,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,74,75,71,9,57,,,,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,,10,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227',
+',,233,,,58,59,,,60,,407,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31',
+'72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56',
+'99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,',
+',,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99',
+'98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,285,,,,44,,,289,,,,,,232,,,,,91,286,84,85,,86,88,87,89',
+',,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72',
+'73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,',
+',29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,',
+'60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75',
+'71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316',
+'103,102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109',
+'110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44',
+',,,,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57',
+'83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102',
+'104,105,,,234,,,,,,,311,,,107,106,108,97,56,99,98,100,,101,109,110,',
+'93,94,,,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,58,59,,,60,,,,,,,,,,,,,,',
+',,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,',
+',,,,,45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232',
+',,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,311,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,,,317',
+',,,,,,,,,,,,,,,,,,,307,,,303,,,58,59,,,60,,,678,,675,674,673,683,676',
+',,,,,,,,686,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,681,62,,83,95,96',
+'74,75,71,9,57,694,693,,63,64,687,,,67,,65,66,68,30,31,72,73,,,,,,29',
+'28,27,103,102,104,105,,,19,,,,,,8,45,,10,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60',
+',35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75',
+'71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103',
+'102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,',
+',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105',
+',,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,74,75,71,9,57',
+',,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',19,,,,,,8,45,296,10,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,391,62,,83,95,96,74,75,71',
+',57,,,,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102',
+'104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,283,,44,,,289',
+',,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,288,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,635,,283,,44',
+',,289,,,,,,232,,,,,91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102',
+'104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93',
+'94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,',
+',,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95',
+'96,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,',
+',19,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,',
+'91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45',
+',,107,106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,',
+',,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,289,,,,,,232,,,,,91,286',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,',
+'107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,',
+',,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86',
+'88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68',
+'313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30',
+'31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97',
+'56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233',
+',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,30,31,72,73,,,,',
+',29,28,27,103,102,104,105,,,19,,,,,,,45,,,107,106,108,97,56,99,98,100',
+',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,',
+'60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,115,,,',
+',114,62,,83,95,96,74,75,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73',
+',,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45,7,10,107,106,108,97,56',
+'99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,',
+'58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82',
+'90,,,,,,391,62,,83,95,96,74,75,71,,57,,,,63,64,,,,67,,65,66,68,313,314',
+'72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,311,,,107,106,108',
+'97,56,99,98,100,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,,,351,,,33',
+',,58,59,,,60,,35,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90',
+',,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,',
+'309,310,316,103,102,104,105,,,234,,,,,,,311,,,107,106,108,356,56,99',
+'98,357,,101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,363,,,358,,,233,,,58',
+'59,,,60,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74',
+'75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310',
+'316,103,102,104,105,,,234,,,,,,,311,,,107,106,108,356,56,99,98,357,',
+'101,109,110,,93,94,,,317,,,,,,,,,,,,,,,,,,,,358,,,233,,,58,59,,,60,',
+',,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62',
+'57,83,95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103',
+'102,104,105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110',
+',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,',
+',,,,,,232,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83',
+'95,96,63,64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104',
+'105,,,234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94',
+'42,43,41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232',
+',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63',
+'64,,,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,',
+'234,,,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43',
+'41,,,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,',
+',91,81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,',
+',,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,',
+',,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,',
+',45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,',
+',,,,,,,,,,,,,,227,,,233,528,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81',
+'84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67',
+',65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,',
+',107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,',
+',,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,',
+',,,,,,,227,,,233,,,58,59,,,60,,,,283,,44,,,289,,,,,,232,,,,,91,286,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45',
+',,107,106,108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,',
+',,,,,,,,,,,,,227,,,233,,,58,59,,,60,,635,,283,,44,,,289,,,,,,232,,,',
+',91,286,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64',
+',,,67,,65,66,68,313,314,72,73,,,,,,309,310,316,103,102,104,105,,,234',
+',,,,,,45,,,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41',
+',,,,,,,,,,,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91',
+'81,84,85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,,45',
+',,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,',
+',,,,,,,,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,,,,62,,83,95,96,74,75,71,9,57,,,,63,64,,,',
+'67,,65,66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,19,,,,,,8,45',
+',10,107,106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,',
+',,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,91,81,84,85',
+',86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66',
+'68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,288,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,',
+',,,227,,,233,,,58,59,,,60,,285,,283,,44,,,289,,,,,,232,,,,,91,286,84',
+'85,,86,88,87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65',
+'66,68,30,31,72,73,,,,,,29,28,27,103,102,104,105,,,234,,,,,,,45,,,107',
+'106,108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,',
+',,,,227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,739,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88',
+'87,89,,,,,82,90,,,,74,75,71,62,57,83,95,96,63,64,,,,67,,65,66,68,313',
+'314,72,73,,,,,,309,310,316,103,102,104,105,,,234,,,,,,,45,,,107,106',
+'108,97,56,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,',
+'227,,,233,,,58,59,,,60,,,,,,44,,,,,,,,,232,,,,,91,81,84,85,,86,88,87',
+'89,,,,,82,90,,,,,,,62,,83,95,96,175,186,176,199,172,192,182,181,202',
+'203,197,180,179,174,200,204,205,184,173,187,191,193,185,178,,,,194,201',
+'196,195,188,198,183,171,190,189,,,,,,170,177,168,169,165,166,167,126',
+'128,,,127,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161',
+'162,148,149,,,,,,,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143',
+'135,157,136,,,164,91,,,,,,,,,,,,,,90,175,186,176,199,172,192,182,181',
+'202,203,197,180,179,174,200,204,205,184,173,187,191,193,185,178,,,,194',
+'201,196,195,188,198,183,171,190,189,,,,,,170,177,168,169,165,166,167',
+'126,128,125,,127,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142',
+',,,161,162,148,149,,,,,,,,,,,,,,153,152,,137,158,155,154,163,150,151',
+'145,143,135,157,136,,,164,91,,,,,,,,,,,,,,90,175,186,176,199,172,192',
+'182,181,202,203,197,180,179,174,200,204,205,184,173,187,191,193,185',
+'178,,,,194,201,196,195,188,198,183,171,190,189,,,,,,170,177,168,169',
+'165,166,167,126,128,,,127,,,,,,,,159,160,,156,138,139,140,147,144,146',
+',,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153,152,,137,158,155,154,163',
+'150,151,145,143,135,157,136,,,164,91,,,,,,,,,,,,,,90,175,186,176,199',
+'172,192,182,181,202,203,197,180,179,174,200,204,205,184,173,187,191',
+'193,185,178,,,,194,201,196,195,188,198,183,171,190,189,,,,,,170,177',
+'168,169,165,166,167,126,128,,,127,,,,,,,,159,160,,156,138,139,140,147',
+'144,146,,,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153,152,,137,158,155',
+'154,163,150,151,145,143,135,157,136,,,164,91,,,,,,,,,,,,,,90,175,186',
+'176,199,172,192,182,181,202,203,197,180,179,174,200,204,205,184,173',
+'187,191,193,185,178,,,,194,201,196,374,373,375,372,171,190,189,,,,,',
+'170,177,168,169,369,370,371,367,128,99,98,368,,101,,,,,,159,160,,156',
+'138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,379,,,,,,',
+',153,152,,137,158,155,154,163,150,151,145,143,135,157,136,,,164,175',
+'186,176,199,172,192,182,181,202,203,197,180,179,174,200,204,205,184',
+'173,187,191,193,185,178,,,,194,201,196,195,188,198,183,171,190,189,',
+',,,,170,177,168,169,165,166,167,126,128,,,127,,,,,,,,159,160,,156,138',
+'139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153,152',
+',137,158,155,154,163,150,151,145,143,135,157,136,646,433,164,,647,,',
+',,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149',
+',,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157',
+'136,483,433,164,,484,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141',
+'142,,,,161,162,148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163',
+'150,151,145,143,135,157,136,1005,440,164,,1004,,,,,,,,159,160,,156,138',
+'139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,,,153',
+'152,,137,158,155,154,163,150,151,145,143,135,157,136,741,433,164,,742',
+',,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148',
+'149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135',
+'157,136,744,440,164,,743,,,,,,,,159,160,,156,138,139,140,147,144,146',
+',,141,142,,,,161,162,148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154',
+'163,150,151,145,143,135,157,136,618,440,164,,619,,,,,,,,159,160,,156',
+'138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,',
+',153,152,,137,158,155,154,163,150,151,145,143,135,157,136,616,433,164',
+',617,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162',
+'148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143',
+'135,157,136,483,433,164,,484,,,,,,,,159,160,,156,138,139,140,147,144',
+'146,,,141,142,,,,161,162,148,149,,,,,,,,,,,,,,153,152,,137,158,155,154',
+'163,150,151,145,143,135,157,136,429,433,164,,430,,,,,,,,159,160,,156',
+'138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,',
+',153,152,,137,158,155,154,163,150,151,145,143,135,157,136,436,440,164',
+',435,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162',
+'148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143',
+'135,157,136,1008,433,164,,1009,,,,,,,,159,160,,156,138,139,140,147,144',
+'146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,,,153,152,,137,158,155',
+'154,163,150,151,145,143,135,157,136,712,440,164,,713,,,,,,,,159,160',
+',156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,267,',
+',,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136,709,440',
+'164,,710,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,,,,161',
+'162,148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145',
+'143,135,157,136,616,433,164,,617,,,,,,,,159,160,,156,138,139,140,147',
+'144,146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,,,153,152,,137,158',
+'155,154,163,150,151,145,143,135,157,136,618,440,164,,619,,,,,,,,159',
+'160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,,,,,267',
+',,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136,707',
+'433,164,,708,,,,,,,,159,160,,156,138,139,140,147,144,146,,,141,142,',
+',,161,162,148,149,,,,,,267,,,,,,,,153,152,,137,158,155,154,163,150,151',
+'145,143,135,157,136,1010,440,164,,1011,,,,,,,,159,160,,156,138,139,140',
+'147,144,146,,,141,142,,,,161,162,148,149,,,,,,267,,,,,,,,153,152,,137',
+'158,155,154,163,150,151,145,143,135,157,136,649,440,164,,650,,,,,,,',
+'159,160,,156,138,139,140,147,144,146,,,141,142,,,,161,162,148,149,,',
+',,,267,,,,,,,,153,152,,137,158,155,154,163,150,151,145,143,135,157,136',
+',678,164,675,674,673,683,676,,678,,675,674,673,683,676,686,,,,,,,,686',
+',678,,675,674,673,683,676,,,,,,681,664,,686,,,,,681,691,690,694,693',
+',,,687,691,690,694,693,,,,687,681,,678,,675,674,673,683,676,,,694,693',
+',,,687,686,,678,,675,674,673,683,676,,678,,675,674,673,683,676,686,',
+',,,681,,,686,,,,,,691,690,694,693,,,,687,681,,,,,,,,681,691,690,694',
+'693,,,,687,691,690,694,693,,,678,687,675,674,673,683,676,,678,,675,674',
+'673,683,676,686,,,,,,,,686,,678,,675,674,673,683,676,,,,,,681,,,686',
+',,,,681,691,690,694,693,,,,687,691,690,694,693,,,,687,681,,678,,675',
+'674,673,683,676,,,694,693,,,,687,686,,678,,675,674,673,683,676,678,',
+'675,674,673,683,676,,686,,,,,681,,686,,,,,,,691,690,694,693,,,,687,681',
+',,,,,,681,,,,694,693,,,,687,,694,693,,,678,687,675,674,673,683,676,678',
+',675,674,673,683,676,678,686,675,674,673,683,676,,686,,,,,,,686,,,,',
+',,,681,,,,,,,681,,691,690,694,693,,681,,687,,694,693,,,,687,,694,693',
+',,,687' ]
+ racc_action_table = arr = ::Array.new(25333, 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 = [
+'97,1038,625,569,569,445,445,97,97,97,1,891,97,97,97,387,97,629,1008',
+'386,19,767,656,656,97,125,97,97,97,3,125,125,989,989,3,352,97,97,1009',
+'97,97,97,97,97,342,1010,1011,341,925,349,709,707,629,641,1029,834,767',
+'829,61,7,834,19,829,641,793,555,97,97,97,97,97,97,97,97,97,97,97,97',
+'97,97,10,387,97,97,97,386,97,97,708,625,97,348,710,97,97,825,97,569',
+'97,445,97,12,97,97,928,97,97,97,97,97,705,97,619,97,865,709,656,978',
+'924,619,619,619,1010,1011,619,619,619,97,619,891,97,97,97,97,891,97',
+'1008,97,619,619,619,1008,97,97,352,61,13,548,619,619,451,619,619,619',
+'619,619,1009,710,349,709,707,1009,342,1010,1011,341,925,342,1010,1011',
+'341,925,1029,793,555,547,826,1029,619,619,619,619,619,619,619,619,619',
+'619,619,619,619,619,14,14,619,619,619,708,619,619,348,710,619,388,825',
+'619,619,451,619,26,619,345,619,15,619,619,345,619,619,619,619,619,928',
+'619,312,619,414,928,705,292,22,705,865,705,292,978,924,865,582,619,978',
+'924,619,619,619,619,37,619,225,619,618,548,226,40,619,619,548,618,618',
+'618,41,41,618,618,618,649,618,388,388,388,565,565,896,26,896,618,618',
+'618,618,547,826,798,798,414,547,826,618,618,312,618,618,618,618,618',
+'317,317,26,616,45,647,782,646,582,582,810,225,810,810,810,226,810,312',
+'582,321,340,340,618,618,618,618,618,618,618,618,618,618,618,618,618',
+'618,649,649,618,618,618,111,618,618,41,41,618,617,430,618,618,358,618',
+'206,618,358,618,227,618,618,616,618,618,618,618,618,321,618,618,618',
+'565,647,782,646,580,565,321,649,317,317,649,696,696,618,228,383,618',
+'618,618,618,649,618,810,618,100,430,838,764,618,618,429,100,100,100',
+'617,430,100,100,100,229,100,647,782,646,647,782,646,742,100,230,100',
+'100,100,234,647,782,646,266,280,741,100,100,281,100,100,100,100,100',
+'580,580,945,228,945,945,945,24,945,429,580,383,383,383,24,838,764,333',
+'284,429,333,601,100,100,100,100,100,100,100,100,100,100,100,100,100',
+'100,742,296,100,100,100,662,100,100,662,297,100,500,741,100,100,381',
+'100,17,100,382,100,39,100,100,384,100,100,100,100,100,435,100,601,100',
+'299,300,24,435,435,435,301,307,601,435,435,310,435,100,945,311,100,100',
+'100,100,377,100,332,100,356,332,316,377,100,100,17,318,435,435,39,435',
+'435,435,435,435,17,500,500,500,39,381,381,381,322,382,382,382,385,38',
+'384,384,384,336,500,325,336,330,435,435,435,435,435,435,435,435,435',
+'435,435,435,435,435,356,334,435,435,435,967,435,356,967,377,435,335',
+'356,435,337,346,356,347,435,351,435,353,435,435,38,435,435,435,435,435',
+'743,435,362,435,38,356,397,743,743,743,385,385,385,743,743,403,743,435',
+'458,406,435,435,79,435,375,435,408,411,357,415,425,375,435,435,79,356',
+'743,743,427,743,743,743,743,743,79,323,428,437,447,16,458,374,323,373',
+'458,458,16,372,374,459,373,323,460,461,372,16,743,743,743,743,743,743',
+'743,743,743,743,743,743,743,743,357,920,743,743,743,462,743,357,920',
+'375,743,487,357,743,371,491,357,920,743,507,743,371,743,743,508,743',
+'743,743,743,743,323,743,744,743,16,357,374,511,373,744,744,744,372,513',
+'518,744,744,743,744,521,743,743,529,743,926,743,530,744,531,457,532',
+'926,743,743,544,357,920,549,744,744,926,744,744,744,744,744,550,224',
+'567,371,577,517,370,369,224,368,585,367,517,370,369,457,368,224,367',
+'457,457,517,744,744,744,744,744,744,744,744,744,744,744,744,744,744',
+'587,593,744,744,744,46,744,926,602,607,744,612,46,744,620,712,621,622',
+'744,624,744,46,744,744,628,744,744,744,744,744,224,744,744,744,517,370',
+'369,630,368,632,367,413,713,634,640,643,645,744,413,713,744,744,436',
+'744,713,744,648,413,713,436,436,436,744,744,651,436,436,712,436,918',
+'46,918,918,918,712,918,652,436,1019,712,1019,1019,1019,712,1019,655',
+'657,666,436,436,667,436,436,436,436,436,669,650,670,671,680,688,712',
+'692,650,695,413,713,1003,650,1003,1003,1003,650,1003,1019,698,703,436',
+'436,436,436,436,436,436,436,436,436,436,436,436,436,712,706,436,436',
+'436,304,436,715,305,719,436,738,304,436,740,305,749,770,436,781,436',
+'304,436,436,305,436,436,436,436,436,650,436,436,436,773,785,773,773',
+'773,773,773,306,6,6,6,6,6,436,306,773,436,436,27,436,788,436,789,306',
+'794,27,27,27,436,436,27,27,27,809,27,811,304,773,816,305,819,476,828',
+'27,27,27,773,773,773,773,832,833,836,773,27,27,837,27,27,27,27,27,946',
+'846,946,946,946,308,946,847,849,850,306,476,308,851,853,476,476,773',
+'476,476,854,308,27,27,27,27,27,27,27,27,27,27,27,27,27,27,855,946,27',
+'27,27,971,856,27,558,27,27,871,971,27,27,558,27,872,27,876,27,971,27',
+'27,558,27,27,27,27,27,877,27,27,27,308,477,907,879,360,795,880,350,882',
+'885,887,360,907,27,350,795,27,27,482,27,360,27,893,350,894,482,482,482',
+'27,900,482,482,482,477,482,904,971,477,477,558,477,477,917,482,482,907',
+'907,921,795,795,907,927,947,795,482,482,957,482,482,482,482,482,888',
+'960,888,888,888,961,888,360,573,573,350,962,573,573,573,963,965,934',
+'974,934,934,934,934,934,329,329,329,329,329,979,980,981,934,482,982',
+'431,983,888,984,985,482,987,431,431,431,482,482,431,431,431,990,431',
+'991,681,934,681,681,681,1004,681,431,431,431,934,934,934,934,1005,482',
+'482,934,431,431,1007,431,431,431,431,431,1020,1024,1025,1026,482,1027',
+'1030,482,1031,,,681,482,295,295,295,295,295,,482,681,,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,56,431,431,431',
+',,,56,56,56,,,56,56,56,,56,431,,,431,431,,431,,431,56,56,56,,,,431,',
+',,56,56,,56,56,56,56,56,988,,988,988,988,886,988,886,886,886,986,886',
+'986,986,986,,986,505,505,505,505,505,56,56,56,56,56,56,56,56,56,56,56',
+'56,56,56,,988,56,56,56,,886,56,,,56,986,,56,56,886,56,,56,,56,,56,56',
+',56,56,56,56,56,,56,,56,807,,807,807,807,,807,,,,,,,56,,,56,56,56,56',
+',56,440,56,,,,,56,440,440,440,,,440,440,440,807,440,470,,,,,,,807,440',
+'440,440,440,,,,,470,470,,440,440,,440,440,440,440,440,,,,,,470,,470',
+',470,470,,470,470,,,470,,470,,,,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,440,,,,,440,441,441,441,,,441,441,441,467,441,,,,,',
+',,,441,441,441,441,,,467,467,,,,441,441,,441,441,441,441,441,,,,467',
+',467,,467,467,,467,467,,,467,,467,,,,,,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,28,441,,,,,441,28,28,28,,,28,28,28,468,28,,,,,,,,,',
+'28,28,,,,468,468,,,,28,28,,28,28,28,28,28,,,,468,,468,,468,468,,468',
+'468,,,468,,468,,,,,,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,821,821,821,821,821,821,28,,,821,821,',
+',,821,,821,821,821,821,821,821,821,,,,,,821,821,821,821,821,821,821',
+',,821,,,,,418,821,821,821,821,821,821,821,821,821,821,821,821,,821,821',
+'821,,821,821,821,821,821,418,418,418,418,418,418,418,418,418,418,418',
+',418,418,,,418,418,,821,,,821,,,821,821,,,821,,821,418,,418,821,418',
+'418,,418,418,418,418,418,821,418,,,,821,821,821,821,,821,821,821,821',
+',,,,821,821,,418,,418,,,821,,821,821,821,824,824,824,824,824,824,,,',
+'824,824,,,,824,,824,824,824,824,824,824,824,,,,,,824,824,824,824,824',
+'824,824,,,824,,,,,424,824,824,824,824,824,824,824,824,824,824,824,824',
+',824,824,824,,824,824,824,824,824,424,424,424,424,424,424,424,424,424',
+'424,424,,424,424,,,424,424,,824,,,824,,,824,824,,,824,,824,424,,424',
+'824,424,424,,424,424,424,424,424,824,424,,,,824,824,824,824,,824,824',
+'824,824,,,,,824,824,,424,,,,,824,,824,824,824,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,480,480,480,480,480,480,480,480,480',
+'480,480,,480,480,,,480,480,,931,,,931,,,931,931,,,931,,931,480,,480',
+'931,480,480,,480,480,480,480,480,931,480,,,,931,931,931,931,,931,931',
+'931,931,,,,,931,931,480,480,,,,,931,,931,931,931,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,746,746,746,746,746,746,746,746',
+'746,746,746,,746,746,,,746,746,,543,,,543,,,543,543,,,543,,543,746,',
+'746,543,746,746,,746,746,746,746,746,543,746,,,,543,543,543,543,,543',
+'543,543,543,,,,,543,543,,746,,,,,543,,543,543,543,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,21,21,21,21,21,21,21,21,21,21',
+'21,,21,21,,,21,21,,787,,,787,,,787,787,,,787,,787,21,,21,787,21,21,',
+'21,21,21,21,21,787,21,,,,787,787,787,787,,787,787,787,787,,,,,787,787',
+',21,,,,,787,,787,787,787,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,278,278,278,278,278,278,278,278,278,278,278,,278,278',
+',,278,278,,546,,,546,,,546,546,,,546,,546,278,,278,546,278,278,,278',
+'278,278,278,278,546,278,,,,546,546,546,546,,546,546,546,546,,,,,546',
+'546,,278,,,,,546,,546,546,546,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,843,843,843,843,843,843,843,843,843,843,843,,843',
+'843,,,843,843,,830,,,830,,,830,830,,,830,,830,843,,843,830,843,843,',
+'843,843,843,843,843,830,843,,,,830,830,830,830,,830,830,830,830,,,,',
+'830,830,,843,,,,,830,,830,830,830,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,527,527,527,527,527,527,527,527,527,527,527',
+',527,527,,,527,527,,730,,,730,,,730,730,,,730,,730,527,,527,730,527',
+'527,,527,527,527,527,527,730,527,,,,730,730,730,730,,730,730,730,730',
+',,,,730,730,,527,,,,,730,,730,730,730,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,475,475,475,475,475,475,475,,,475,475,',
+',,,,475,475,,716,,,716,,,716,716,,,716,,716,475,,475,716,475,475,,475',
+'475,475,475,475,716,475,,,,716,716,716,716,,716,716,716,716,,,,,716',
+'716,,,,,,,716,,716,716,716,233,233,233,233,233,233,,,,233,233,,,,233',
+',233,233,233,233,233,233,233,,,,,,233,233,233,233,233,233,233,,,233',
+',,,,,233,233,233,233,233,233,233,233,233,233,233,233,,233,233,233,,233',
+'233,233,233,233,473,473,473,473,473,473,473,,,473,473,,,,,,473,473,',
+'233,,,233,,,233,233,,,233,,233,473,,473,233,473,473,,473,473,473,473',
+'473,233,473,,,,233,233,233,233,,233,233,233,233,,,,,233,233,,,,,,,233',
+',233,233,233,930,930,930,930,930,930,,,,930,930,,,,930,,930,930,930',
+'930,930,930,930,,,,,,930,930,930,930,930,930,930,,,930,,,,,,930,930',
+'930,930,930,930,930,930,930,930,930,930,,930,930,930,,930,930,930,930',
+'930,455,455,455,455,455,455,455,455,455,455,455,,455,455,,,455,455,',
+'930,,,930,,,930,930,,,930,,930,455,,455,930,455,455,,455,455,455,455',
+'455,930,455,,,,930,930,930,930,,930,930,930,930,,,,,930,930,,,,,,,930',
+',930,930,930,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,471,471,471,471,471,471,471,,,471,471,,,,,,471,471,,506,,,506,,',
+'506,506,,,506,,506,471,,471,506,471,471,,471,471,471,471,471,506,471',
+',,,506,506,506,506,,506,506,506,506,,,,,506,506,,,,,,,506,,506,506,506',
+'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,469,,,,,,',
+',,,,,,,,,469,469,,123,,,123,,,123,123,,,123,,123,469,,469,123,469,469',
+',469,469,,,469,123,469,,,,123,123,123,123,,123,123,123,123,,,,,123,123',
+',,,,,,123,,123,123,123,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,474,474,474,474,474,474,474,,,474,474,,,,,,474,474,,720',
+',,720,,,720,720,,,720,,720,474,,474,720,474,474,,474,474,474,474,474',
+'720,474,,,,720,720,720,720,,720,720,720,720,,,,,720,720,,,,,,,720,,720',
+'720,720,923,923,923,923,923,923,,,,923,923,,,,923,,923,923,923,923,923',
+'923,923,,,,,,923,923,923,923,923,923,923,,,923,,,,,,923,923,923,923',
+'923,923,923,923,923,923,923,923,,923,923,923,,923,923,923,923,923,466',
+'466,466,466,466,466,466,,,466,466,,,,,,466,466,,923,,,923,,,923,923',
+',,923,,923,466,,466,923,466,466,,466,466,466,466,466,923,466,,,,923',
+'923,923,923,,923,923,923,923,,,,,923,923,,,,,,,923,,923,923,923,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,472,472,472,472',
+'472,472,472,,,472,472,,,,,,472,472,,566,,,566,,,566,566,,,566,,566,472',
+',472,566,472,472,,472,472,472,472,472,566,472,,,,566,566,566,566,,566',
+'566,566,566,,,,,566,566,,,,,,,566,,566,566,566,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,456,456,456,456,456,456,456,456,456',
+'456,456,,456,456,,,456,456,,844,,,844,,,844,844,,,844,,844,456,,456',
+'844,456,456,,456,456,456,456,456,844,456,,,,844,844,844,844,,844,844',
+'844,844,,,,,844,844,,,,,,,844,,844,844,844,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,478,478,478,478,478,478,478,,,478,478',
+',,,,,478,478,,298,,,298,,,298,298,,,298,,298,478,,478,298,478,478,,478',
+'478,478,478,478,298,478,,,,298,298,298,298,,298,298,298,298,,,,,298',
+'298,,,,,,,298,,298,298,298,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,479,479,479,479,479,479,479,479,,479,479,,,,,,479,479',
+',775,,,775,,,775,775,,,775,,775,479,,479,775,479,479,,479,479,479,479',
+'479,775,479,,,,775,775,775,775,,775,775,775,775,,,,,775,775,,,,,,,775',
+',775,775,775,303,303,303,303,303,303,,,,303,303,,,,303,,303,303,303',
+'303,303,303,303,,,,,,303,303,303,303,303,303,303,,,303,,,,,,303,303',
+'303,303,303,303,303,303,303,303,303,303,,303,303,303,,303,303,303,303',
+'303,464,,,,,,,,,,,,,,,,464,464,,303,,,303,,,303,303,,,303,,303,464,',
+'464,303,464,464,,464,464,,,,303,,,,,303,303,303,303,,303,303,303,303',
+',,,,303,303,,,,,,,303,,303,303,303,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,463,,,,,,,,,,,,,,,,463,463,,208,,,208,,,208',
+'208,,,208,,208,463,,463,208,463,463,,463,463,,,,208,,,,,208,208,208',
+'208,,208,208,208,208,,,,,208,208,,,,,,,208,,208,208,208,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,465,,,,,,,,,,,,,,,,465',
+'465,,862,,,862,,,862,862,,,862,,862,465,,,862,465,465,,465,465,,,,862',
+',,,,862,862,862,862,,862,862,862,862,,,,,862,862,,,,,,,862,,862,862',
+'862,956,956,956,956,956,956,,,,956,956,,,,956,,956,956,956,956,956,956',
+'956,,,,,,956,956,956,956,956,956,956,,,956,,,,,,956,956,956,956,956',
+'956,956,956,956,956,956,956,,956,956,956,,956,956,956,956,956,,,,,,',
+',,,,,,,,,,,,,956,,,956,,,956,956,,,956,,956,,,,956,,,,,,,,,956,,,,,956',
+'956,956,956,,956,956,956,956,,,,,956,956,,,,,,,956,,956,956,956,0,0',
+'0,0,0,0,,,,0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0',
+'0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,,,,,,,,,,,,,,,,,,,,0,,,0,,,0,0,',
+',0,,0,,,,0,,,,,,,,,0,,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,,,,,,0,,0,0,0,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,,,,,,,,,,,,,,',
+',,,,,954,,,954,,,954,954,,,954,,954,,,,954,,,,,,,,,954,,,,,954,954,954',
+'954,,954,954,954,954,,,,,954,954,,,,,,,954,,954,954,954,948,948,948',
+'948,948,948,,,,948,948,,,,948,,948,948,948,948,948,948,948,,,,,,948',
+'948,948,948,948,948,948,,,948,,,,,,948,948,948,948,948,948,948,948,948',
+'948,948,948,,948,948,948,,948,948,948,948,948,,,,,,,,,,,,,,,,,,,,948',
+',,948,,,948,948,,,948,,948,,,,948,,,,,,,,,948,,,,,948,948,948,948,,948',
+'948,948,948,,,,,948,948,,,,,,,948,,948,948,948,33,33,33,33,33,33,,,',
+'33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,',
+',,33,33,33,33,33,33,33,33,33,33,33,33,,33,33,33,,33,33,33,33,33,,,,',
+',,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,,,33,,,,,,,,,33,,,,,33,33,33',
+'33,,33,33,33,33,,,,,33,33,,,,,,,33,,33,33,33,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,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,328,328,328,328,328,328,,,,328,328',
+',,,328,,328,328,328,328,328,328,328,,,,,,328,328,328,328,328,328,328',
+',,328,,,,,,328,328,328,328,328,328,328,328,328,328,328,328,,328,328',
+'328,,328,328,328,328,328,,,,,,,,,,,,,,,,,,,,328,,,328,,,328,328,,,328',
+',328,,,,328,,,,,,,,,328,,,,,328,328,328,328,,328,328,328,328,,,,,328',
+'328,,,,842,842,842,328,842,328,328,328,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,,,,29,29,29,842,29,842,842,842',
+'29,29,,,,29,,29,29,29,29,29,29,29,,,,,,29,29,29,29,29,29,29,,,29,,,',
+',,,29,,,29,29,29,29,29,29,29,29,29,29,29,29,,29,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,,,,302,302',
+'302,31,302,31,31,31,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,,,1032,,1032,1032,1032,1032,1032,,,,,,,,,1032,,302,302,302',
+'302,,302,302,302,302,,,,,302,302,,,,302,,1032,302,,302,302,302,240,240',
+'240,,240,1032,1032,,240,240,1032,,,240,,240,240,240,240,240,240,240',
+',,,,,240,240,240,240,240,240,240,,,240,,,,,,,240,,,240,240,240,240,240',
+'240,240,240,,240,240,240,,240,240,240,240,240,,,,,,,,,,,,,,,,,,,,240',
+',,240,,,240,240,,,240,,,,,,240,,,,,,,,,240,,,,,240,240,240,240,,240',
+'240,240,240,,,,,240,240,,,,857,857,857,240,857,240,240,240,857,857,',
+',,857,,857,857,857,857,857,857,857,,,,,,857,857,857,857,857,857,857',
+',,857,,,,,,,857,,,857,857,857,857,857,857,857,857,,857,857,857,,857',
+'857,,,857,,,,,,,,,,,,,,,,,,,,857,,,857,,,857,857,,,857,,,,,,,,,,,,,',
+',,,,,,857,857,857,857,,857,857,857,857,,,,,857,857,,,,866,866,866,857',
+'866,857,857,857,866,866,,,,866,,866,866,866,866,866,866,866,,,,,,866',
+'866,866,866,866,866,866,,,866,,,,,,,866,,,866,866,866,866,866,866,866',
+'866,,866,866,866,,866,866,,,866,,,,,,,,,,,,,,,,,,,,866,,,866,,,866,866',
+',,866,,,,,,,,,,,,,,,,,,,,866,866,866,866,,866,866,866,866,,,,,866,866',
+',,,239,239,239,866,239,866,866,866,239,239,,,,239,,239,239,239,239,239',
+'239,239,,,,,,239,239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239',
+'239,239,239,239,239,,239,239,239,,239,239,239,239,239,,,,,,,,,,,,,,',
+',,,,,239,,,239,,,239,239,,,239,,,,,,239,,,,,,,,,239,,,,,239,239,239',
+'239,,239,239,239,239,,,,,239,239,,,,34,34,34,239,34,239,239,239,34,34',
+',,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34,34,,,34,,,,,,,34',
+',,34,34,34,34,34,34,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,,,936,,936',
+'936,936,936,936,,,,,,,,,936,,35,35,35,35,,35,35,35,35,,,,,35,35,,,,35',
+',936,35,,35,35,35,5,5,5,5,5,936,936,,5,5,936,,,5,,5,5,5,5,5,5,5,,,,',
+',5,5,5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,',
+',,,,,,,,,,,,,,,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,,5,5',
+'5,5,,,,,5,5,,,,238,238,238,5,238,5,5,5,238,238,,,,238,,238,238,238,238',
+'238,238,238,,,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238,238',
+'238,238,238,238,238,238,,238,238,238,,238,238,238,238,238,,,,,,,,,,',
+',,,,,,,,,238,,,238,,,238,238,,,238,,,,,,238,,,,,,,,,238,,,,,238,238',
+'238,238,,238,238,238,238,,,,,238,238,,,,642,642,642,238,642,238,238',
+'238,642,642,,,,642,,642,642,642,642,642,642,642,,,,,,642,642,642,642',
+'642,642,642,,,642,,,,,,,642,,,642,642,642,642,642,642,642,642,,642,642',
+'642,,642,642,,,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642,,,642,,,,',
+',,,,,,,,,,,,,,,642,642,642,642,,642,642,642,642,,,,,642,642,,,,237,237',
+'237,642,237,642,642,642,237,237,,,,237,,237,237,237,237,237,237,237',
+',,,,,237,237,237,237,237,237,237,,,237,,,,,,,237,,,237,237,237,237,237',
+'237,237,237,,237,237,237,,237,237,237,237,237,,,,,,,,,,,,,,,,,,,,237',
+',,237,,,237,237,,,237,,,,,,237,,,,,,,,,237,,,,,237,237,237,237,,237',
+'237,237,237,,,,,237,237,,,,638,638,638,237,638,237,237,237,638,638,',
+',,638,,638,638,638,638,638,638,638,,,,,,638,638,638,638,638,638,638',
+',,638,,,,,,,638,,,638,638,638,638,638,638,638,638,,638,638,638,,638',
+'638,638,638,638,,,,,,,,,,,,,,,,,,,,638,,,638,,,638,638,,,638,,,,,,638',
+',,,,,,,,638,,,,,638,638,638,638,,638,638,638,638,,,,,638,638,,,,319',
+'319,319,638,319,638,638,638,319,319,,,,319,,319,319,319,319,319,319',
+'319,,,,,,319,319,319,319,319,319,319,,,319,,,,,,,319,,,319,319,319,319',
+'319,319,319,319,,319,319,319,,319,319,,,319,,,,,,,,,,,,,,,,,,,,319,',
+',319,,,319,319,,,319,,,,,,,,,,,,,,,,,,,,319,319,319,319,,319,319,319',
+'319,,,,,319,319,,,,635,635,635,319,635,319,319,319,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,,,,236,236,236,635',
+'236,635,635,635,236,236,,,,236,,236,236,236,236,236,236,236,,,,,,236',
+'236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236,236,236,236,236',
+'236,,236,236,236,,236,236,236,236,236,,,,,,,,,,,,,,,,,,,,236,,,236,',
+',236,236,,,236,,,,,,236,,,,,,,,,236,,,,,236,236,236,236,,236,236,236',
+'236,,,,,236,236,,,,235,235,235,236,235,236,236,236,235,235,,,,235,,235',
+'235,235,235,235,235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,',
+',235,,,235,235,235,235,235,235,235,235,,235,235,235,,235,235,235,235',
+'235,,,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,,,,235',
+',,,,235,235,235,235,,235,235,235,235,,,,,235,235,,,,20,20,20,235,20',
+'235,235,235,20,20,,,,20,,20,20,20,20,20,20,20,,,,,,20,20,20,20,20,20',
+'20,,,20,,,,,,,20,,,20,20,20,20,20,20,20,20,,20,20,20,,20,20,20,20,20',
+',,,,,,,,,,,,,,,,,,,20,,,20,,,20,20,,,20,,,,,,20,,,,,,,,,20,,,,,20,20',
+'20,20,,20,20,20,20,,,,,20,20,,,,232,232,232,20,232,20,20,20,232,232',
+',,,232,,232,232,232,232,232,232,232,,,,,,232,232,232,232,232,232,232',
+',,232,,,,,,,232,,,232,232,232,232,232,232,232,232,,232,232,232,,232',
+'232,232,232,232,,,,,,,,,,,,,,,,,,,,232,,,232,,,232,232,,,232,,,,,,232',
+',,,,,,,,232,,,,,232,232,232,232,,232,232,232,232,,,,,232,232,,,,919',
+'919,919,232,919,232,232,232,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,,919,919,919,,919,919,,,919,,,,,,,,,,,,,,,,,,,,919,',
+',919,,,919,919,,,919,,,,,,,,,,,,,,,,,,,,919,919,919,919,,919,919,919',
+'919,,,,,919,919,,,,611,611,611,919,611,919,919,919,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,,,,610,610,610,611',
+'610,611,611,611,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,,,,823,823,823,610,823,610,610,610,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,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,823,,,,450,450,450',
+'823,450,823,823,823,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,,,,257,257,257,450,257,450,450,450',
+'257,257,,,,257,,257,257,257,257,257,257,257,,,,,,257,257,257,257,257',
+'257,257,,,257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257,257,257',
+',257,257,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257,,,257,,',
+',,,257,,,,,,,,,257,,,,,257,257,257,257,,257,257,257,257,,,,,257,257',
+',,,717,717,717,257,717,257,257,257,717,717,,,,717,,717,717,717,717,717',
+'717,717,,,,,,717,717,717,717,717,717,717,,,717,,,,,,,717,,,717,717,717',
+'717,717,717,717,717,,717,717,717,,717,717,717,717,717,,,,,,,,,,,,,,',
+',,,,,717,,,717,,,717,717,,,717,,,,,,717,,,,,,,,,717,,,,,717,717,717',
+'717,,717,717,717,717,,,,,717,717,,,,258,258,258,717,258,717,717,717',
+'258,258,,,,258,,258,258,258,258,258,258,258,,,,,,258,258,258,258,258',
+'258,258,,,258,,,,,,,258,,,258,258,258,258,258,258,258,258,,258,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,,,,259,,259,259,259,259,259',
+'259,259,,,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259',
+'259,259,259,259,259,,259,259,259,,259,259,259,259,259,,,,,,,,,,,,,,',
+',,,,,259,,,259,,,259,259,,,259,,,,,,259,,,,,,,,,259,,,,,259,259,259',
+'259,,259,259,259,259,,,,,259,259,,,,739,739,739,259,739,259,259,259',
+'739,739,,,,739,,739,739,739,739,739,739,739,,,,,,739,739,739,739,739',
+'739,739,,,739,,,,,,,739,,,739,739,739,739,739,739,739,739,,739,739,739',
+',739,739,739,739,739,,,,,,,,,,,,,,,,,,,,739,,,739,,,739,739,,,739,,',
+',,,739,,,,,,,,,739,,,,,739,739,739,739,,739,739,739,739,,,,,739,739',
+',,,260,260,260,739,260,739,739,739,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,,,,256,256,256,260,256,260,260,260',
+'256,256,,,,256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256',
+'256,256,,,256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256,256',
+',256,256,256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,,256,,',
+',,,256,,,,,,,,,256,,,,,256,256,256,256,,256,256,256,256,,,,,256,256',
+',,,255,255,255,256,255,256,256,256,255,255,,,,255,,255,255,255,255,255',
+'255,255,,,,,,255,255,255,255,255,255,255,,,255,,,,,,,255,,,255,255,255',
+'255,255,255,255,255,,255,255,255,,255,255,255,255,255,,,,,,,,,,,,,,',
+',,,,,255,,,255,,,255,255,,,255,,,,,,255,,,,,,,,,255,,,,,255,255,255',
+'255,,255,255,255,255,,,,,255,255,,,,747,747,747,255,747,255,255,255',
+'747,747,,,,747,,747,747,747,747,747,747,747,,,,,,747,747,747,747,747',
+'747,747,,,747,,,,,,,747,,,747,747,747,747,747,747,747,747,,747,747,747',
+',747,747,747,747,747,,,,,,,,,,,,,,,,,,,,747,,,747,,,747,747,,,747,,',
+',,,747,,,,,,,,,747,,,,,747,747,747,747,,747,747,747,747,,,,,747,747',
+',,,254,254,254,747,254,747,747,747,254,254,,,,254,,254,254,254,254,254',
+'254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,,,254,,,254,254,254',
+'254,254,254,254,254,,254,254,254,,254,254,254,254,254,,,,,,,,,,,,,,',
+',,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,,,,254,,,,,254,254,254',
+'254,,254,254,254,254,,,,,254,254,,,,760,760,760,254,760,254,254,254',
+'760,760,,,,760,,760,760,760,760,760,760,760,,,,,,760,760,760,760,760',
+'760,760,,,760,,,,,,,760,,,760,760,760,760,760,760,760,760,,760,760,760',
+',760,760,760,760,760,,,,,,,,,,,,,,,,,,,,760,,,760,,,760,760,,,760,,',
+',,,760,,,,,,,,,760,,,,,760,760,760,760,,760,760,760,760,,,,,760,760',
+',,,761,761,761,760,761,760,760,760,761,761,,,,761,,761,761,761,761,761',
+'761,761,,,,,,761,761,761,761,761,761,761,,,761,,,,,,,761,,,761,761,761',
+'761,761,761,761,761,,761,761,761,,761,761,761,761,761,,,,,,,,,,,,,,',
+',,,,,761,,,761,,,761,761,,,761,,,,,,761,,,,,,,,,761,,,,,761,761,761',
+'761,,761,761,761,761,,,,,761,761,,,,762,762,762,761,762,761,761,761',
+'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',
+',,,763,763,763,762,763,762,762,762,763,763,,,,763,,763,763,763,763,763',
+'763,763,,,,,,763,763,763,763,763,763,763,,,763,,,,,,,763,,,763,763,763',
+'763,763,763,763,763,,763,763,763,,763,763,763,763,763,,,,,,,,,,,,,,',
+',,,,,763,,,763,,,763,763,,,763,,,,,,763,,,,,,,,,763,,,,,763,763,763',
+'763,,763,763,763,763,,,,,763,763,,,,253,253,253,763,253,763,763,763',
+'253,253,,,,253,,253,253,253,253,253,253,253,,,,,,253,253,253,253,253',
+'253,253,,,253,,,,,,,253,,,253,253,253,253,253,253,253,253,,253,253,253',
+',253,253,253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,',
+',,,253,,,,,,,,,253,,,,,253,253,253,253,,253,253,253,253,,,,,253,253',
+',,,765,765,765,253,765,253,253,253,765,765,,,,765,,765,765,765,765,765',
+'765,765,,,,,,765,765,765,765,765,765,765,,,765,,,,,,,765,,,765,765,765',
+'765,765,765,765,765,,765,765,765,,765,765,765,765,765,,,,,,,,,,,,,,',
+',,,,,765,,,765,,,765,765,,,765,,,,,,765,,,,,,,,,765,,,,,765,765,765',
+'765,,765,765,765,765,,,,,765,765,,,,252,252,252,765,252,765,765,765',
+'252,252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252,252',
+'252,252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,252,252',
+',252,252,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,',
+',,,252,,,,,,,,,252,,,,,252,252,252,252,,252,252,252,252,,,,,252,252',
+',,,251,251,251,252,251,252,252,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,,,251,251,,,251,,,,,,251,,,,,,,,,251,,,,,251,251,251',
+'251,,251,251,251,251,,,,,251,251,,,,684,684,684,251,684,251,251,251',
+'684,684,,,,684,,684,684,684,684,684,684,684,,,,,,684,684,684,684,684',
+'684,684,,,684,,,,,,,684,,,684,684,684,684,684,684,684,684,,684,684,684',
+',684,684,684,684,684,,,,,,,,,,,,,,,,,,,,684,,,684,,,684,684,,,684,,',
+',,,684,,,,,,,,,684,,,,,684,684,684,684,,684,684,684,684,,,,,684,684',
+',,,267,267,267,684,267,684,684,684,267,267,,,,267,,267,267,267,267,267',
+'267,267,,,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267,267,267',
+'267,267,267,267,267,267,267,267,267,,267,267,267,267,267,,,,,,,,,,,',
+',,,,,,,,267,,,267,,,267,267,,,267,,267,,267,,267,,,267,,,,,,267,,,,',
+'267,267,267,267,,267,267,267,267,,,,,267,267,,,,268,268,268,267,268',
+'267,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,268,,,,,268,268,,,,276,276,276,268,276,268,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,,,,,276,276',
+'276,,,250,250,250,276,250,276,276,276,250,250,,,,250,,250,250,250,250',
+'250,250,250,,,,,,250,250,250,250,250,250,250,,,250,,,,,,,250,,,250,250',
+'250,250,250,250,250,250,,250,250,250,,250,250,250,250,250,,,,,,,,,,',
+',,,,,,,,,250,,,250,,,250,250,,,250,,,,,,250,,,,,,,,,250,,,,,250,250',
+'250,250,,250,250,250,250,,,,,250,250,,,,249,249,249,250,249,250,250',
+'250,249,249,,,,249,,249,249,249,249,249,249,249,,,,,,249,249,249,249',
+'249,249,249,,,249,,,,,,,249,,,249,249,249,249,249,249,249,249,,249,249',
+'249,,249,249,249,249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,,249',
+',,,,,249,,,,,,,,,249,,,,,249,249,249,249,,249,249,249,249,,,,,249,249',
+',,,248,248,248,249,248,249,249,249,248,248,,,,248,,248,248,248,248,248',
+'248,248,,,,,,248,248,248,248,248,248,248,,,248,,,,,,,248,,,248,248,248',
+'248,248,248,248,248,,248,248,248,,248,248,248,248,248,,,,,,,,,,,,,,',
+',,,,,248,,,248,,,248,248,,,248,,,,,,248,,,,,,,,,248,,,,,248,248,248',
+'248,,248,248,248,248,,,,,248,248,,,,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',
+',,,246,246,246,247,246,247,247,247,246,246,,,,246,,246,246,246,246,246',
+'246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246,246,246',
+'246,246,246,246,246,,246,246,246,,246,246,246,246,246,,,,,,,,,,,,,,',
+',,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,,246,,,,,246,246,246',
+'246,,246,246,246,246,,,,,246,246,,,,245,245,245,246,245,246,246,246',
+'245,245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245,245,245,245',
+'245,245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245,,245,245,245',
+',245,245,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245,245,,,245,,',
+',,,245,,,,,,,,,245,,,,,245,245,245,245,,245,245,245,245,,,,,245,245',
+',,,805,805,805,245,805,245,245,245,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,,,,658,658,658,805,658,805,805,805',
+'658,658,,,,658,,658,658,658,658,658,658,658,,,,,,658,658,658,658,658',
+'658,658,,,658,,,,,,,658,,,658,658,658,658,658,658,658,658,,658,658,658',
+',658,658,658,658,658,,,,,,,,,,,,,,,,,,,,658,,,658,,,658,658,,,658,,658',
+',,,658,,,,,,,,,658,,,,,658,658,658,658,,658,658,658,658,,,,,658,658',
+',,,244,244,244,658,244,658,658,658,244,244,,,,244,,244,244,244,244,244',
+'244,244,,,,,,244,244,244,244,244,244,244,,,244,,,,,,,244,,,244,244,244',
+'244,244,244,244,244,,244,244,244,,244,244,244,244,244,,,,,,,,,,,,,,',
+',,,,,244,,,244,,,244,244,,,244,,,,,,244,,,,,,,,,244,,,,,244,244,244',
+'244,,244,244,244,244,,,,,244,244,,,,283,283,283,244,283,244,244,244',
+'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',
+',,,818,818,818,283,818,283,283,283,818,818,,,,818,,818,818,818,818,818',
+'818,818,,,,,,818,818,818,818,818,818,818,,,818,,,,,,,818,,,818,818,818',
+'818,818,818,818,818,,818,818,818,,818,818,818,818,818,,,,,,,,,,,,,,',
+',,,,,818,,,818,,,818,818,,,818,,,,,,818,,,,,,,,,818,,,,,818,818,818',
+'818,,818,818,818,818,,,,,818,818,,,,285,285,285,818,285,818,818,818',
+'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',
+',,,288,288,288,285,288,285,285,285,288,288,,,,288,,288,288,288,288,288',
+'288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,,,288,,,288,288,288',
+'288,288,288,288,288,,288,288,288,,288,288,288,288,288,,,,,,,,,,,,,,',
+',,,,,288,,,288,,,288,288,,,288,,,,,,288,,,,,,,,,288,,,,,288,288,288',
+'288,,288,288,288,288,,,,,288,288,,,,289,289,289,288,289,288,288,288',
+'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',
+',,,243,243,243,289,243,289,289,289,243,243,,,,243,,243,243,243,243,243',
+'243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,,,243,,,243,243,243',
+'243,243,243,243,243,,243,243,243,,243,243,243,243,243,,,,,,,,,,,,,,',
+',,,,,243,,,243,,,243,243,,,243,,,,,,243,,,,,,,,,243,,,,,243,243,243',
+'243,,243,243,243,243,,,,,243,243,,,,653,653,653,243,653,243,243,243',
+'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,,,803,,803',
+'803,803,803,803,,,,,,,,,803,,653,653,653,653,,653,653,653,653,,,,,653',
+'653,,,,,,803,653,,653,653,653,294,294,294,294,294,803,803,,294,294,803',
+',,294,,294,294,294,294,294,294,294,,,,,,294,294,294,294,294,294,294',
+',,294,,,,,,294,294,,294,294,294,294,294,294,294,294,294,,294,294,294',
+',294,294,294,294,294,,,,,,,,,,,,,,,,,,,,294,,,294,,,294,294,,,294,,294',
+',,,294,,,,,,,,,294,,,,,294,294,294,294,,294,294,294,294,,,,,294,294',
+',,,242,242,242,294,242,294,294,294,242,242,,,,242,,242,242,242,242,242',
+'242,242,,,,,,242,242,242,242,242,242,242,,,242,,,,,,,242,,,242,242,242',
+'242,242,242,242,242,,242,242,242,,242,242,242,242,242,,,,,,,,,,,,,,',
+',,,,,242,,,242,,,242,242,,,242,,,,,,242,,,,,,,,,242,,,,,242,242,242',
+'242,,242,242,242,242,,,,,242,242,,,,241,241,241,242,241,242,242,242',
+'241,241,,,,241,,241,241,241,241,241,241,241,,,,,,241,241,241,241,241',
+'241,241,,,241,,,,,,,241,,,241,241,241,241,241,241,241,241,,241,241,241',
+',241,241,241,241,241,,,,,,,,,,,,,,,,,,,,241,,,241,,,241,241,,,241,,',
+',,,241,,,,,,,,,241,,,,,241,241,241,241,,241,241,241,241,,,,,241,241',
+',,,841,841,841,241,841,241,241,241,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,,,,,841,841,,,,43,43,43,841,43,841,841',
+'841,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,,,,221,221,221,43,221,43,43,43,221,221,,,,221',
+',221,221,221,221,221,221,221,,,,,,221,221,221,221,221,221,221,,,221',
+',,,,,,221,,,221,221,221,221,221,221,221,221,,221,221,221,,221,221,221',
+'221,221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221,,,,,,221,,,,,,',
+',,221,,,,,221,221,221,221,,221,221,221,221,,,,,221,221,221,,,220,220',
+'220,221,220,221,221,221,220,220,,,,220,,220,220,220,220,220,220,220',
+',,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220,220,220',
+'220,220,220,,220,220,220,,220,220,220,220,220,,,,,,,,,,,,,,,,,,,,220',
+',,220,,,220,220,,,220,,,,,,220,,,,,,,,,220,,,,,220,220,220,220,,220',
+'220,220,220,,,,,220,220,,,,219,219,219,220,219,220,220,220,219,219,',
+',,219,,219,219,219,219,219,219,219,,,,,,219,219,219,219,219,219,219',
+',,219,,,,,,,219,,,219,219,219,219,219,219,219,219,,219,219,219,,219',
+'219,219,219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219,,,,,,219',
+',,,,,,,,219,,,,,219,219,219,219,,219,219,219,219,,,,,219,219,,,,975',
+'975,975,219,975,219,219,219,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,975,975,,,,,975,975,,,,44,44,44,975,44,975,975',
+'975,44,44,,,,44,,44,44,44,44,44,44,44,,,,,,44,44,44,44,44,44,44,,,44',
+',,,,,,44,,,44,44,44,44,44,44,44,44,,44,44,44,,44,44,44,44,44,,,,,,,',
+',,,,,,,,,,,,44,,,44,,,44,44,,,44,,,,,,44,,,,,,,,,44,,,,,44,44,44,44',
+',44,44,44,44,,,,,44,44,,,,562,562,562,44,562,44,44,44,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,,562,562,562,562,,,,,562,562',
+',,,343,343,343,562,343,562,562,562,343,343,,,,343,,343,343,343,343,343',
+'343,343,,,,,,343,343,343,343,343,343,343,,,343,,,,,,,343,,,343,343,343',
+'343,343,343,343,343,,343,343,343,,343,343,343,343,343,,,,,,,,,,,,,,',
+',,,,,343,,,343,,,343,343,,,343,,,,,,343,,,,,,,,,343,,,,,343,343,343',
+'343,,343,343,343,343,,,,,343,343,,,,344,344,344,343,344,343,343,343',
+'344,344,,,,344,,344,344,344,344,344,344,344,,,,,,344,344,344,344,344',
+'344,344,,,344,,,,,,,344,,,344,344,344,344,344,344,344,344,,344,344,344',
+',344,344,344,344,344,,,,,,,,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,',
+',,,344,,,,,,,,,344,,,,,344,344,344,344,,344,344,344,344,,,,,344,344',
+',,,552,552,552,344,552,344,344,344,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,552,,,,,552,552,,,,551,551,551,552,551',
+'552,552,552,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,551,,,,214,214,214,551,214,551,551,551,214,214,,,,214,,214,214',
+'214,214,214,214,214,,,,,,214,214,214,214,214,214,214,,,214,,,,,,,214',
+',,214,214,214,214,214,214,214,214,214,214,214,214,,214,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',
+'214,213,214,214,214,213,213,,,,213,,213,213,213,213,213,213,213,,,,',
+',213,213,213,213,213,213,213,,,213,,,,,,,213,,,213,213,213,213,213,213',
+'213,213,,213,213,213,,213,213,213,213,213,,,,,,,,,,,,,,,,,,,,213,,,213',
+',,213,213,,,213,,,,,,213,,,,,,,,,213,,,,,213,213,213,213,,213,213,213',
+'213,,,,,213,213,,,,537,537,537,213,537,213,213,213,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,,,,534,534',
+'534,537,534,537,537,537,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,,,,212,212,212,534,212,534,534,534',
+'212,212,,,,212,,212,212,212,212,212,212,212,,,,,,212,212,212,212,212',
+'212,212,,,212,,,,,,,212,,,212,212,212,212,212,212,212,212,,212,212,212',
+',212,212,212,212,212,,,,,,,,,,,,,,,,,,,,212,,,212,,,212,212,,,212,,',
+',,,212,,,,,,,,,212,,,,,212,212,212,212,,212,212,212,212,,,,,212,212',
+',,,211,211,211,212,211,212,212,212,211,211,,,,211,,211,211,211,211,211',
+'211,211,,,,,,211,211,211,211,211,211,211,,,211,,,,,,,211,,,211,211,211',
+'211,211,211,211,211,,211,211,211,,211,211,211,211,211,,,,,,,,,,,,,,',
+',,,,,211,,,211,,,211,211,,,211,,,,,,211,,,,,,,,,211,,,,,211,211,211',
+'211,,211,211,211,211,,,,,211,211,,,,210,210,210,211,210,211,211,211',
+'210,210,,,,210,,210,210,210,210,210,210,210,,,,,,210,210,210,210,210',
+'210,210,,,210,,,,,,,210,,,210,210,210,210,210,210,210,210,,210,210,210',
+',210,210,210,210,210,,,,,,,,,,,,,,,,,,,,210,,,210,,,210,210,,,210,,210',
+',,,210,,,,,,,,,210,,,,,210,210,210,210,,210,210,210,210,,,,,210,210',
+',,,,,,210,,210,210,210,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,,,,209',
+'209,209,58,209,58,58,58,209,209,,,,209,,209,209,209,209,209,209,209',
+',,,,,209,209,209,209,209,209,209,,,209,,,,,,,209,,,209,209,209,209,209',
+'209,209,209,,209,209,209,,209,209,209,209,209,,,,,,,,,,,,,,,,,,,,209',
+',,209,,,209,209,,,209,,209,,,,209,,,,,,,,,209,,,,,209,209,209,209,,209',
+'209,209,209,,,,,209,209,,,,528,528,528,209,528,209,209,209,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,,,,59,59',
+'59,528,59,528,528,528,59,59,,,,59,,59,59,59,59,59,59,59,,,,,,59,59,59',
+'59,59,59,59,,,59,,,,,,,59,,,59,59,59,59,59,59,59,59,59,59,59,59,,59',
+'59,59,59,59,,,,,,,,,,,,,,,,,,,,59,,,59,,,59,59,,,59,,59,,,,59,,,59,',
+',,,,59,,,,,59,59,59,59,,59,59,59,59,,,,,59,59,,,,524,524,524,59,524',
+'59,59,59,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,,,,363,363,363,524,363,524,524,524,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,,,,,363,363,,,,523,523,523,363,523,363',
+'363,363,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,,,,520,520,520,523,520,523,523,523,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,,,,514,514,514,520,514,520,520,520,514',
+'514,,,,514,,514,514,514,514,514,514,514,,,,,,514,514,514,514,514,514',
+'514,,,514,,,,,,,514,,,514,514,514,514,514,514,514,514,514,514,514,514',
+',514,514,514,514,514,,,,,,,,,,,,,,,,,,,,514,,,514,,,514,514,,,514,,514',
+',514,,514,,,514,,,,,,514,,,,,514,514,514,514,,514,514,514,514,,,,,514',
+'514,,,,512,512,512,514,512,514,514,514,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,,,997,,997,997,997,997,997,,,,,,,,,997',
+',512,512,512,512,,512,512,512,512,,,,,512,512,,,,,,997,512,,512,512',
+'512,122,122,122,122,122,997,997,,122,122,997,,,122,,122,122,122,122',
+'122,122,122,,,,,,122,122,122,122,122,122,122,,,122,,,,,,122,122,,122',
+'122,122,122,122,122,122,122,122,,122,122,122,,122,122,122,122,122,,',
+',,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122,,122,,,,122,,,,,,,,,122,',
+',,,122,122,122,122,,122,122,122,122,,,,,122,122,,,,121,121,121,122,121',
+'122,122,122,121,121,,,,121,,121,121,121,121,121,121,121,,,,,,121,121',
+'121,121,121,121,121,,,121,,,,,,,121,,,121,121,121,121,121,121,121,121',
+',121,121,121,,121,121,121,121,121,,,,,,,,,,,,,,,,,,,,121,,,121,,,121',
+'121,,,121,,,,,,121,,,,,,,,,121,,,,,121,121,121,121,,121,121,121,121',
+',,,,121,121,,,,379,379,379,121,379,121,121,121,379,379,,,,379,,379,379',
+'379,379,379,379,379,,,,,,379,379,379,379,379,379,379,,,379,,,,,,,379',
+',,379,379,379,379,379,379,379,379,,379,379,379,,379,379,379,379,379',
+',,,,,,,,,,,,,,,,,,,379,,,379,,,379,379,,,379,,,,,,379,,,,,,,,,379,,',
+',,379,379,379,379,,379,379,379,379,,,,,379,379,,,,,,,379,,379,379,379',
+'504,504,504,504,504,,,,504,504,,,,504,,504,504,504,504,504,504,504,',
+',,,,504,504,504,504,504,504,504,,,504,,,,,,504,504,504,504,504,504,504',
+'504,504,504,504,504,,504,504,504,,504,504,504,504,504,,,,,,,,,,,,,,',
+',,,,,504,,,504,,,504,504,,,504,,504,,,,504,,,,,,,,,504,,,,,504,504,504',
+'504,,504,504,504,504,,,,,504,504,,,,,,504,504,,504,504,504,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,,,,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,,,,494,494,494,496',
+'494,496,496,496,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,,,,120,120,120,494,120,494,494,494,120,120,',
+',,120,,120,120,120,120,120,120,120,,,,,,120,120,120,120,120,120,120',
+',,120,,,,,,,120,,,120,120,120,120,120,120,120,120,,120,120,120,,120',
+'120,120,120,120,,,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120',
+',,,,,,,,120,,,,,120,120,120,120,,120,120,120,120,,,,,120,120,,,,119',
+'119,119,120,119,120,120,120,119,119,,,,119,,119,119,119,119,119,119',
+'119,,,,,,119,119,119,119,119,119,119,,,119,,,,,,,119,,,119,119,119,119',
+'119,119,119,119,,119,119,119,,119,119,119,119,119,,,,,,,,,,,,,,,,,,',
+',119,,,119,,,119,119,,,119,,,,,,119,,,,,,,,,119,,,,,119,119,119,119',
+',119,119,119,119,,,,,119,119,,,,118,118,118,119,118,119,119,119,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,',
+',,60,60,60,118,60,118,118,118,60,60,,,,60,,60,60,60,60,60,60,60,,,,',
+',60,60,60,60,60,60,60,,,60,,,,,,,60,,,60,60,60,60,60,60,60,60,60,60',
+'60,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,,,,407,407,407,63,407,63,63,63,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,,,,64,64',
+'64,407,64,407,407,407,64,64,,,,64,,64,64,64,64,64,64,64,,,,,,64,64,64',
+'64,64,64,64,,,64,,,,,,,64,,,64,64,64,64,64,64,64,64,,64,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,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,,,,,113',
+'113,,,,,,113,113,,113,113,113,68,68,68,,68,,,,68,68,,,,68,,68,68,68',
+'68,68,68,68,,,,,,68,68,68,68,68,68,68,,,68,,,,,,,68,,,68,68,68,68,68',
+'68,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,,',
+',454,454,454,70,454,70,70,70,454,454,,,,454,,454,454,454,454,454,454',
+'454,,,,,,454,454,454,454,454,454,454,,,454,,,,,,,454,,,454,454,454,454',
+'454,454,454,454,,454,454,454,,454,454,454,454,454,,,,,,,,,,,,,,,,,,',
+',454,,,454,,,454,454,,,454,,,,,,454,,,,,,,,,454,,,,,454,454,454,454',
+',454,454,454,454,,,,,454,454,,,,453,453,453,454,453,454,454,454,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,',
+',,452,452,452,453,452,453,453,453,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,,,,606,606,606,452,606,452,452,452',
+'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,,,,,606,606',
+',,,327,327,327,606,327,606,606,606,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,,,,605,605,605,327,605,327,327,327',
+'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',
+',,,604,604,604,605,604,605,605,605,604,604,,,,604,,604,604,604,604,604',
+'604,604,,,,,,604,604,604,604,604,604,604,,,604,,,,,,,604,,,604,604,604',
+'604,604,604,604,604,604,604,604,604,,604,604,604,604,604,,,,,,,,,,,',
+',,,,,,,,604,,,604,,,604,604,,,604,,,,604,,604,,,604,,,,,,604,,,,,604',
+'604,604,604,,604,604,604,604,,,,,604,604,,,,603,603,603,604,603,604',
+'604,604,603,603,,,,603,,603,603,603,603,603,603,603,,,,,,603,603,603',
+'603,603,603,603,,,603,,,,,,,603,,,603,603,603,603,603,603,603,603,603',
+'603,603,603,,603,603,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603',
+'603,,,603,,603,,603,,603,,,603,,,,,,603,,,,,603,603,603,603,,603,603',
+'603,603,,,,,603,603,,,,600,600,600,603,600,603,603,603,600,600,,,,600',
+',600,600,600,600,600,600,600,,,,,,600,600,600,600,600,600,600,,,600',
+',,,,,,600,,,600,600,600,600,600,600,600,600,,600,600,600,,600,600,600',
+'600,600,,,,,,,,,,,,,,,,,,,,600,,,600,,,600,600,,,600,,,,,,600,,,,,,',
+',,600,,,,,600,600,600,600,,600,600,600,600,,,,,600,600,,,,711,711,711',
+'600,711,600,600,600,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,599,599,599,599,599,,,,599,599',
+',,,599,,599,599,599,599,599,599,599,,,,,,599,599,599,599,599,599,599',
+',,599,,,,,,599,599,,599,599,599,599,599,599,599,599,599,,599,599,599',
+',599,599,599,599,599,,,,,,,,,,,,,,,,,,,,599,,,599,,,599,599,,,599,,599',
+',,,599,,,,,,,,,599,,,,,599,599,599,599,,599,599,599,599,,,,,599,599',
+',,,596,596,596,599,596,599,599,599,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,,,,595,595,595,596,595',
+'596,596,596,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,,,,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,,,,42,42,42,594,42',
+'594,594,594,42,42,,,,42,,42,42,42,42,42,42,42,,,,,,42,42,42,42,42,42',
+'42,,,42,,,,,,,42,,,42,42,42,42,42,42,42,42,,42,42,42,,42,42,42,42,42',
+',,,,,,,,,,,,,,,,,,,42,,,42,,,42,42,,,42,,,,,,42,,,,,,,,,42,,,,,42,42',
+'42,42,,42,42,42,42,,,,,42,42,,,,,,,42,,42,42,42,9,9,9,9,9,9,9,9,9,9',
+'9,9,9,9,9,9,9,9,9,9,9,9,9,9,,,,9,9,9,9,9,9,9,9,9,9,,,,,,9,9,9,9,9,9',
+'9,9,9,,,9,,,,,,,,9,9,,9,9,9,9,9,9,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,398,398,398,398,398',
+'398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398',
+'398,398,,,,398,398,398,398,398,398,398,398,398,398,,,,,,398,398,398',
+'398,398,398,398,398,398,,,398,,,,,,,,398,398,,398,398,398,398,398,398',
+'398,,,398,398,,,,398,398,398,398,,,,,,,,,,,,,,398,398,,398,398,398,398',
+'398,398,398,398,398,398,398,398,,,398,398,,,,,,,,,,,,,,398,591,591,591',
+'591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591',
+'591,591,591,591,,,,591,591,591,591,591,591,591,591,591,591,,,,,,591',
+'591,591,591,591,591,591,591,591,,,591,,,,,,,,591,591,,591,591,591,591',
+'591,591,591,,,591,591,,,,591,591,591,591,,,,,,,,,,,,,,591,591,,591,591',
+'591,591,591,591,591,591,591,591,591,591,,,591,591,,,,,,,,,,,,,,591,71',
+'71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71',
+',,,71,71,71,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,71,71,71',
+'71,71,,71,,,,,,71,71,,71,71,71,71,71,71,71,,,71,71,,,,71,71,71,71,,',
+',,,71,,,,,,,,71,71,,71,71,71,71,71,71,71,71,71,71,71,71,,,71,723,723',
+'723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723',
+'723,723,723,723,723,,,,723,723,723,723,723,723,723,723,723,723,,,,,',
+'723,723,723,723,723,723,723,723,723,,,723,,,,,,,,723,723,,723,723,723',
+'723,723,723,723,,,723,723,,,,723,723,723,723,,,,,,,,,,,,,,723,723,,723',
+'723,723,723,723,723,723,723,723,723,723,723,515,515,723,,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',
+'561,561,515,,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,972,972,561,,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,597,597,972,,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,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,449,449,598,,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,448,448,449,,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,263,263,448,,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,215,215,263,,215,,,,,,,,215,215,,215,215',
+'215,215,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,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,976,976,216,,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,560,560,976,,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,554,554,560',
+',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,525,525,554,,525,,,,,,,,525,525,,525,525,525,525,525,525',
+'525,,,525,525,,,,525,525,525,525,,,,,,525,,,,,,,,525,525,,525,525,525',
+'525,525,525,525,525,525,525,525,525,526,526,525,,526,,,,,,,,526,526',
+',526,526,526,526,526,526,526,,,526,526,,,,526,526,526,526,,,,,,526,',
+',,,,,,526,526,,526,526,526,526,526,526,526,526,526,526,526,526,553,553',
+'526,,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,977,977,553,,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,516,516,977,,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,,542',
+'516,542,542,542,542,542,,721,,721,721,721,721,721,542,,,,,,,,721,,995',
+',995,995,995,995,995,,,,,,542,542,,995,,,,,721,542,542,542,542,,,,542',
+'721,721,721,721,,,,721,995,,993,,993,993,993,993,993,,,995,995,,,,995',
+'993,,910,,910,910,910,910,910,,799,,799,799,799,799,799,910,,,,,993',
+',,799,,,,,,993,993,993,993,,,,993,910,,,,,,,,799,910,910,910,910,,,',
+'910,799,799,799,799,,,912,799,912,912,912,912,912,,801,,801,801,801',
+'801,801,912,,,,,,,,801,,914,,914,914,914,914,914,,,,,,912,,,914,,,,',
+'801,912,912,912,912,,,,912,801,801,801,801,,,,801,914,,722,,722,722',
+'722,722,722,,,914,914,,,,914,722,,1014,,1014,1014,1014,1014,1014,940',
+',940,940,940,940,940,,1014,,,,,722,,940,,,,,,,722,722,722,722,,,,722',
+'1014,,,,,,,940,,,,1014,1014,,,,1014,,940,940,,,664,940,664,664,664,664',
+'664,999,,999,999,999,999,999,938,664,938,938,938,938,938,,999,,,,,,',
+'938,,,,,,,,664,,,,,,,999,,664,664,664,664,,938,,664,,999,999,,,,999',
+',938,938,,,,938' ]
+ racc_action_check = arr = ::Array.new(25333, 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 = [
+ 5068, 10, nil, -101, nil, 7356, 935, -53, 23276, 23148,
+ -32, nil, -42, 3, 156, 127, 580, 399, nil, -69,
+ 8535, 2408, 203, nil, 362, nil, 184, 984, 1713, 6030,
+ 6161, 6292, nil, 5488, 7086, 7217, nil, 113, 469, 403,
+ 198, 199, 23009, 14962, 15617, 168, 728, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 1305, nil, 17328, 17721,
+ 19972, 33, nil, 20103, 20365, nil, nil, 20496, 20774, 20905,
+ 21036, 23660, nil, nil, nil, nil, nil, nil, nil, 514,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 0, nil, nil,
+ 388, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 335, nil, 20635, nil, nil, nil, nil, 19841, 19710,
+ 19579, 18777, 18646, 3528, nil, -28, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 214, nil, 4648, 17459,
+ 17189, 17058, 16927, 16534, 16403, 24322, 24383, nil, nil, 15355,
+ 15224, 15093, nil, nil, 688, 162, 166, 296, 292, 260,
+ 327, nil, 8666, 3108, 328, 8404, 8273, 7749, 7487, 6955,
+ 6562, 14700, 14569, 14168, 13382, 12989, 12858, 12727, 12596, 12465,
+ 12334, 11679, 11548, 11286, 10631, 10369, 10238, 9452, 9714, 9845,
+ 10107, nil, nil, 24261, nil, nil, 325, 11941, 12072, nil,
+ nil, nil, nil, nil, nil, nil, 12203, nil, 2548, nil,
+ 289, 293, nil, 13513, 363, 13775, nil, nil, 13906, 14037,
+ nil, nil, 99, nil, 14438, 1213, 357, 334, 4228, 372,
+ 413, 375, 6423, 4508, 860, 863, 896, 454, 956, nil,
+ 424, 387, 199, nil, nil, nil, 439, 233, 400, 8011,
+ nil, 227, 484, 576, nil, 495, nil, 21691, 5768, 1145,
+ 433, nil, 394, 319, 485, 476, 429, 505, nil, nil,
+ 278, 35, 32, 15879, 16010, 81, 577, 460, 67, 25,
+ 1028, 542, 11, 575, nil, nil, 501, 611, 294, nil,
+ 1025, nil, 503, 17983, nil, nil, nil, 698, 696, 694,
+ 693, 625, 588, 584, 582, 555, nil, 445, nil, 18908,
+ nil, 423, 427, 319, 432, 494, -41, -45, 143, nil,
+ nil, nil, nil, nil, nil, nil, nil, 501, 23404, nil,
+ nil, nil, nil, 510, nil, nil, 494, 20234, 501, nil,
+ nil, 492, nil, 764, 140, 594, nil, nil, 1848, nil,
+ nil, nil, nil, nil, 1988, 508, nil, 513, 521, 308,
+ 256, 1195, nil, nil, nil, 498, 852, 566, nil, nil,
+ 1441, 1577, nil, nil, nil, -31, nil, 566, 24200, 24139,
+ 9321, 64, 21429, 21298, 21167, 3248, 4088, 681, 560, 601,
+ 604, 605, 627, 4648, 4508, 4788, 3808, 1526, 1662, 3528,
+ 1392, 3388, 3948, 3108, 3668, 2968, 941, 1033, 4228, 4368,
+ 2128, nil, 1116, nil, nil, nil, nil, 569, nil, nil,
+ nil, 573, nil, nil, 19448, nil, 19317, nil, 19186, nil,
+ 419, nil, nil, nil, 19047, 1327, 3388, 577, 579, nil,
+ nil, 592, 18507, 601, 18376, 23834, 24871, 692, 643, nil,
+ 18245, 604, nil, 18114, 17852, 24627, 24688, 2828, 17590, 733,
+ 735, 616, 658, nil, 16796, nil, nil, 16665, nil, nil,
+ nil, nil, 24933, 2268, 740, nil, 2548, 149, 121, 739,
+ 755, 16272, 16141, 24749, 24566, 41, nil, nil, 995, nil,
+ 24505, 23895, 15748, nil, nil, 234, 3948, 677, nil, -33,
+ nil, nil, nil, 1115, nil, nil, nil, 649, nil, nil,
+ 308, nil, 178, nil, nil, 640, nil, 666, nil, nil,
+ nil, 23532, nil, 668, 22878, 22747, 22616, 24017, 24078, 22485,
+ 22215, 367, 714, 22084, 21953, 21822, 21560, 713, nil, nil,
+ 9059, 8928, 715, nil, nil, nil, 211, 255, 250, 112,
+ 684, 684, 808, nil, 792, -23, nil, nil, 711, -57,
+ 828, nil, 706, nil, 756, 8142, nil, nil, 7880, nil,
+ 731, -80, 7618, 712, nil, 716, 277, 275, 767, 241,
+ 820, 775, 743, 14299, nil, 819, -14, 872, 13251, nil,
+ nil, nil, 343, nil, 25214, nil, 754, 757, nil, 763,
+ 765, 766, nil, nil, nil, nil, nil, nil, nil, nil,
+ 757, 1162, nil, nil, 11810, nil, nil, nil, 850, nil,
+ nil, nil, 852, nil, nil, 854, 362, nil, 902, nil,
+ nil, nil, nil, 908, nil, 98, 803, 27, 64, 26,
+ 68, 22346, 790, 765, nil, 809, 2968, 9583, nil, 932,
+ 3668, 24941, 25138, 23773, nil, nil, nil, nil, nil, nil,
+ 2828, nil, nil, nil, nil, nil, nil, nil, 810, 9976,
+ 816, 337, 325, 608, 720, nil, 2268, 10500, nil, 815,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 10762, 10893, 11024, 11155, 305, 11417, nil, -53, nil, nil,
+ 836, nil, nil, 915, nil, 4368, nil, nil, nil, nil,
+ nil, 818, 276, nil, nil, 959, nil, 2408, 853, 901,
+ nil, nil, nil, 36, 860, 1047, nil, nil, 182, 25022,
+ nil, 25082, nil, 14346, nil, 13120, nil, 1368, nil, 866,
+ 253, 871, nil, nil, nil, nil, 995, nil, 13644, 997,
+ 5628, 1848, nil, 9190, 1988, 71, 150, nil, 999, -73,
+ 2688, nil, 1007, 887, -75, nil, 891, 889, 304, nil,
+ nil, 14831, 5899, 2688, 4088, nil, 896, 902, nil, 903,
+ 904, 908, nil, 933, 918, 929, 927, 6693, nil, nil,
+ nil, nil, 4788, nil, nil, 102, 6824, nil, nil, nil,
+ nil, 985, 948, nil, nil, nil, 950, 961, nil, 968,
+ 971, nil, 973, nil, nil, 977, 1303, 975, 1109, nil,
+ nil, -1, nil, 1111, 1113, nil, 258, nil, nil, nil,
+ 1118, nil, nil, nil, 1044, nil, nil, 1044, nil, nil,
+ 25014, nil, 25074, nil, 25099, nil, nil, 1031, 818, 8797,
+ 612, 1090, nil, 3808, 106, 36, 665, 1094, 92, nil,
+ 3248, 2128, nil, nil, 1126, nil, 7264, nil, 25228, nil,
+ 25162, nil, nil, nil, nil, 383, 977, 1017, 5348, nil,
+ nil, nil, nil, nil, 5208, nil, 4928, 1021, nil, nil,
+ 1028, 1032, 1038, 1042, nil, 1043, nil, 453, nil, nil,
+ nil, 992, 23956, nil, 1171, 15486, 24444, 24810, 105, 1076,
+ 1181, 1058, 1061, 1063, 1065, 1066, 1308, 1068, 1298, 19,
+ 1201, 1203, nil, 24997, nil, 24958, nil, 18554, nil, 25221,
+ nil, nil, nil, 857, 1129, 1138, nil, 1103, 6, 26,
+ 33, 34, nil, nil, 25155, nil, nil, nil, nil, 827,
+ 1106, nil, nil, nil, 1107, 1108, 1109, 1111, nil, 42,
+ 1112, 1114, 6470, nil, nil, nil, nil, nil, -132, nil ]
+
+racc_action_default = [
+ -3, -607, -1, -593, -4, -607, -7, -607, -607, -607,
+ -607, -29, -607, -607, -33, -607, -607, -281, -45, -595,
+ -607, -50, -52, -53, -54, -58, -258, -258, -258, -294,
+ -330, -331, -70, -11, -74, -82, -84, -607, -497, -498,
+ -607, -607, -607, -607, -607, -595, -237, -272, -273, -274,
+ -275, -276, -277, -278, -279, -280, -581, -283, -287, -606,
+ -571, -302, -304, -607, -607, -308, -311, -593, -607, -607,
+ -607, -607, -332, -333, -335, -336, -438, -439, -440, -441,
+ -442, -463, -445, -446, -465, -467, -450, -455, -459, -461,
+ -477, -465, -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, -3, -17, -607, -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, -607,
+ -607, -607, -607, -607, -248, -607, -607, -591, -592, -607,
+ -607, -595, -596, -49, -607, -497, -498, -607, -281, -607,
+ -607, -229, -607, -11, -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, -402, -404, -607, -589, -590, -59, -248, -607, -301,
+ -408, -417, -419, -65, -414, -66, -595, -67, -238, -253,
+ -262, -262, -257, -607, -263, -607, -463, -573, -607, -607,
+ -68, -69, -593, -12, -607, -15, -607, -72, -11, -595,
+ -607, -75, -78, -11, -90, -91, -607, -607, -98, -294,
+ -297, -595, -607, -330, -331, -334, -415, -607, -80, -607,
+ -86, -291, -480, -607, -214, -215, -230, -607, -11, -285,
+ -595, -239, -599, -599, -607, -607, -599, -607, -303, -393,
+ -51, -607, -607, -607, -607, -593, -607, -594, -497, -498,
+ -607, -607, -281, -607, -346, -347, -108, -109, -607, -111,
+ -607, -281, -505, -607, -497, -498, -323, -113, -114, -155,
+ -156, -157, -173, -178, -185, -188, -325, -607, -569, -607,
+ -443, -607, -607, -607, -607, -607, -607, -607, -607, 1040,
+ -5, -605, -23, -24, -25, -26, -27, -607, -607, -19,
+ -20, -21, -123, -607, -30, -32, -268, -607, -607, -267,
+ -31, -607, -34, -607, -281, -42, -44, -196, -243, -263,
+ -46, -47, -35, -197, -243, -595, -249, -262, -262, -582,
+ -583, -258, -412, -584, -585, -583, -582, -258, -411, -413,
+ -584, -585, -41, -204, -48, -595, -300, -607, -607, -607,
+ -248, -291, -607, -607, -607, -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,
+ -595, -423, -258, -582, -583, -56, -60, -595, -259, -421,
+ -423, -595, -296, -254, -607, -255, -607, -260, -607, -264,
+ -607, -576, -578, -10, -594, -14, -3, -595, -71, -289,
+ -87, -76, -607, -595, -248, -607, -607, -97, -607, -480,
+ -607, -83, -88, -607, -607, -607, -607, -235, -607, -430,
+ -607, -595, -607, -240, -601, -600, -242, -601, -292, -293,
+ -572, -305, -529, -11, -337, -338, -11, -607, -607, -607,
+ -607, -607, -248, -607, -607, -291, -316, -108, -109, -110,
+ -607, -607, -248, -319, -503, -607, -11, -507, -327, -595,
+ -444, -464, -469, -607, -471, -447, -466, -607, -468, -449,
+ -607, -452, -607, -454, -457, -607, -458, -607, -478, -8,
+ -18, -607, -28, -271, -607, -607, -248, -607, -607, -607,
+ -607, -416, -607, -250, -252, -607, -607, -61, -247, -409,
+ -607, -607, -63, -410, -299, -597, -582, -583, -582, -583,
+ -595, -607, -607, -424, -55, -405, -421, -245, -607, -382,
+ -607, -295, -262, -261, -265, -607, -574, -575, -607, -13,
+ -607, -73, -607, -79, -85, -595, -582, -583, -246, -586,
+ -96, -607, -81, -607, -203, -213, -595, -606, -606, -284,
+ -286, -288, -599, -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, -606, -339, -606, -309,
+ -340, -341, -312, -607, -315, -607, -595, -582, -583, -586,
+ -290, -607, -108, -109, -112, -595, -11, -607, -321, -607,
+ -11, -529, -529, -607, -570, -470, -473, -474, -475, -476,
+ -11, -448, -451, -453, -456, -460, -462, -124, -269, -607,
+ -595, -582, -583, -583, -582, -43, -244, -607, -598, -262,
+ -37, -199, -38, -200, -62, -39, -202, -40, -201, -64,
+ -607, -607, -607, -607, -416, -607, -403, -382, -407, -406,
+ -607, -418, -383, -595, -385, -11, -420, -256, -266, -577,
+ -16, -77, -416, -89, -298, -606, -344, -11, -431, -606,
+ -432, -433, -241, -607, -595, -607, -510, -511, -607, -607,
+ -521, -607, -524, -607, -526, -607, -348, -607, -350, -352,
+ -359, -595, -542, -552, -562, -566, -607, -342, -607, -607,
+ -11, -11, -314, -607, -11, -416, -607, -416, -607, -607,
+ -11, -324, -607, -595, -607, -328, -607, -270, -416, -36,
+ -198, -251, -607, -236, -11, -57, -568, -568, -364, -366,
+ -366, -366, -381, -607, -595, -387, -537, -545, -546, -556,
+ -422, -9, -11, -437, -345, -607, -607, -435, -395, -398,
+ -400, -607, -568, -549, -567, -513, -514, -514, -540, -514,
+ -514, -559, -514, -537, -554, -595, -607, -357, -607, -538,
+ -306, -607, -307, -607, -607, -265, -606, -317, -320, -504,
+ -607, -326, -506, -508, -507, -472, -425, -607, -362, -363,
+ -372, -374, -607, -377, -607, -379, -384, -607, -607, -607,
+ -544, -607, -436, -11, -497, -498, -607, -607, -281, -434,
+ -11, -11, -396, -509, -607, -517, -607, -519, -607, -522,
+ -607, -525, -527, -349, -351, -355, -607, -360, -11, -310,
+ -313, -426, -427, -428, -11, -322, -11, -568, -547, -365,
+ -366, -366, -366, -366, -557, -366, -386, -595, -389, -391,
+ -392, -555, -607, -291, -430, -248, -607, -607, -291, -607,
+ -607, -514, -514, -514, -514, -353, -607, -358, -607, -606,
+ -607, -607, -361, -607, -369, -607, -371, -607, -375, -607,
+ -378, -380, -388, -607, -290, -586, -429, -595, -582, -583,
+ -586, -290, -399, -401, -607, -515, -518, -520, -523, -607,
+ -356, -343, -318, -329, -366, -366, -366, -366, -390, -416,
+ -514, -354, -607, -367, -370, -373, -376, -516, -366, -368 ]
+
+clist = [
+'220,376,262,26,279,279,279,2,26,338,129,129,331,116,301,657,425,270',
+'274,215,409,410,263,26,601,495,327,264,112,280,280,280,26,26,26,550',
+'26,816,633,530,633,341,342,486,720,345,318,134,134,113,297,124,207,322',
+'266,273,275,132,132,332,223,26,699,702,381,628,26,26,850,487,26,785',
+'636,129,521,16,559,116,672,416,16,665,416,775,117,422,543,546,416,944',
+'970,442,346,878,811,224,392,393,394,395,881,446,431,437,224,224,224',
+'382,16,306,306,384,819,636,388,861,26,362,366,639,964,26,26,26,26,26',
+'26,533,536,206,397,540,6,16,299,580,582,6,224,224,968,947,224,350,360',
+'360,355,633,633,405,482,398,576,578,581,581,492,626,576,591,853,622',
+'334,625,378,335,277,290,291,541,630,353,495,563,377,970,328,796,797',
+'508,636,871,531,330,339,343,820,344,16,279,329,944,390,224,224,224,224',
+'16,16,987,672,964,770,794,878,960,432,821,711,408,408,26,26,26,26,26',
+'26,26,441,764,885,844,26,26,26,1028,954,448,716,830,315,315,566,881',
+'878,567,26,723,703,1020,904,917,279,279,782,6,852,854,967,404,415,279',
+'620,415,396,6,663,672,672,415,833,834,868,542,315,315,315,643,280,500',
+'26,26,1031,793,930,652,280,719,714,26,931,481,489,16,224,413,224,224',
+'413,224,490,767,518,878,413,224,224,26,951,522,789,26,116,270,865,825',
+'26,274,16,515,952,532,380,511,827,297,645,503,383,1,297,547,548,385',
+'386,614,525,387,725,519,1021,26,730,851,717,431,437,876,504,838,873',
+'897,224,224,958,,26,26,,,733,224,733,553,706,116,,908,909,877,,879,',
+',715,,26,627,,16,549,631,,16,39,568,777,306,16,39,264,956,26,933,754',
+'633,,641,,759,,300,,644,306,,,781,740,507,129,,648,16,513,488,602,39',
+'305,305,,660,648,491,,,597,636,224,224,,,608,,,279,505,828,613,,,832',
+'39,,,,,134,224,432,648,590,349,365,365,365,,132,648,724,824,441,,26',
+'224,,,792,,607,1006,621,,,416,612,,,992,790,961,,962,608,416,416,,750',
+'752,416,416,,755,757,431,437,,39,,279,,,522,777,981,,39,39,315,,522',
+',,,,,432,26,,26,624,,,640,,315,432,26,441,,,,,,,224,,279,441,,,26,,',
+',,784,279,,,,900,,,432,,26,,,26,,705,432,1024,,26,441,700,700,,,,441',
+',,26,403,,,26,,279,423,769,,718,,,443,16,,16,39,,,953,,306,432,224,',
+'300,,129,,306,,,26,26,441,602,26,224,768,,1029,39,26,26,923,791,,26',
+'26,,416,,16,839,,16,522,806,13,,602,224,,13,134,,,783,737,415,948,224',
+'6,608,132,16,613,,,415,415,,,,415,415,,835,,,300,13,408,,,300,,,,,,991',
+'39,,413,224,39,,16,,305,39,,,413,413,13,,,413,413,602,,826,,889,354',
+'305,,829,602,,,,,,39,340,340,,,340,315,,,,,902,26,,315,306,,26,26,602',
+',26,,129,,,306,,,745,,26,857,,,13,863,,,,867,281,281,281,13,13,,806',
+'26,,887,,855,,,,340,340,340,340,,,,943,,,,,,,,333,336,855,,1007,26,',
+',,,,,,224,415,,,26,16,224,,,16,891,,,,,,,,,16,,,,,,443,,423,,,,680,',
+',,26,413,26,26,,,26,806,,806,,13,26,411,855,700,411,315,899,,,,411,903',
+',,26,,315,16,420,421,,,,,13,,,444,445,16,648,,26,,,857,,,857,,857,,857',
+',,39,,39,,654,,,,305,985,806,,,,,224,305,16,16,,,16,,696,,847,698,16',
+',,,337,,,,,,,,39,13,16,39,,13,,,872,26,13,806,976,806,,920,26,26,,,16',
+',680,39,926,,,,,,,1002,,279,26,13,,857,,857,26,857,26,857,806,,,751',
+'753,,432,,756,758,,,39,441,,,,26,441,,,281,340,340,,,,602,,281,,,857',
+'971,,680,680,16,,,,,565,,16,16,,,,,,,,,,305,,,569,,,,16,,,,305,,16,',
+'16,,17,,,,957,17,,847,,847,,847,,,,856,,224,,15,315,,,,15,406,419,,',
+'315,,,,17,308,308,,,,,,680,,680,,,,,,,,,15,,,836,,39,17,,,39,,,,,,,352',
+'361,361,39,,840,,,,15,,,,,315,,,,751,753,758,756,847,,847,,847,13,847',
+'13,,497,860,499,,,501,502,,,,,,,864,17,,,39,,,800,802,804,17,17,,,,',
+'39,847,,,15,,13,656,,13,,,,15,15,,,893,894,,,896,,,856,,856,,,13,,,',
+'39,39,,,39,,848,840,906,,39,,,,632,680,,,,,,,,,39,411,922,,874,13,,874',
+',,,411,411,365,,,411,411,39,,,,925,17,,414,,,414,,662,,,,414,,,,593',
+',,,15,,15,,,15,17,,856,,,15,,,,,,,,,,974,,,,15,,,979,980,,,,365,,,,39',
+',,,,,,39,39,989,,,,,,990,,,,,749,,,,,39,,,,,17,39,,39,17,,,874,308,17',
+'848,,848,13,848,,634,13,337,15,637,,,15,340,308,,13,15,,340,,935,937',
+'17,939,941,,942,,849,,,,411,,,,,,,,,15,,,634,,,337,,911,913,915,,,,',
+'880,,882,,13,419,,,38,,,,,38,,,13,,,,,,,,,848,,848,,848,,848,,,,,,,',
+',,38,304,304,,,,,738,13,13,,,13,,,,634,337,13,,,,340,848,,38,,,1015',
+'1016,1017,1018,13,,,348,364,364,364,,,,,,,,,,778,,13,779,,,929,,,,,',
+',,,994,996,998,1000,,1001,,963,788,965,,,,,1037,,,38,,,,,,,,,38,38,',
+'982,,983,,984,812,,,,17,,17,,,,,,308,,13,,,,,,308,13,13,15,,15,,,,,1033',
+'1034,1035,1036,,,,,,13,,,,17,1039,13,17,13,,,,,,,1025,837,1026,,1027',
+',,,15,,,15,17,,,,,,,729,,1030,,,38,,,,,,,15,,,,,,,,1038,,414,,,,17,',
+',,38,,414,414,,,,414,414,,,15,,,,15,,,884,,,15,15,,,,15,15,,,,,,,,,895',
+',,308,,,,,,,,,,,308,,,,337,,,,,,,38,,,,38,,,,304,38,,,,,,,,,,,,,,,,304',
+',,,,,,,,38,,,,,,,,,,,,,,,,,,17,,,,17,,,,,,,,,,17,,,,,15,,,,15,,,,,,',
+',414,,15,,,,,,,,,,,,,,,,,15,,,,,,,,,17,,,,,,,,,,,,17,,,,,,,15,,,,,,',
+',,,,,15,,,,,,,,,,,,,,17,17,,,17,,,,,,17,,,,,,,,,15,15,,,15,17,,,,,15',
+',,,,,,,361,,,,,17,15,,,928,,,,,,,,38,,38,,,,,15,304,,,,,,,,304,,,,,',
+',,,,,,,,,,,,,,,,,38,,,38,,,361,,,,17,,,,,,,17,17,,,,,38,,,,,,15,,,,',
+',17,15,15,,,,17,,17,,,,,,,,,,,15,,38,,,,15,,15,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,304,,,,,,,,,,231,304,,,,,,,,278,278,278,,,,,,,,,,,324',
+'325,326,,,,,,,,,,,,,,,278,278,,,,,,,,,,,,,,,,,,,,,,,,38,,,,38,,,,,,',
+',,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,38,,,,,,,,,,,,38,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,38,38,,,38,,,,,,38,,,,,,,,,,,278,418',
+',38,424,278,,,,,424,,,,,,364,,,,,38,,231,,924,455,456,457,458,459,460',
+'461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477',
+'478,479,480,,,,,,,278,278,,,,,,,,278,,,,,,,278,,278,,364,278,278,,38',
+',,,,,,38,38,,,,,,,,,,,,,,,,,38,,,,,,38,,38,,,527,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,424,424,424,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,278,,278,,278,,,,,,,,,,,,,,,,278,,,,,,,,,424',
+'655,,,,,,,,,,278,,,278,,,,,,,,,,,,,,278,278,,,,,,,,,,278,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,278,424,278,,,,746,,,278,278,424,424,,,,424,424',
+',,,,,,,,,,,,,,,,,,,,,,,278,,,278,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,',
+',,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,278,,,,,,,,424,,,,,,,,,,,,,424,424,424,424,,843,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,278',
+'424,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+'278' ]
+ racc_goto_table = arr = ::Array.new(3011, 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,58,144,43,35,35,35,2,43,89,59,59,70,99,51,10,29,74,74,31,22,22,38',
+'43,30,76,33,31,4,71,71,71,43,43,43,95,43,93,77,8,77,17,17,41,101,17',
+'52,63,63,6,47,15,15,66,40,40,40,62,62,71,20,43,94,94,161,42,43,43,131',
+'29,43,11,188,59,53,28,56,99,173,18,28,143,18,133,5,26,92,92,18,119,138',
+'26,4,179,121,28,17,17,17,17,184,49,39,39,28,28,28,162,28,28,28,164,11',
+'188,162,12,43,57,57,14,185,43,43,43,43,43,43,72,72,16,2,72,7,28,48,165',
+'165,7,28,28,137,122,28,28,28,28,19,77,77,23,39,25,166,166,166,166,49',
+'44,166,64,135,147,69,75,87,88,46,46,46,91,147,96,76,98,102,138,103,126',
+'126,49,188,135,104,105,106,107,108,109,28,35,7,119,5,28,28,28,28,28',
+'28,122,173,185,42,143,179,131,74,110,111,71,71,43,43,43,43,43,43,43',
+'59,30,121,133,43,43,43,137,112,31,113,114,67,67,115,184,179,116,43,117',
+'95,122,118,135,35,35,30,7,123,129,136,20,20,35,29,20,7,7,139,173,173',
+'20,143,143,140,141,67,67,67,53,71,161,43,43,122,142,145,53,71,8,56,43',
+'146,148,150,28,28,28,28,28,28,28,151,154,33,179,28,28,28,43,155,51,156',
+'43,99,74,157,30,43,74,28,31,11,33,160,52,30,47,29,4,163,1,47,17,17,167',
+'168,49,31,169,170,66,93,43,171,132,172,39,39,177,6,30,181,94,28,28,182',
+',43,43,,,166,28,166,31,29,99,,126,126,132,,132,,,29,,43,49,,28,4,49',
+',28,55,38,76,28,28,55,31,101,43,126,41,77,,49,,41,,9,,49,28,,,53,29',
+'48,59,,39,28,48,46,33,55,55,55,,49,39,46,,,31,188,28,28,,,74,,,35,7',
+'8,74,,,8,55,,,,,63,28,74,39,15,55,55,55,55,,62,39,49,92,59,,43,28,,',
+'72,,40,10,33,,,18,40,,,126,22,132,,132,74,18,18,,26,26,18,18,,26,26',
+'39,39,,55,,35,,,51,76,132,,55,55,67,,51,,,,,,74,43,,43,40,,,2,,67,74',
+'43,59,,,,,,,28,,35,59,,,43,,,,,49,35,,,,8,,,74,,43,,,43,,71,74,132,',
+'43,59,99,99,,,,59,,,43,9,,,43,,35,65,89,,99,,,65,28,,28,55,,,95,,28',
+'74,28,,9,,59,,28,,,43,43,59,33,43,28,144,,30,55,43,43,92,70,,43,43,',
+'18,,28,26,,28,51,120,21,,33,28,,21,63,,,51,15,20,92,28,7,74,62,28,74',
+',,20,20,,,,20,20,,58,,,9,21,71,,,9,,,,,,8,55,,28,28,55,,28,,55,55,,',
+'28,28,21,,,28,28,33,,17,,49,21,55,,17,33,,,,,,55,24,24,,,24,67,,,,,49',
+'43,,67,28,,43,43,33,,43,,59,,,28,,,7,,43,180,,,21,70,,,,70,73,73,73',
+'21,21,,120,43,,120,,33,,,,24,24,24,24,,,,49,,,,,,,,73,73,33,,29,43,',
+',,,,,,28,20,,,43,28,28,,,28,17,,,,,,,,,28,,,,,,65,,65,,,,178,,,,43,28',
+'43,43,,,43,120,,120,,21,43,21,33,99,21,67,99,,,,21,99,,,43,,67,28,24',
+'24,,,,,21,,,24,24,28,39,,43,,,180,,,180,,180,,180,,,55,,55,,65,,,,55',
+'120,120,,,,,28,55,28,28,,,28,,9,,125,9,28,,,,68,,,,,,,,55,21,28,55,',
+'21,,,125,43,21,120,31,120,,28,43,43,,,28,,178,55,28,,,,,,,33,,35,43',
+'21,,180,,180,43,180,43,180,120,,,65,65,,74,,65,65,,,55,59,,,,43,59,',
+',73,24,24,,,,33,,73,,,180,28,,178,178,28,,,,,24,,28,28,,,,,,,,,,55,',
+',24,,,,28,,,,55,,28,,28,,32,,,,125,32,,125,,125,,125,,,,178,,28,,27',
+'67,,,,27,68,68,,,67,,,,32,32,32,,,,,,178,,178,,,,,,,,,27,,,9,,55,32',
+',,55,,,,,,,32,32,32,55,,65,,,,27,,,,,67,,,,65,65,65,65,125,,125,,125',
+'21,125,21,,68,9,68,,,68,68,,,,,,,9,32,,,55,,,176,176,176,32,32,,,,,55',
+'125,,,27,,21,24,,21,,,,27,27,,,9,9,,,9,,,178,,178,,,21,,,,55,55,,,55',
+',127,65,9,,55,,,,73,178,,,,,,,,,55,21,9,,127,21,,127,,,,21,21,55,,,21',
+'21,55,,,,55,32,,32,,,32,,73,,,,32,,,,68,,,,27,,27,,,27,32,,178,,,27',
+',,,,,,,,,9,,,,27,,,9,9,,,,55,,,,55,,,,,,,55,55,9,,,,,,9,,,,,73,,,,,55',
+',,,,32,55,,55,32,,,127,32,32,127,,127,21,127,,68,21,68,27,68,,,27,24',
+'32,,21,27,,24,,176,176,32,176,176,,176,,130,,,,21,,,,,,,,,27,,,68,,',
+'68,,128,128,128,,,,,130,,130,,21,68,,,54,,,,,54,,,21,,,,,,,,,127,,127',
+',127,,127,,,,,,,,,,54,54,54,,,,,68,21,21,,,21,,,,68,68,21,,,,24,127',
+',54,,,176,176,176,176,21,,,54,54,54,54,,,,,,,,,,68,,21,68,,,21,,,,,',
+',,,128,128,128,128,,128,,130,68,130,,,,,176,,,54,,,,,,,,,54,54,,130',
+',130,,130,68,,,,32,,32,,,,,,32,,21,,,,,,32,21,21,27,,27,,,,,128,128',
+'128,128,,,,,,21,,,,32,128,21,32,21,,,,,,,130,68,130,,130,,,,27,,,27',
+'32,,,,,,,32,,130,,,54,,,,,,,27,,,,,,,,130,,32,,,,32,,,,54,,32,32,,,',
+'32,32,,,27,,,,27,,,68,,,27,27,,,,27,27,,,,,,,,,68,,,32,,,,,,,,,,,32',
+',,,68,,,,,,,54,,,,54,,,,54,54,,,,,,,,,,,,,,,,54,,,,,,,,,54,,,,,,,,,',
+',,,,,,,,32,,,,32,,,,,,,,,,32,,,,,27,,,,27,,,,,,,,32,,27,,,,,,,,,,,,',
+',,,,27,,,,,,,,,32,,,,,,,,,,,,32,,,,,,,27,,,,,,,,,,,,27,,,,,,,,,,,,,',
+'32,32,,,32,,,,,,32,,,,,,,,,27,27,,,27,32,,,,,27,,,,,,,,32,,,,,32,27',
+',,32,,,,,,,,54,,54,,,,,27,54,,,,,,,,54,,,,,,,,,,,,,,,,,,,,,,,54,,,54',
+',,32,,,,32,,,,,,,32,32,,,,,54,,,,,,27,,,,,,32,27,27,,,,32,,32,,,,,,',
+',,,,27,,54,,,,27,,27,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,54,,,,,,,,',
+',34,54,,,,,,,,34,34,34,,,,,,,,,,,34,34,34,,,,,,,,,,,,,,,34,34,,,,,,',
+',,,,,,,,,,,,,,,,,54,,,,54,,,,,,,,,,54,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,54,,,,,,,,,,,,54,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,54,54',
+',,54,,,,,,54,,,,,,,,,,,34,34,,54,34,34,,,,,34,,,,,,54,,,,,54,,34,,54',
+'34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34',
+'34,34,34,,,,,,,34,34,,,,,,,,34,,,,,,,34,,34,,54,34,34,,54,,,,,,,54,54',
+',,,,,,,,,,,,,,,,54,,,,,,54,,54,,,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,34,,34,34,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,34,,34,,34,,,,,,,,,,,,,,,,34,,,,,,,,,34,34,,,,,,,,,,34,,,34',
+',,,,,,,,,,,,,34,34,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,34',
+'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(3011, 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, 319, 7, nil, 25, 79, 46, 132, -289, 358,
+ -514, -586, -670, nil, -385, 43, 120, -22, -131, 78,
+ 40, 624, -189, -60, 640, 27, -128, 1052, 75, -198,
+ -401, 3, 1033, -19, 2035, -25, nil, nil, -2, -113,
+ 28, -223, -424, 3, -328, nil, 137, 17, 101, -120,
+ nil, -20, 11, -245, 1403, 374, -282, 48, -70, 2,
+ nil, nil, 49, 39, -243, 359, 12, 196, 849, 103,
+ -47, 0, -205, 714, -9, -319, -256, -456, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 93, 105, -52,
+ nil, -170, -255, -659, -485, -311, 103, nil, -189, 10,
+ nil, -523, 103, 119, -147, 125, 122, 120, -513, 121,
+ -495, -348, -671, -335, -489, -134, -141, -331, -595, -797,
+ -58, -587, -747, -527, nil, 130, -489, 427, 539, -526,
+ 594, -705, -440, -546, nil, -613, -670, -778, -828, -286,
+ -531, -76, -390, -461, -20, -595, -590, -320, 20, nil,
+ 11, 18, nil, nil, -332, -598, -358, -485, nil, nil,
+ 233, -17, 23, 233, 25, -249, -230, 236, 236, 238,
+ -245, -242, -230, -464, nil, nil, 483, -462, 275, -706,
+ -39, -455, -563, nil, -701, -792, nil, nil, -424 ]
+
+racc_goto_default = [
+ nil, nil, nil, 3, nil, 4, 347, 295, nil, 529,
+ nil, 817, nil, 292, 293, nil, nil, nil, 11, 12,
+ 18, 229, nil, nil, 14, nil, 412, 230, 323, nil,
+ nil, 561, 228, 447, 21, 22, 23, 24, nil, 651,
+ nil, nil, nil, 312, nil, 25, 426, 32, nil, nil,
+ 34, 37, 36, nil, 225, 226, 359, nil, 131, 434,
+ 130, 133, 77, 78, nil, 417, 92, 46, 284, nil,
+ 786, 427, nil, 428, 439, 609, 493, 282, 268, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, nil, 269,
+ 61, nil, nil, nil, nil, nil, nil, 69, nil, 544,
+ 70, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 808,
+ 679, nil, 809, 959, 846, 667, nil, 668, nil, nil,
+ 669, nil, 671, nil, 772, nil, nil, nil, 677, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 438,
+ nil, nil, 629, 623, nil, nil, nil, nil, 76, 79,
+ 80, nil, nil, nil, nil, nil, 571, nil, nil, nil,
+ nil, nil, nil, 875, 722, 666, nil, 670, 883, 682,
+ 684, 685, 858, 688, 689, 859, 692, 695, 287 ]
+
+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, 248, :_reduce_283,
+ 4, 212, :_reduce_284,
+ 0, 249, :_reduce_285,
+ 4, 212, :_reduce_286,
+ 0, 250, :_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,
+ 0, 251, :_reduce_304,
+ 3, 212, :_reduce_305,
+ 6, 212, :_reduce_306,
+ 6, 212, :_reduce_307,
+ 0, 252, :_reduce_308,
+ 0, 253, :_reduce_309,
+ 7, 212, :_reduce_310,
+ 0, 254, :_reduce_311,
+ 0, 255, :_reduce_312,
+ 7, 212, :_reduce_313,
+ 5, 212, :_reduce_314,
+ 4, 212, :_reduce_315,
+ 0, 256, :_reduce_316,
+ 0, 257, :_reduce_317,
+ 9, 212, :_reduce_318,
+ 0, 258, :_reduce_319,
+ 6, 212, :_reduce_320,
+ 0, 259, :_reduce_321,
+ 7, 212, :_reduce_322,
+ 0, 260, :_reduce_323,
+ 5, 212, :_reduce_324,
+ 0, 261, :_reduce_325,
+ 6, 212, :_reduce_326,
+ 0, 262, :_reduce_327,
+ 0, 263, :_reduce_328,
+ 9, 212, :_reduce_329,
+ 1, 212, :_reduce_330,
+ 1, 212, :_reduce_331,
+ 1, 212, :_reduce_332,
+ 1, 212, :_reduce_333,
+ 1, 173, :_reduce_none,
+ 1, 242, :_reduce_335,
+ 1, 245, :_reduce_336,
+ 1, 237, :_reduce_none,
+ 1, 237, :_reduce_none,
+ 2, 237, :_reduce_339,
+ 1, 239, :_reduce_none,
+ 1, 239, :_reduce_none,
+ 1, 238, :_reduce_none,
+ 5, 238, :_reduce_343,
+ 1, 156, :_reduce_none,
+ 2, 156, :_reduce_345,
+ 1, 241, :_reduce_none,
+ 1, 241, :_reduce_none,
+ 1, 264, :_reduce_348,
+ 3, 264, :_reduce_349,
+ 1, 267, :_reduce_350,
+ 3, 267, :_reduce_351,
+ 1, 266, :_reduce_none,
+ 4, 266, :_reduce_353,
+ 6, 266, :_reduce_354,
+ 3, 266, :_reduce_355,
+ 5, 266, :_reduce_356,
+ 2, 266, :_reduce_357,
+ 4, 266, :_reduce_358,
+ 1, 266, :_reduce_359,
+ 3, 266, :_reduce_360,
+ 4, 268, :_reduce_361,
+ 2, 268, :_reduce_362,
+ 2, 268, :_reduce_363,
+ 1, 268, :_reduce_364,
+ 2, 273, :_reduce_365,
+ 0, 273, :_reduce_366,
+ 6, 274, :_reduce_367,
+ 8, 274, :_reduce_368,
+ 4, 274, :_reduce_369,
+ 6, 274, :_reduce_370,
+ 4, 274, :_reduce_371,
+ 2, 274, :_reduce_none,
+ 6, 274, :_reduce_373,
+ 2, 274, :_reduce_374,
+ 4, 274, :_reduce_375,
+ 6, 274, :_reduce_376,
+ 2, 274, :_reduce_377,
+ 4, 274, :_reduce_378,
+ 2, 274, :_reduce_379,
+ 4, 274, :_reduce_380,
+ 1, 274, :_reduce_none,
+ 0, 278, :_reduce_382,
+ 1, 278, :_reduce_383,
+ 3, 279, :_reduce_384,
+ 1, 279, :_reduce_385,
+ 4, 279, :_reduce_386,
+ 1, 280, :_reduce_387,
+ 4, 280, :_reduce_388,
+ 1, 281, :_reduce_389,
+ 3, 281, :_reduce_390,
+ 1, 282, :_reduce_391,
+ 1, 282, :_reduce_none,
+ 0, 286, :_reduce_393,
+ 0, 287, :_reduce_394,
+ 4, 236, :_reduce_395,
+ 4, 284, :_reduce_396,
+ 1, 284, :_reduce_397,
+ 0, 290, :_reduce_398,
+ 4, 285, :_reduce_399,
+ 0, 291, :_reduce_400,
+ 4, 285, :_reduce_401,
+ 0, 293, :_reduce_402,
+ 4, 289, :_reduce_403,
+ 2, 182, :_reduce_404,
+ 4, 182, :_reduce_405,
+ 5, 182, :_reduce_406,
+ 5, 182, :_reduce_407,
+ 2, 235, :_reduce_408,
+ 4, 235, :_reduce_409,
+ 4, 235, :_reduce_410,
+ 3, 235, :_reduce_411,
+ 3, 235, :_reduce_412,
+ 3, 235, :_reduce_413,
+ 2, 235, :_reduce_414,
+ 1, 235, :_reduce_415,
+ 4, 235, :_reduce_416,
+ 0, 295, :_reduce_417,
+ 4, 234, :_reduce_418,
+ 0, 296, :_reduce_419,
+ 4, 234, :_reduce_420,
+ 0, 297, :_reduce_421,
+ 3, 187, :_reduce_422,
+ 0, 298, :_reduce_423,
+ 0, 299, :_reduce_424,
+ 4, 292, :_reduce_425,
+ 5, 240, :_reduce_426,
+ 1, 300, :_reduce_427,
+ 1, 300, :_reduce_none,
+ 6, 155, :_reduce_429,
+ 0, 155, :_reduce_430,
+ 1, 301, :_reduce_431,
+ 1, 301, :_reduce_none,
+ 1, 301, :_reduce_none,
+ 2, 302, :_reduce_434,
+ 1, 302, :_reduce_none,
+ 2, 157, :_reduce_436,
+ 1, 157, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 225, :_reduce_441,
+ 1, 304, :_reduce_442,
+ 2, 304, :_reduce_443,
+ 3, 305, :_reduce_444,
+ 1, 305, :_reduce_445,
+ 1, 305, :_reduce_446,
+ 3, 226, :_reduce_447,
+ 4, 227, :_reduce_448,
+ 3, 228, :_reduce_449,
+ 0, 309, :_reduce_450,
+ 3, 309, :_reduce_451,
+ 1, 310, :_reduce_452,
+ 2, 310, :_reduce_453,
+ 3, 230, :_reduce_454,
+ 0, 312, :_reduce_455,
+ 3, 312, :_reduce_456,
+ 3, 229, :_reduce_457,
+ 3, 231, :_reduce_458,
+ 0, 313, :_reduce_459,
+ 3, 313, :_reduce_460,
+ 0, 314, :_reduce_461,
+ 3, 314, :_reduce_462,
+ 0, 306, :_reduce_463,
+ 2, 306, :_reduce_464,
+ 0, 307, :_reduce_465,
+ 2, 307, :_reduce_466,
+ 0, 308, :_reduce_467,
+ 2, 308, :_reduce_468,
+ 1, 311, :_reduce_469,
+ 2, 311, :_reduce_470,
+ 0, 316, :_reduce_471,
+ 4, 311, :_reduce_472,
+ 1, 315, :_reduce_473,
+ 1, 315, :_reduce_474,
+ 1, 315, :_reduce_475,
+ 1, 315, :_reduce_none,
+ 1, 207, :_reduce_477,
+ 3, 208, :_reduce_478,
+ 1, 303, :_reduce_479,
+ 2, 303, :_reduce_480,
+ 1, 211, :_reduce_481,
+ 1, 211, :_reduce_482,
+ 1, 211, :_reduce_483,
+ 1, 211, :_reduce_484,
+ 1, 199, :_reduce_485,
+ 1, 199, :_reduce_486,
+ 1, 199, :_reduce_487,
+ 1, 199, :_reduce_488,
+ 1, 199, :_reduce_489,
+ 1, 200, :_reduce_490,
+ 1, 200, :_reduce_491,
+ 1, 200, :_reduce_492,
+ 1, 200, :_reduce_493,
+ 1, 200, :_reduce_494,
+ 1, 200, :_reduce_495,
+ 1, 200, :_reduce_496,
+ 1, 232, :_reduce_497,
+ 1, 232, :_reduce_498,
+ 1, 172, :_reduce_499,
+ 1, 172, :_reduce_500,
+ 1, 177, :_reduce_501,
+ 1, 177, :_reduce_502,
+ 0, 317, :_reduce_503,
+ 4, 243, :_reduce_504,
+ 0, 243, :_reduce_505,
+ 3, 246, :_reduce_506,
+ 0, 319, :_reduce_507,
+ 3, 246, :_reduce_508,
+ 4, 318, :_reduce_509,
+ 2, 318, :_reduce_510,
+ 2, 318, :_reduce_511,
+ 1, 318, :_reduce_512,
+ 2, 321, :_reduce_513,
+ 0, 321, :_reduce_514,
+ 6, 288, :_reduce_515,
+ 8, 288, :_reduce_516,
+ 4, 288, :_reduce_517,
+ 6, 288, :_reduce_518,
+ 4, 288, :_reduce_519,
+ 6, 288, :_reduce_520,
+ 2, 288, :_reduce_521,
+ 4, 288, :_reduce_522,
+ 6, 288, :_reduce_523,
+ 2, 288, :_reduce_524,
+ 4, 288, :_reduce_525,
+ 2, 288, :_reduce_526,
+ 4, 288, :_reduce_527,
+ 1, 288, :_reduce_528,
+ 0, 288, :_reduce_529,
+ 1, 283, :_reduce_530,
+ 1, 283, :_reduce_531,
+ 1, 283, :_reduce_532,
+ 1, 283, :_reduce_533,
+ 1, 265, :_reduce_none,
+ 1, 265, :_reduce_535,
+ 1, 323, :_reduce_536,
+ 1, 324, :_reduce_537,
+ 3, 324, :_reduce_538,
+ 1, 275, :_reduce_539,
+ 3, 275, :_reduce_540,
+ 1, 325, :_reduce_541,
+ 2, 326, :_reduce_542,
+ 1, 326, :_reduce_543,
+ 2, 327, :_reduce_544,
+ 1, 327, :_reduce_545,
+ 1, 269, :_reduce_546,
+ 3, 269, :_reduce_547,
+ 1, 320, :_reduce_548,
+ 3, 320, :_reduce_549,
+ 1, 328, :_reduce_none,
+ 1, 328, :_reduce_none,
+ 2, 270, :_reduce_552,
+ 1, 270, :_reduce_553,
+ 3, 329, :_reduce_554,
+ 3, 330, :_reduce_555,
+ 1, 276, :_reduce_556,
+ 3, 276, :_reduce_557,
+ 1, 322, :_reduce_558,
+ 3, 322, :_reduce_559,
+ 1, 331, :_reduce_none,
+ 1, 331, :_reduce_none,
+ 2, 277, :_reduce_562,
+ 1, 277, :_reduce_563,
+ 1, 332, :_reduce_none,
+ 1, 332, :_reduce_none,
+ 2, 272, :_reduce_566,
+ 2, 271, :_reduce_567,
+ 0, 271, :_reduce_568,
+ 1, 247, :_reduce_none,
+ 3, 247, :_reduce_570,
+ 0, 233, :_reduce_571,
+ 2, 233, :_reduce_none,
+ 1, 218, :_reduce_573,
+ 3, 218, :_reduce_574,
+ 3, 333, :_reduce_575,
+ 2, 333, :_reduce_576,
+ 4, 333, :_reduce_577,
+ 2, 333, :_reduce_578,
+ 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, 294, :_reduce_none,
+ 1, 294, :_reduce_none,
+ 1, 294, :_reduce_none,
+ 1, 183, :_reduce_none,
+ 1, 183, :_reduce_none,
+ 1, 176, :_reduce_591,
+ 1, 176, :_reduce_592,
+ 0, 149, :_reduce_none,
+ 1, 149, :_reduce_none,
+ 0, 178, :_reduce_none,
+ 1, 178, :_reduce_none,
+ 2, 194, :_reduce_597,
+ 2, 175, :_reduce_598,
+ 0, 217, :_reduce_none,
+ 1, 217, :_reduce_none,
+ 1, 217, :_reduce_none,
+ 1, 244, :_reduce_602,
+ 1, 244, :_reduce_none,
+ 1, 151, :_reduce_none,
+ 2, 151, :_reduce_none,
+ 0, 215, :_reduce_606 ]
+
+racc_reduce_n = 607
+
+racc_shift_n = 1040
+
+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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "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",
+ "opt_block_param",
+ "block_param_def",
+ "opt_bv_decl",
+ "bv_decls",
+ "bvar",
+ "f_bad_arg",
+ "f_larglist",
+ "lambda_body",
+ "@21",
+ "@22",
+ "f_args",
+ "do_block",
+ "@23",
+ "@24",
+ "do_body",
+ "@25",
+ "operation3",
+ "@26",
+ "@27",
+ "@28",
+ "@29",
+ "@30",
+ "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",
+ "@31",
+ "@32",
+ "args_tail",
+ "@33",
+ "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)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_57(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ 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_internal(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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_305(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_306(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_307(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_308(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_309(val, _values, result)
+ @lexer.cond.pop
+
+ result
+end
+
+def _reduce_310(val, _values, result)
+ result = @builder.loop(:while, val[0], val[2], val[3],
+ val[5], val[6])
+
+ 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.loop(:until, val[0], val[2], val[3],
+ val[5], val[6])
+
+ result
+end
+
+def _reduce_314(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_315(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_316(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_317(val, _values, result)
+ @lexer.cond.pop
+
+ result
+end
+
+def _reduce_318(val, _values, result)
+ result = @builder.for(val[0], val[1],
+ val[2], val[4],
+ val[5], val[7], val[8])
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_328(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_329(val, _values, result)
+ result = @builder.def_singleton(val[0], val[1], val[2],
+ val[4], val[6], val[7], val[8])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ result
+end
+
+def _reduce_330(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_331(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_332(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_333(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 334 omitted
+
+def _reduce_335(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_336(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ 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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_401(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_402(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_403(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ 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)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_418(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_419(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ 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 = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ @context.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 Ruby24
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby25.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby25.rb
new file mode 100644
index 000000000..e13e5b7c8
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby25.rb
@@ -0,0 +1,6694 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-587,610,549,214,215,-109,-107,-587,-587,-587,224,549,-587,-587,-587',
+'779,-587,276,549,872,245,-88,549,590,779,-587,-587,-587,-587,-102,562',
+'-74,985,592,563,-110,-587,-587,-104,-587,-587,-587,-587,-587,-105,-103',
+'-107,-109,-110,1027,778,225,242,995,214,215,244,243,-105,778,214,215',
+'995,-104,-103,-105,-587,-587,-587,-587,-587,-587,-587,-587,-587,-587',
+'-587,-587,-587,-587,117,-108,-587,-587,-587,116,767,-587,549,589,-587',
+'-102,-106,-587,-587,995,-587,225,-587,591,-587,113,-587,-587,275,-587',
+'-587,-587,-587,-587,-296,-587,-587,-587,-100,-98,705,-296,-296,-296',
+'117,-106,940,-296,-296,116,-296,-587,871,117,-587,-587,-587,-587,116',
+'-587,117,-587,-93,825,117,116,-587,-106,-101,116,-296,-296,225,-296',
+'-296,-296,-296,-296,225,276,-104,-583,-584,-108,-96,-104,-105,-103,-107',
+'-109,-110,-105,-103,-107,-109,-110,-95,-94,-96,985,-296,-296,-296,-296',
+'-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,276,222,-296,-296',
+'-296,220,615,608,-583,-108,-296,-97,269,-296,-108,995,117,-95,-296,-102',
+'-296,116,-296,-296,-102,-296,-296,-296,-296,-296,117,-296,-587,-296',
+'-584,116,-96,458,752,-587,-587,-587,95,96,609,-587,-587,-296,-587,-106',
+'-296,-296,275,-296,-106,-296,-500,-587,-110,214,215,117,-296,-108,271',
+'-581,116,276,-587,-587,221,-587,-587,-587,-587,-587,-96,220,-99,-96',
+'791,117,556,-95,969,577,116,275,225,-96,-97,95,96,567,-110,-104,214',
+'215,-587,-587,-587,-587,-587,-587,-587,-587,-587,-587,-587,-587,-587',
+'-587,604,-102,-587,-587,-587,-489,616,-501,97,98,-587,-95,-489,-587',
+'-95,-587,577,-581,-587,271,-587,-489,-587,-587,-95,-587,-587,-587,-587',
+'-587,221,-587,-587,-587,-98,822,791,579,578,575,-581,117,275,-583,-97',
+'271,116,-587,577,600,-587,-587,-587,-97,643,-587,599,97,98,-587,-587',
+'-587,-587,-106,-103,-587,-587,-587,-587,682,-489,679,678,677,-587,680',
+'844,-587,620,-583,579,578,577,-587,-97,822,791,-97,-587,-587,737,-587',
+'-587,-587,-587,-587,117,-97,117,-269,-98,116,-587,116,682,597,679,678',
+'677,220,680,594,579,578,575,611,269,245,-587,-587,-587,-587,-587,-587',
+'-587,-587,-587,-587,-587,-587,-587,-587,-587,-104,-587,-587,-587,245',
+'616,245,-98,245,-587,-98,577,-587,579,578,577,526,-587,983,-587,-98',
+'-587,-587,739,-587,-587,-587,-587,-587,-296,-587,-587,-587,765,225,752',
+'-296,-296,-296,-107,225,221,-296,-296,539,-296,-587,541,225,-587,-587',
+'999,-587,890,-587,539,539,-580,541,538,766,-587,-106,-100,225,-296,-296',
+'222,-296,-296,-296,-296,-296,-109,-88,579,578,593,220,579,578,584,-95',
+'539,-493,565,541,646,526,225,-105,-493,-104,532,567,-296,-296,-296,-296',
+'-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-486,657,-296,-296',
+'-296,-101,615,-486,-107,662,-296,577,-580,-296,577,-110,-486,577,-296',
+'663,-296,225,-296,-296,665,-296,-296,-296,-296,-296,-486,-296,701,-296',
+'221,-580,-109,-486,-486,-486,-493,706,-486,-486,-486,-297,-486,-296',
+'262,263,-296,-296,-297,-99,-486,-296,-486,-486,-486,214,215,-297,-296',
+'-108,707,-486,-486,-486,556,-486,-486,-486,-486,-486,709,579,578,588',
+'579,578,580,579,578,582,261,260,405,-492,-491,698,697,407,406,569,-492',
+'-491,-486,-486,-486,-486,-486,-486,-486,-486,-486,-486,-486,-486,-486',
+'-486,-297,220,-486,-486,-486,220,-486,-486,559,561,-486,560,455,-486',
+'-486,726,-486,557,-486,736,-486,456,-486,-486,740,-486,-486,-486,-486',
+'-486,-494,-486,-489,-486,741,397,-270,-494,556,-489,-489,-489,-492,-491',
+'-489,-489,-489,-486,-489,501,-486,-486,-486,-486,753,-486,-489,-486',
+'-489,-489,-489,543,-486,-486,83,542,221,488,-489,-489,221,-489,-489',
+'-489,-489,-489,84,-334,225,488,245,220,-497,-495,-334,-496,85,225,529',
+'-497,-495,770,-496,-334,771,-494,265,456,-489,-489,-489,-489,-489,-489',
+'-489,-489,-489,-489,-489,-489,-489,-489,776,-297,-489,-489,-489,220',
+'-489,-489,-297,781,-489,499,969,-489,-489,501,-489,-297,-489,527,-489',
+'567,-489,-489,523,-489,-489,-489,-489,-489,-334,-489,-296,-489,221,-497',
+'-495,657,-496,-296,-296,-296,225,271,-296,-296,-296,-489,-296,271,-489',
+'-489,-489,-489,271,-489,657,-489,-296,-296,-296,225,-489,-489,245,280',
+'-297,791,-296,-296,221,-296,-296,-296,-296,-296,611,220,799,220,802',
+'-287,-489,-486,974,803,219,805,-287,-489,-486,807,809,972,520,217,817',
+'-287,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296',
+'-296,818,819,-296,-296,-296,791,768,-296,220,824,-296,-98,610,-296,-296',
+'603,-296,225,-296,513,-296,-107,-296,-296,601,-296,-296,-296,-296,-296',
+'221,-296,221,-296,-287,-489,-486,512,682,225,679,678,677,-73,680,-501',
+'225,-296,126,-500,-296,-296,-296,-296,833,-296,501,-296,-588,-96,499',
+'-271,-296,-108,497,-588,-588,-588,687,-105,-588,-588,-588,221,-588,811',
+'225,488,690,843,224,245,460,-588,-588,-588,-588,966,459,679,678,677',
+'-94,680,-588,-588,-93,-588,-588,-588,-588,-588,-103,-296,457,847,-102',
+'220,657,864,-296,698,697,242,519,-584,691,244,243,-296,240,241,-269',
+'517,-588,-588,-588,-588,-588,-588,-588,-588,-588,-588,-588,-588,-588',
+'-588,868,-499,-588,-588,-588,225,888,-588,-499,225,-588,892,408,-588',
+'-588,894,-588,-499,-588,395,-588,897,-588,-588,898,-588,-588,-588,-588',
+'-588,-296,-588,-588,-588,221,901,225,905,-498,-272,682,225,679,678,677',
+'-498,680,-588,907,802,-588,-588,-588,-588,-498,-588,-589,-588,910,912',
+'914,687,-588,-589,-589,-589,-499,916,-589,-589,-589,690,-589,225,918',
+'245,919,811,325,932,802,-589,-589,-589,-589,966,814,679,678,677,934',
+'680,-589,-589,936,-589,-589,-589,-589,-589,938,-296,940,-498,698,697',
+'940,242,-296,691,225,244,243,-584,240,241,946,-296,324,952,726,963,-589',
+'-589,-589,-589,-589,-589,-589,-589,-589,-589,-589,-589,-589,-589,970',
+'265,-589,-589,-589,975,985,-589,216,802,-589,989,245,-589,-589,991,-589',
+'993,-589,995,-589,995,-589,-589,662,-589,-589,-589,-589,-589,-296,-589',
+'-589,-589,682,213,679,678,677,682,680,679,678,677,242,680,212,-589,244',
+'243,-589,-589,-589,-589,1008,-589,-288,-589,1009,1010,940,940,-589,-288',
+'-288,-288,940,1015,-288,-288,-288,811,-288,245,985,1018,811,-584,-583',
+'225,814,211,-288,-288,-288,945,126,,,255,256,,-288,-288,,-288,-288,-288',
+'-288,-288,682,,679,678,677,242,680,248,,244,243,,240,241,,,246,,247',
+',,,-288,-288,-288,-288,-288,-288,-288,-288,-288,-288,-288,-288,-288',
+'-288,,811,-288,-288,-288,,,-288,,,-288,,,-288,-288,,-288,,-288,,-288',
+',-288,-288,,-288,-288,-288,-288,-288,,-288,,-288,731,732,,,733,111,112',
+',682,,679,678,677,-288,680,,-288,-288,-288,-288,,-288,-252,-288,,,,',
+'-288,-252,-252,-252,,,-252,-252,-252,682,-252,679,678,677,687,680,,811',
+',-252,-252,,,,690,,,245,,,-252,-252,,-252,-252,-252,-252,-252,120,121',
+'122,123,124,255,256,,685,120,121,122,123,124,,,,695,694,698,697,242',
+',248,691,244,243,,240,241,,,246,-252,247,-416,,,,,-252,,-416,-416,-416',
+'271,-252,-416,-416,-416,225,-416,682,,679,678,677,,680,,-416,-416,-416',
+'120,121,122,123,124,-252,-252,,-416,-416,,-416,-416,-416,-416,-416,',
+',,,-252,,,-252,,,811,682,-252,679,678,677,,680,,-252,,,-416,-416,-416',
+'-416,-416,-416,-416,-416,-416,-416,-416,-416,-416,-416,,,-416,-416,-416',
+',,-416,,271,-416,,811,-416,-416,,-416,,-416,,-416,,-416,-416,,-416,-416',
+'-416,-416,-416,-303,-416,-416,-416,,,,-303,-303,-303,,,-303,-303,-303',
+',-303,-416,245,,-416,-416,,-416,,-416,-303,-303,,,,,-416,,255,256,-303',
+'-303,,-303,-303,-303,-303,-303,120,121,122,123,124,,242,,248,,244,243',
+',240,241,,,,,,,,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303',
+'-303,-303,-303,,,-303,-303,-303,,,-303,,280,-303,,,-303,-303,,-303,',
+'-303,,-303,,-303,-303,,-303,-303,-303,-303,-303,,-303,-252,-303,,,,',
+',-252,-252,-252,,,-252,-252,-252,-303,-252,245,-303,-303,,-303,,-303',
+',-252,-252,-252,,,-303,,,255,256,,-252,-252,,-252,-252,-252,-252,-252',
+',,,,,242,,,,244,243,,240,241,,,,,,,,,-252,-252,-252,-252,-252,-252,-252',
+'-252,-252,-252,-252,-252,-252,-252,,,-252,-252,-252,,,-252,,271,-252',
+',,-252,-252,,-252,,-252,,-252,,-252,-252,,-252,-252,-252,-252,-252,',
+'-252,-252,-252,,,,,,,,,,,,,,-252,,,-252,-252,,-252,,-252,298,75,76,72',
+'9,58,-252,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104',
+'106,107,,,19,,,,,605,8,46,300,10,109,108,110,99,57,101,100,102,,103',
+'111,112,,95,96,42,43,41,245,249,250,251,252,262,263,257,258,253,254',
+',238,239,,,255,256,,40,,,33,,,59,60,,,61,,35,242,,248,45,244,243,,240',
+'241,261,260,246,20,247,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,259,,-244',
+',,63,,85,97,98,5,75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74',
+',,,,,77,28,27,105,104,106,107,,,19,,,,,605,8,46,7,10,109,108,110,99',
+'57,101,100,102,,103,111,112,,95,96,42,43,41,245,249,250,251,252,262',
+'263,257,258,253,254,,238,239,,,255,256,,40,,,33,,,59,60,,,61,,35,242',
+',248,45,244,243,,240,241,261,260,246,20,247,,,,93,83,86,87,,88,90,89',
+'91,,,,,84,92,,259,,,,,63,,85,97,98,298,75,76,72,9,58,,,,64,65,,,,68',
+',66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,300',
+'10,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,245,249',
+'250,251,252,262,263,257,258,253,254,,238,239,,,255,256,,40,,,302,,,59',
+'60,,,61,,35,242,,248,45,244,243,,240,241,261,260,246,20,247,,,,93,83',
+'86,87,,88,90,89,91,,,,,84,92,,259,,,,,63,,85,97,98,298,75,76,72,9,58',
+',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,',
+',19,,,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103,111,112,,95',
+'96,42,43,41,245,249,250,251,252,262,263,257,258,253,254,,238,239,,,255',
+'256,,40,,,33,,,59,60,,,61,,35,242,,248,45,244,243,,240,241,261,260,246',
+'20,247,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,259,,,,,63,,85,97,98,298',
+'75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105',
+'104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103',
+'111,112,,95,96,42,43,41,245,249,250,251,252,262,263,257,258,253,254',
+',238,239,,,255,256,,40,,,33,,,59,60,,,61,,35,242,,248,45,244,243,,240',
+'241,261,260,246,20,247,,,,93,83,86,87,,88,90,89,91,,,,,84,92,225,259',
+',,,,63,,85,97,98,298,75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73',
+'74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99',
+'57,101,100,102,,103,111,112,,95,96,42,43,41,245,249,250,251,252,262',
+'263,257,258,253,254,,238,239,,,255,256,,40,,,33,,,59,60,,,61,,35,242',
+',248,45,244,243,,240,241,261,260,246,20,247,,,,93,83,86,87,,88,90,89',
+'91,,,,,84,92,,259,,,,,63,,85,97,98,298,75,76,72,9,58,,,,64,65,,,,68',
+',66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,300',
+'10,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,245,249',
+'250,251,252,262,263,257,258,253,254,,238,239,,,255,256,,40,,,33,,,59',
+'60,,,61,,35,242,,248,45,244,243,,240,241,261,260,246,20,247,,,,93,83',
+'86,87,,88,90,89,91,,,,,84,92,,259,,,,,63,,85,97,98,298,75,76,72,9,58',
+',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,',
+',19,,,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103,111,112,,95',
+'96,42,43,41,245,249,250,251,252,262,263,257,258,253,254,,238,239,,,255',
+'256,,40,,,33,,,59,60,,,61,,35,242,,248,45,244,243,,240,241,261,260,246',
+'20,247,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,259,,,,,63,,85,97,98,298',
+'75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105',
+'104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103',
+'111,112,,95,96,42,43,41,245,249,250,251,252,262,263,257,258,253,254',
+',-608,-608,,,255,256,,40,,,33,,,59,60,,,61,,35,242,,248,45,244,243,',
+'240,241,261,260,246,20,247,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,',
+',,,63,,85,97,98,298,75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73',
+'74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99',
+'57,101,100,102,,103,111,112,,95,96,42,43,41,245,-608,-608,-608,-608',
+'262,263,,,-608,-608,,,,,,255,256,,40,,,302,,,59,60,,,61,,35,242,,248',
+'45,244,243,,240,241,261,260,246,20,247,,,,93,83,86,87,,88,90,89,91,',
+',,,84,92,,,,,,,63,,85,97,98,298,75,76,72,9,58,,,,64,65,,,,68,,66,67',
+'69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,300,10,109',
+'108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,245,-608,-608',
+'-608,-608,262,263,,,-608,-608,,,,,,255,256,,40,,,33,,,59,60,,,61,,35',
+'242,,248,45,244,243,,240,241,261,260,246,20,247,,,,93,83,86,87,,88,90',
+'89,91,,,,,84,92,,,,,,,63,,85,97,98,298,75,76,72,9,58,,,,64,65,,,,68',
+',66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,300',
+'10,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,245,-608',
+'-608,-608,-608,262,263,,,-608,-608,,,,,,255,256,,40,,,33,,,59,60,,,61',
+',35,242,,248,45,244,243,,240,241,261,260,246,20,247,,,,93,83,86,87,',
+'88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,298,75,76,72,9,58,,,,64,65',
+',,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,',
+'8,46,300,10,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43',
+'41,245,-608,-608,-608,-608,262,263,,,-608,-608,,,,,,255,256,,40,,,33',
+',,59,60,,,61,,35,242,,248,45,244,243,,240,241,261,260,246,20,247,,,',
+'93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,298,75,76,72,9',
+'58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107',
+',,19,,,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103,111,112,,95',
+'96,42,43,41,245,249,250,251,252,262,263,257,,253,254,,,,,,255,256,,40',
+',,33,,,59,60,,,61,,35,242,,248,45,244,243,,240,241,261,260,246,20,247',
+',,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,298,75,76,72',
+'9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106',
+'107,,,19,,,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103,111,112',
+',95,96,42,43,41,245,249,250,251,252,262,263,,,253,254,,,,,,255,256,',
+'40,,,33,,,59,60,,,61,,35,242,,248,45,244,243,,240,241,261,260,246,20',
+'247,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,298,75',
+'76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104',
+'106,107,,,19,,,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103,111',
+'112,,95,96,42,43,41,245,249,250,251,252,262,263,257,258,253,254,,-608',
+'-608,,,255,256,,40,,,33,,,59,60,,,61,,35,242,,248,45,244,243,,240,241',
+'261,260,246,20,247,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85',
+'97,98,298,75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77',
+'28,27,105,104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99,57,101,100',
+'102,,103,111,112,,95,96,42,43,41,245,-608,-608,-608,-608,262,263,,,-608',
+'-608,,,,,,255,256,,40,,,302,,,59,60,,,61,,35,242,,248,45,244,243,,240',
+'241,261,260,246,20,247,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63',
+',85,97,98,298,75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,',
+',,77,28,27,105,104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99,57,101',
+'100,102,,103,111,112,,95,96,42,43,41,245,-608,-608,-608,-608,262,263',
+',,-608,-608,,,,,,255,256,,40,,,33,,,59,60,,,61,,35,242,,248,45,244,243',
+',240,241,261,260,246,20,247,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,',
+',,,,63,,85,97,98,298,75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73',
+'74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99',
+'57,101,100,102,,103,111,112,,95,96,42,43,41,245,,,,,,,,,,,,,,,,255,256',
+',40,,,33,,,59,60,,,61,,35,242,,248,45,244,243,,240,241,,,,20,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,298,75,76,72,9,58',
+',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,',
+',19,,,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103,111,112,,95',
+'96,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,',
+',,20,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,5,75',
+'76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104',
+'106,107,,,19,,,,,,8,46,7,10,109,108,110,99,57,101,100,102,,103,111,112',
+',95,96,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,',
+',,,,,,20,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,298',
+'75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105',
+'104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103',
+'111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35',
+',,,45,,,,,,,,,20,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85',
+'97,98,298,75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77',
+'28,27,105,104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99,57,101,100',
+'102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60',
+',,61,,35,,,,45,,,,,,,,,20,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,',
+',,,63,,85,97,98,298,75,76,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73',
+'74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99',
+'57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,40,,',
+'33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,93,83,86,87,,88,90,89,91,,',
+',,84,92,,,,,,,63,,85,97,98,298,75,76,72,9,58,,,,64,65,,,,68,,66,67,69',
+'30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,300,10,109',
+'108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,',
+',,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,93,83,86,87,,88',
+'90,89,91,,,,,84,92,,,,,,,63,,85,97,98,298,75,76,72,9,58,,,,64,65,,,',
+'68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46',
+'300,10,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,',
+',,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,93,83',
+'86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,298,75,76,72,9,58,,',
+',64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19',
+',,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42',
+'43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,',
+',,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,298,75,76,72',
+'9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106',
+'107,,,19,,,,,,8,46,300,10,109,108,110,99,57,101,100,102,,103,111,112',
+',95,96,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,',
+',,,,,,20,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85',
+'97,98,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107',
+',,19,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42',
+'43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,',
+',,,93,83,86,87,,88,90,89,91,,,,,84,92,225,,,75,76,72,63,58,85,97,98',
+'64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107',
+',,237,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42',
+'43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235',
+',,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64',
+'65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237',
+',,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41',
+',,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46',
+',,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,',
+',,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86',
+'87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66',
+'67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,,,109',
+'108,110,99,57,101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,',
+',,,,,,,,,230,,,236,,,59,60,,,61,,289,,287,,45,,,293,,,,,,235,,,,,93',
+'290,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,',
+',68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,',
+'46,,,109,108,110,99,57,101,100,102,292,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,289,,287,,45,,,293,,,,,,235',
+',,,,93,290,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64',
+'65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,',
+',,,,,46,,,109,108,110,99,57,101,100,102,292,103,111,112,,95,96,42,43',
+'41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,289,,287,,45,,,293,,,',
+',,235,,,,,93,290,86,87,,88,90,89,91,,,,,84,92,225,,,75,76,72,63,58,85',
+'97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106',
+'107,,,237,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95',
+'96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,',
+',,235,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97',
+'98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107',
+',,237,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42',
+'43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235',
+',,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64',
+'65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237',
+',,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41',
+',,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,75,76,72,9,58,,,',
+'64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19',
+',,,,,8,46,,10,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43',
+'41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,',
+'93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65',
+',,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,',
+',46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,',
+',,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,93,83',
+'86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68',
+',66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,',
+'46,,,109,108,110,99,57,101,100,102,292,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,293,,,,,,235,,,,',
+'93,290,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,75,76,72,9,58',
+',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,',
+',19,,,,,,8,46,7,10,109,108,110,99,57,101,100,102,,103,111,112,,95,96',
+'42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20',
+',,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64',
+'65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,',
+',,,,,46,,,109,108,110,99,57,101,100,102,292,103,111,112,,95,96,42,43',
+'41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,289,,287,,45,,,293,,,',
+',,235,,,,,93,290,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97',
+'98,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,',
+',237,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42',
+'43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235',
+',,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64',
+'65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237',
+',,,,,,315,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,,,321',
+',,,,,,,,,,,,,,,,,,,921,,,236,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,93,83,86',
+'87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66',
+'67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,,,109',
+'108,110,99,57,101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,',
+',,,,,,,,,230,,,236,,,59,60,,,61,,289,,287,,45,,,293,,,,,,235,,,,,93',
+'290,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,',
+',68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,',
+'46,,,109,108,110,99,57,101,100,102,292,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,289,,287,,45,,,293,,,,,,235',
+',,,,93,290,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64',
+'65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,',
+',,,,,46,,,109,108,110,99,57,101,100,102,292,103,111,112,,95,96,42,43',
+'41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,289,,287,,45,,,293,,,',
+',,235,,,,,93,290,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97',
+'98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107',
+',,237,,,,,,,315,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96',
+',,321,,,,,,,,,,,,,,,,,,,,311,,,307,,,59,60,,,61,,306,,,,,,,,,,,,,,,',
+',,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65',
+',,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237',
+',,,,,,315,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,,,321',
+',,,,,,,,,,,,,,,,,,,311,,,236,,,59,60,,,61,,,682,,679,678,677,687,680',
+',,,,,,,,690,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,323,,685,63,,85,97',
+'98,75,76,72,,58,698,697,,64,65,691,,,68,,66,67,69,317,318,73,74,,,,',
+',77,314,320,105,104,106,107,,,237,,,,,,,315,,,109,108,110,99,57,101',
+'100,102,,103,111,112,,95,96,,,321,,,,,,,,,,,,,,,,,,,,927,,,236,,,59',
+'60,,,61,,,,,,,,,,,,,,,,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75',
+'76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314',
+'320,105,104,106,107,,,237,,,,,,,315,,,109,108,110,99,57,101,100,102',
+',103,111,112,,95,96,,,321,,,,,,,,,,,,,,,,,,,,921,,,236,,,59,60,,,61',
+',,,,,,,,,,,,,,,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63',
+'58,85,97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105',
+'104,106,107,,,237,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111',
+'112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45',
+',,,,,,,,235,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58',
+'85,97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104',
+'106,107,,,237,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112',
+',95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,',
+',,,,,,235,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85',
+'97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106',
+'107,,,237,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95',
+'96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,',
+',,235,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97',
+'98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107',
+',,237,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42',
+'43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235',
+',,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64',
+'65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237',
+',,,,,,46,,,109,108,110,99,57,101,100,102,292,103,111,112,,95,96,42,43',
+'41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,287,,45,,,293,,,,,,235',
+',,,,93,290,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,75,76,72',
+'9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106',
+'107,,,19,,,,,,8,46,,10,109,108,110,99,57,101,100,102,,103,111,112,,95',
+'96,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,',
+',,20,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97',
+'98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107',
+',,237,,,,,,,46,,,109,108,110,99,57,101,100,102,292,103,111,112,,95,96',
+'42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,289,,,,45,,,293',
+',,,,,235,,,,,93,290,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85',
+'97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106',
+'107,,,237,,,,,,,46,,,109,108,110,99,57,101,100,102,292,103,111,112,',
+'95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,293',
+',,,,,235,,,,,93,290,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85',
+'97,98,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107',
+',,19,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42',
+'43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,',
+',,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64',
+'65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,',
+',,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41',
+',,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,,46',
+',,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,',
+',,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,93,83,86,87',
+',88,90,89,91,,,,,84,92,117,,,,,116,63,,85,97,98,75,76,72,,58,,,,64,65',
+',,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237',
+',,,,,,315,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,,,321',
+',,,,,,,,,,,,,,,,,,,357,,,33,,,59,60,,,61,,35,,,,,,,,,,,,,,,,,,93,83',
+'86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68',
+',66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,',
+'315,,,109,108,110,362,57,101,100,363,,103,111,112,,95,96,,,321,,,,,',
+',,,,,,,,,,,369,,,364,,,236,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,93,83,86',
+'87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66',
+'67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,315',
+',,109,108,110,362,57,101,100,363,,103,111,112,,95,96,,,321,,,,,,,,,',
+',,,,,,,,,,364,,,236,,,59,60,,,61,,,682,,679,678,677,687,680,,,,,,,,',
+'690,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,685,63,,85,97,98,75,76',
+'72,9,58,698,697,,64,65,691,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27',
+'105,104,106,107,,,19,,,,,,8,46,7,10,109,108,110,99,57,101,100,102,,103',
+'111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35',
+',,,45,,,,,,,,,20,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,397,63',
+',85,97,98,75,76,72,,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77',
+'28,27,105,104,106,107,,,19,,,,,,,46,,,109,108,110,99,57,101,100,102',
+',103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,',
+'61,,,,,,45,,,,,,,,,20,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76',
+'72,63,58,85,97,98,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105',
+'104,106,107,,,19,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112',
+',95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,',
+',,,,,,20,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85',
+'97,98,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107',
+',,19,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42',
+'43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,',
+',,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64',
+'65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,',
+',,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41',
+',,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,,,,63,,85,97,98,75,76,72,9,58,,,',
+'64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19',
+',,,,,8,46,,10,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43',
+'41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,',
+'93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65',
+',,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237',
+',,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41',
+',,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,640,,,,45,,,,,,,,,235,,,',
+',93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65',
+',,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,',
+',46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,',
+',,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,93,83',
+'86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68',
+',66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,',
+',109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,',
+',,,,,,,,,,,230,,,236,,,59,60,,,61,,413,,,,45,,,,,,,,,235,,,,,93,83,86',
+'87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66',
+'67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,,,109',
+'108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,',
+',,,,,,230,,,236,,,59,60,,,61,,413,,,,45,,,,,,,,,235,,,,,93,83,86,87',
+',88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67',
+'69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,,46,,,109,108',
+'110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,',
+',,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,93,83,86,87,,88,90,89',
+'91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,30,31',
+'73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,,46,,,109,108,110,99,57',
+'101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236',
+',,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,93,83,86,87,,88,90,89,91,,,,,84',
+'92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,30,31,73,74,,,,',
+',77,28,27,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57,101,100',
+'102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60',
+',,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75',
+'76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27',
+'105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57,101,100,102,292,103',
+'111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,289',
+',287,,45,,,293,,,,,,235,,,,,93,290,86,87,,88,90,89,91,,,,,84,92,,,,75',
+'76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314',
+'320,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57,101,100,102,',
+'103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61',
+',,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76',
+'72,63,58,85,97,98,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105',
+'104,106,107,,,237,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111',
+'112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45',
+',,,,,,,,235,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58',
+'85,97,98,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106',
+'107,,,19,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96',
+'42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20',
+',,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64',
+'65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237',
+',,,,,,315,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,,,321',
+',,,,,,,,,,,,,,,,,,,311,,,236,,,59,60,,,61,,,682,,679,678,677,687,680',
+',,,,,,,,690,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,515,,685,63,,85,97',
+'98,75,76,72,,58,698,697,,64,65,691,,,68,,66,67,69,317,318,73,74,,,,',
+',77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57,101,100',
+'102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60',
+',,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75',
+'76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314',
+'320,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57,101,100,102,',
+'103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61',
+',413,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75',
+'76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314',
+'320,105,104,106,107,,,237,,,,,,,315,,,109,108,110,99,57,101,100,102',
+',103,111,112,,95,96,,,321,,,,,,,,,,,,,,,,,,,,311,,,307,,,59,60,,,61',
+',,,,,,,,,,,,,,,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63',
+'58,85,97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105',
+'104,106,107,,,237,,,,,,,315,,,109,108,110,99,57,101,100,102,,103,111',
+'112,,95,96,,,321,,,,,,,,,,,,,,,,,,,,311,,,307,,,59,60,,,61,,,,,,,,,',
+',,,,,,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97',
+'98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107',
+',,237,,,,,,,315,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96',
+',,321,,,,,,,,,,,,,,,,,,,,311,,,307,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93',
+'83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,',
+'68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,',
+',,,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,',
+',,,,,,,,,,,,,,,,,,230,,,236,532,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,',
+'93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65',
+',,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,',
+',,46,,,109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,',
+',,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83',
+'86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68',
+',66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,',
+',109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,',
+',,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87',
+',88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67',
+'69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,,,109,108',
+'110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,',
+',,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90',
+'89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,30',
+'31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,,,109,108,110',
+'99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230',
+',,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89,91',
+',,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318,73',
+'74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57',
+'101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,',
+',236,,,59,60,,,61,,,,287,,45,,,293,,,,,,235,,,,,93,290,86,87,,88,90',
+'89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317',
+'318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110',
+'99,57,101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,',
+',230,,,236,,,59,60,,,61,,640,,287,,45,,,293,,,,,,235,,,,,93,290,86,87',
+',88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67',
+'69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109',
+'108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,',
+',,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88',
+'90,89,91,,,,,84,92,,,,,,,63,,85,97,98,75,76,72,9,58,,,,64,65,,,,68,',
+'66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,,10',
+'109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,',
+',,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,93,83,86,87',
+',88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67',
+'69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,,,109,108',
+'110,99,57,101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,',
+',,,,,230,,,236,,,59,60,,,61,,289,,287,,45,,,293,,,,,,235,,,,,93,290',
+'86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68',
+',66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,,46,,',
+'109,108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,',
+',,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,93,83,86,87',
+',88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67',
+'69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,,,109,108',
+'110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,',
+',,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90',
+'89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317',
+'318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110',
+'99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230',
+',,236,,,59,60,,,61,,744,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89',
+'91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,30,31',
+'73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99',
+'57,101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230',
+',,236,,,59,60,,,61,,289,,287,,45,,,293,,,,,,235,,,,,93,290,86,87,,88',
+'90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69',
+'30,31,73,74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,,,109,108,110',
+'99,57,101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,',
+',230,,,236,,,59,60,,,61,,289,,287,,45,,,293,,,,,,235,,,,,93,290,86,87',
+',88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67',
+'69,30,31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,,46,,,109,108',
+'110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,',
+',,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,93,83,86,87,,88,90,89',
+'91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318',
+'73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99',
+'57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,',
+',236,,,59,60,,,61,,289,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89,91',
+',,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318,73',
+'74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57',
+'101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,',
+',236,,,59,60,,,61,,640,,,,45,,,293,,,,,,235,,,,,93,290,86,87,,88,90',
+'89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,30',
+'31,73,74,,,,,,77,28,27,105,104,106,107,,,19,,,,,,,46,,,109,108,110,99',
+'57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,',
+',236,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,93,83,86,87,,88,90,89,91,,',
+',,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318,73',
+'74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57',
+'101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236',
+',,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89,91,,,,,84',
+'92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318,73,74,,',
+',,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57,101',
+'100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,',
+'59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89,91,,,,,84,92',
+',,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,',
+'77,314,320,105,104,106,107,,,237,,,,,,,315,,,109,108,110,99,57,101,100',
+'102,,103,111,112,,95,96,,,321,,,,,,,,,,,,,,,,,,,,311,,,307,,,59,60,',
+',61,,,,,,,,,,,,,,,,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72',
+'63,58,85,97,98,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104',
+'106,107,,,19,,,,,,,46,,,109,108,110,99,57,101,100,102,,103,111,112,',
+'95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,',
+',,,,,20,,,,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85',
+'97,98,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,77,28,27,105,104,106,107',
+',,237,,,,,,,46,,,109,108,110,99,57,101,100,102,292,103,111,112,,95,96',
+'42,43,41,,,,,,,,,,,,,,,,,,,,230,,,236,,,59,60,,,61,,289,,287,,45,,,293',
+',,,,,235,,,,,93,290,86,87,,88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85',
+'97,98,64,65,,,,68,,66,67,69,317,318,73,74,,,,,,77,314,320,105,104,106',
+'107,,,237,,,,,,,315,,,109,108,110,99,57,101,100,102,,103,111,112,,95',
+'96,,,321,,,,,,,,,,,,,,,,,,,,311,,,307,,,59,60,,,61,,,682,,679,678,677',
+'687,680,,,,,,,,,690,,93,83,86,87,,88,90,89,91,,,,,84,92,,,,,,685,63',
+',85,97,98,75,76,72,9,58,698,697,,64,65,691,,,68,,66,67,69,30,31,73,74',
+',,,,,77,28,27,105,104,106,107,,,19,,,,,,8,46,300,10,109,108,110,99,57',
+'101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33',
+',,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,93,83,86,87,,88,90,89,91,,,,,84',
+'92,,,,,,397,63,,85,97,98,75,76,72,,58,,,,64,65,,,,68,,66,67,69,317,318',
+'73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99',
+'57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,',
+',236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89,91,',
+',,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317,318,73',
+'74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57',
+'101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,',
+',236,,,59,60,,,61,,,,287,,45,,,293,,,,,,235,,,,,93,290,86,87,,88,90',
+'89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317',
+'318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110',
+'99,57,101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,',
+',230,,,236,,,59,60,,,61,,640,,287,,45,,,293,,,,,,235,,,,,93,290,86,87',
+',88,90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67',
+'69,317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109',
+'108,110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,',
+',,,,,,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88',
+'90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69',
+'317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108',
+'110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,',
+',,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90',
+'89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,317',
+'318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108,110',
+'99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230',
+',,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90,89,91',
+',,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69,30,31,73',
+'74,,,,,,77,28,27,105,104,106,107,,,237,,,,,,,46,,,109,108,110,99,57',
+'101,100,102,292,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,,,,230,',
+',236,,,59,60,,,61,,289,,287,,45,,,293,,,,,,235,,,,,93,290,86,87,,88',
+'90,89,91,,,,,84,92,,,,75,76,72,63,58,85,97,98,64,65,,,,68,,66,67,69',
+'317,318,73,74,,,,,,77,314,320,105,104,106,107,,,237,,,,,,,46,,,109,108',
+'110,99,57,101,100,102,,103,111,112,,95,96,42,43,41,,,,,,,,,,,,,,,,,',
+',,230,,,236,,,59,60,,,61,,,,,,45,,,,,,,,,235,,,,,93,83,86,87,,88,90',
+'89,91,,,,,84,92,,,,,,,63,,85,97,98,178,189,179,202,175,195,185,184,205',
+'206,200,183,182,177,203,207,208,187,176,190,194,196,188,181,,,,197,204',
+'199,198,191,201,186,174,193,192,,,,,,173,180,171,172,168,169,170,129',
+'131,,,130,,,,,,,,162,163,,159,141,142,143,150,147,149,,,144,145,,,,164',
+'165,151,152,,,,,,,,,,,,,,156,155,,140,161,158,157,166,153,154,148,146',
+'138,160,139,,,167,93,,,,,,,,,,,,,,92,178,189,179,202,175,195,185,184',
+'205,206,200,183,182,177,203,207,208,187,176,190,194,196,188,181,,,,197',
+'204,199,198,191,201,186,174,193,192,,,,,,173,180,171,172,168,169,170',
+'129,131,,,130,,,,,,,,162,163,,159,141,142,143,150,147,149,,,144,145',
+',,,164,165,151,152,,,,,,,,,,,,,,156,155,,140,161,158,157,166,153,154',
+'148,146,138,160,139,,,167,93,,,,,,,,,,,,,,92,178,189,179,202,175,195',
+'185,184,205,206,200,183,182,177,203,207,208,187,176,190,194,196,188',
+'181,,,,197,204,199,198,191,201,186,174,193,192,,,,,,173,180,171,172',
+'168,169,170,129,131,,,130,,,,,,,,162,163,,159,141,142,143,150,147,149',
+',,144,145,,,,164,165,151,152,,,,,,,,,,,,,,156,155,,140,161,158,157,166',
+'153,154,148,146,138,160,139,,,167,93,,,,,,,,,,,,,,92,178,189,179,202',
+'175,195,185,184,205,206,200,183,182,177,203,207,208,187,176,190,194',
+'196,188,181,,,,197,204,199,198,191,201,186,174,193,192,,,,,,173,180',
+'171,172,168,169,170,129,131,128,,130,,,,,,,,162,163,,159,141,142,143',
+'150,147,149,,,144,145,,,,164,165,151,152,,,,,,,,,,,,,,156,155,,140,161',
+'158,157,166,153,154,148,146,138,160,139,,,167,93,,,,,,,,,,,,,,92,178',
+'189,179,202,175,195,185,184,205,206,200,183,182,177,203,207,208,187',
+'176,190,194,196,188,181,,,,197,204,199,380,379,381,378,174,193,192,',
+',,,,173,180,171,172,375,376,377,373,131,101,100,374,,103,,,,,,162,163',
+',159,141,142,143,150,147,149,,,144,145,,,,164,165,151,152,,,,,,385,',
+',,,,,,156,155,,140,161,158,157,166,153,154,148,146,138,160,139,,,167',
+'178,189,179,202,175,195,185,184,205,206,200,183,182,177,203,207,208',
+'187,176,190,194,196,188,181,,,,197,204,199,198,191,201,186,174,193,192',
+',,,,,173,180,171,172,168,169,170,129,131,,,130,,,,,,,,162,163,,159,141',
+'142,143,150,147,149,,,144,145,,,,164,165,151,152,,,,,,,,,,,,,,156,155',
+',140,161,158,157,166,153,154,148,146,138,160,139,621,439,167,,622,,',
+',,,,,162,163,,159,141,142,143,150,147,149,,,144,145,,,,164,165,151,152',
+',,,,,271,,,,,,,,156,155,,140,161,158,157,166,153,154,148,146,138,160',
+'139,714,446,167,,715,,,,,,,,162,163,,159,141,142,143,150,147,149,,,144',
+'145,,,,164,165,151,152,,,,,,271,,,,,,,,156,155,,140,161,158,157,166',
+'153,154,148,146,138,160,139,749,446,167,,748,,,,,,,,162,163,,159,141',
+'142,143,150,147,149,,,144,145,,,,164,165,151,152,,,,,,271,,,,,,,,156',
+'155,,140,161,158,157,166,153,154,148,146,138,160,139,746,439,167,,747',
+',,,,,,,162,163,,159,141,142,143,150,147,149,,,144,145,,,,164,165,151',
+'152,,,,,,271,,,,,,,,156,155,,140,161,158,157,166,153,154,148,146,138',
+'160,139,435,439,167,,436,,,,,,,,162,163,,159,141,142,143,150,147,149',
+',,144,145,,,,164,165,151,152,,,,,,271,,,,,,,,156,155,,140,161,158,157',
+'166,153,154,148,146,138,160,139,486,439,167,,487,,,,,,,,162,163,,159',
+'141,142,143,150,147,149,,,144,145,,,,164,165,151,152,,,,,,,,,,,,,,156',
+'155,,140,161,158,157,166,153,154,148,146,138,160,139,442,446,167,,441',
+',,,,,,,162,163,,159,141,142,143,150,147,149,,,144,145,,,,164,165,151',
+'152,,,,,,271,,,,,,,,156,155,,140,161,158,157,166,153,154,148,146,138',
+'160,139,623,446,167,,624,,,,,,,,162,163,,159,141,142,143,150,147,149',
+',,144,145,,,,164,165,151,152,,,,,,271,,,,,,,,156,155,,140,161,158,157',
+'166,153,154,148,146,138,160,139,621,439,167,,622,,,,,,,,162,163,,159',
+'141,142,143,150,147,149,,,144,145,,,,164,165,151,152,,,,,,271,,,,,,',
+',156,155,,140,161,158,157,166,153,154,148,146,138,160,139,1006,446,167',
+',1007,,,,,,,,162,163,,159,141,142,143,150,147,149,,,144,145,,,,164,165',
+'151,152,,,,,,271,,,,,,,,156,155,,140,161,158,157,166,153,154,148,146',
+'138,160,139,486,439,167,,487,,,,,,,,162,163,,159,141,142,143,150,147',
+'149,,,144,145,,,,164,165,151,152,,,,,,271,,,,,,,,156,155,,140,161,158',
+'157,166,153,154,148,146,138,160,139,717,446,167,,718,,,,,,,,162,163',
+',159,141,142,143,150,147,149,,,144,145,,,,164,165,151,152,,,,,,271,',
+',,,,,,156,155,,140,161,158,157,166,153,154,148,146,138,160,139,1004',
+'439,167,,1005,,,,,,,,162,163,,159,141,142,143,150,147,149,,,144,145',
+',,,164,165,151,152,,,,,,271,,,,,,,,156,155,,140,161,158,157,166,153',
+'154,148,146,138,160,139,1001,446,167,,1000,,,,,,,,162,163,,159,141,142',
+'143,150,147,149,,,144,145,,,,164,165,151,152,,,,,,271,,,,,,,,156,155',
+',140,161,158,157,166,153,154,148,146,138,160,139,650,439,167,,651,,',
+',,,,,162,163,,159,141,142,143,150,147,149,,,144,145,,,,164,165,151,152',
+',,,,,271,,,,,,,,156,155,,140,161,158,157,166,153,154,148,146,138,160',
+'139,653,446,167,,654,,,,,,,,162,163,,159,141,142,143,150,147,149,,,144',
+'145,,,,164,165,151,152,,,,,,271,,,,,,,,156,155,,140,161,158,157,166',
+'153,154,148,146,138,160,139,712,439,167,,713,,,,,,,,162,163,,159,141',
+'142,143,150,147,149,,,144,145,,,,164,165,151,152,,,,,,271,,,,,,,,156',
+'155,,140,161,158,157,166,153,154,148,146,138,160,139,623,446,167,,624',
+',,,,,,,162,163,,159,141,142,143,150,147,149,,,144,145,,,,164,165,151',
+'152,,,,,,271,,,,,,,,156,155,,140,161,158,157,166,153,154,148,146,138',
+'160,139,,682,167,679,678,677,687,680,,682,,679,678,677,687,680,690,',
+',,,,,,690,,682,,679,678,677,687,680,,,,,,685,,,690,,,,,685,695,694,698',
+'697,,,,691,695,694,698,697,,,,691,685,,682,,679,678,677,687,680,695',
+'694,698,697,,,,691,690,,682,,679,678,677,687,680,,682,,679,678,677,687',
+'680,690,,,,,685,,,690,,,,,,695,694,698,697,,,,691,685,,,,,,,,685,695',
+'694,698,697,,,,691,695,694,698,697,,,682,691,679,678,677,687,680,,682',
+',679,678,677,687,680,690,,,,,,,,690,,682,,679,678,677,687,680,,,,,,685',
+',,690,,,,,685,,,698,697,,,,691,695,694,698,697,,,,691,685,,682,,679',
+'678,677,687,680,,,698,697,,,,691,690,,682,,679,678,677,687,680,682,',
+'679,678,677,687,680,,690,,,,,685,,690,,682,,679,678,677,687,680,698',
+'697,,,,691,685,,690,,,,,685,,,,698,697,,,,691,,698,697,,,,691,685,,682',
+',679,678,677,687,680,695,694,698,697,,,,691,690,,682,,679,678,677,687',
+'680,682,,679,678,677,687,680,,690,,,,,685,668,690,,,,,,,695,694,698',
+'697,,,,691,685,,,,,,,685,,695,694,698,697,,,,691,,698,697,,,,691' ]
+ racc_action_table = arr = ::Array.new(24631, 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 = [
+'623,746,893,574,574,560,713,623,623,623,19,347,623,623,623,772,623,62',
+'710,797,463,645,346,392,634,623,623,623,623,354,364,645,1016,393,364',
+'358,623,623,1024,623,623,623,623,623,1004,925,1005,975,928,1019,772',
+'19,463,1020,451,451,463,463,746,634,660,660,1021,827,355,712,623,623',
+'623,623,623,623,623,623,623,623,623,623,623,623,836,1007,623,623,623',
+'836,623,623,867,392,623,924,714,623,623,1022,623,574,623,393,623,1,623',
+'623,62,623,623,623,623,623,748,623,623,623,560,713,551,748,748,748,893',
+'1006,1025,748,748,893,748,623,797,347,623,623,623,623,347,623,710,623',
+'354,710,346,710,623,623,358,346,748,748,451,748,748,748,748,748,660',
+'630,1024,714,1007,715,650,1024,1004,925,1005,975,928,1004,925,1005,975',
+'928,827,355,712,1026,748,748,748,748,748,748,748,748,748,748,748,748',
+'748,748,316,420,748,748,748,383,748,433,1006,1007,748,714,383,748,1007',
+'1033,867,786,748,924,748,867,748,748,924,748,748,748,748,748,551,748',
+'442,748,715,551,650,231,840,442,442,442,41,41,434,442,442,748,442,1006',
+'748,748,630,748,1006,748,228,442,420,570,570,351,748,748,316,363,351',
+'26,442,442,383,442,442,442,442,442,650,968,715,650,896,831,896,786,968',
+'503,831,316,431,650,653,321,321,968,231,840,345,345,442,442,442,442',
+'442,442,442,442,442,442,442,442,442,442,421,228,442,442,442,363,442',
+'229,41,41,442,786,363,442,786,717,585,363,442,26,442,363,442,442,786',
+'442,442,442,442,442,968,442,442,442,651,986,986,503,503,503,363,570',
+'26,653,653,443,570,442,387,417,442,442,749,442,503,442,414,321,321,749',
+'749,749,442,442,229,749,749,717,749,945,363,945,945,945,717,945,769',
+'749,453,717,585,585,587,717,653,700,700,653,749,749,585,749,749,749',
+'749,749,296,653,3,412,651,296,717,3,814,409,814,814,814,24,814,403,387',
+'387,387,747,24,465,749,749,749,749,749,749,749,749,749,749,749,749,749',
+'749,717,769,749,749,749,466,749,467,651,468,749,651,394,749,587,587',
+'390,325,749,945,749,651,749,749,587,749,749,749,749,749,441,749,749',
+'749,621,490,606,441,441,441,747,494,24,441,441,341,441,749,341,964,749',
+'749,964,749,814,749,338,337,362,338,337,622,749,749,325,510,441,441',
+'17,441,441,441,441,441,325,511,394,394,394,366,390,390,390,606,666,381',
+'366,666,514,457,516,621,381,606,521,366,441,441,441,441,441,441,441',
+'441,441,441,441,441,441,441,362,524,441,441,441,17,441,362,622,533,441',
+'391,362,441,388,17,362,389,441,534,441,535,441,441,536,441,441,441,441',
+'441,99,441,548,441,366,362,457,99,99,99,381,552,99,99,99,563,99,441',
+'44,44,441,441,563,441,99,441,99,99,99,14,14,563,441,441,553,362,99,99',
+'554,99,99,99,99,99,555,391,391,391,388,388,388,389,389,389,44,44,128',
+'380,379,802,802,128,128,368,380,379,99,99,99,99,99,99,99,99,99,99,99',
+'99,99,99,563,356,99,99,99,227,99,99,356,359,99,357,227,99,99,572,99',
+'356,99,582,99,227,99,99,590,99,99,99,99,99,378,99,102,99,592,353,598',
+'378,352,102,102,102,380,379,102,102,102,99,102,342,99,99,99,99,607,99',
+'102,99,102,102,102,340,99,99,81,339,356,612,102,102,227,102,102,102',
+'102,102,81,47,335,617,329,327,377,376,47,375,81,625,327,377,376,626',
+'375,47,627,378,629,327,102,102,102,102,102,102,102,102,102,102,102,102',
+'102,102,633,520,102,102,102,920,102,102,520,635,102,637,920,102,102',
+'639,102,520,102,326,102,920,102,102,322,102,102,102,102,102,47,102,624',
+'102,327,377,376,647,375,624,624,624,649,320,624,624,624,102,624,652',
+'102,102,102,102,655,102,656,102,624,624,624,315,102,102,659,314,520',
+'661,624,624,920,624,624,624,624,624,436,926,670,16,671,312,374,373,926',
+'673,16,674,312,374,373,675,684,926,311,16,692,312,624,624,624,624,624',
+'624,624,624,624,624,624,624,624,624,696,699,624,624,624,702,624,624',
+'419,708,624,436,435,624,624,419,624,711,624,305,624,436,624,624,419',
+'624,624,624,624,624,926,624,16,624,312,374,373,304,946,303,946,946,946',
+'301,946,39,720,624,300,38,624,624,624,624,724,624,288,624,446,435,285',
+'743,624,624,284,446,446,446,799,435,446,446,446,419,446,946,745,270',
+'799,754,237,478,233,446,446,446,446,999,232,999,999,999,39,999,446,446',
+'38,446,446,446,446,446,39,654,230,775,38,310,785,789,654,799,799,478',
+'310,654,799,478,478,654,478,478,792,310,446,446,446,446,446,446,446',
+'446,446,446,446,446,446,446,793,309,446,446,446,798,813,446,309,815',
+'446,820,209,446,446,823,446,309,446,113,446,828,446,446,830,446,446',
+'446,446,446,654,446,446,446,310,834,835,838,308,839,811,46,811,811,811',
+'308,811,446,848,849,446,446,446,446,308,446,447,446,851,852,853,907',
+'446,447,447,447,309,855,447,447,447,907,447,856,857,479,858,811,40,873',
+'874,447,447,447,447,918,811,918,918,918,878,918,447,447,879,447,447',
+'447,447,447,881,718,882,308,907,907,884,479,718,907,887,479,479,718',
+'479,479,889,718,37,900,904,917,447,447,447,447,447,447,447,447,447,447',
+'447,447,447,447,921,22,447,447,447,927,947,447,15,954,447,957,464,447',
+'447,958,447,959,447,960,447,962,447,447,971,447,447,447,447,447,718',
+'447,447,447,685,13,685,685,685,888,685,888,888,888,464,888,12,447,464',
+'464,447,447,447,447,976,447,57,447,977,978,979,980,447,57,57,57,981',
+'982,57,57,57,685,57,530,984,987,888,1000,1001,1003,685,10,57,57,57,888',
+'7,,,530,530,,57,57,,57,57,57,57,57,890,,890,890,890,530,890,530,,530',
+'530,,530,530,,,530,,530,,,,57,57,57,57,57,57,57,57,57,57,57,57,57,57',
+',890,57,57,57,,,57,,,57,,,57,57,,57,,57,,57,,57,57,,57,57,57,57,57,',
+'57,,57,578,578,,,578,578,578,,1015,,1015,1015,1015,57,1015,,57,57,57',
+'57,,57,485,57,,,,,57,485,485,485,,,485,485,485,778,485,778,778,778,778',
+'778,,1015,,485,485,,,,778,,,483,,,485,485,,485,485,485,485,485,334,334',
+'334,334,334,483,483,,778,6,6,6,6,6,,,,778,778,778,778,483,,483,778,483',
+'483,,483,483,,,483,485,483,27,,,,,485,,27,27,27,485,485,27,27,27,778',
+'27,983,,983,983,983,,983,,27,27,27,299,299,299,299,299,485,485,,27,27',
+',27,27,27,27,27,,,,,485,,,485,,,983,985,485,985,985,985,,985,,485,,',
+'27,27,27,27,27,27,27,27,27,27,27,27,27,27,,,27,27,27,,,27,,27,27,,985',
+'27,27,,27,,27,,27,,27,27,,27,27,27,27,27,28,27,27,27,,,,28,28,28,,,28',
+'28,28,,28,27,470,,27,27,,27,,27,28,28,,,,,27,,470,470,28,28,,28,28,28',
+'28,28,508,508,508,508,508,,470,,470,,470,470,,470,470,,,,,,,,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,437,28,,,,,,437,437,437,,,437,437',
+'437,28,437,471,28,28,,28,,28,,437,437,437,,,28,,,471,471,,437,437,,437',
+'437,437,437,437,,,,,,471,,,,471,471,,471,471,,,,,,,,,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,437,,437,437,437',
+',,,,,,,,,,,,,437,,,437,437,,437,,437,550,550,550,550,550,550,437,,,550',
+'550,,,,550,,550,550,550,550,550,550,550,,,,,,550,550,550,550,550,550',
+'550,,,550,,,,,424,550,550,550,550,550,550,550,550,550,550,550,550,,550',
+'550,550,,550,550,550,550,550,424,424,424,424,424,424,424,424,424,424',
+'424,,424,424,,,424,424,,550,,,550,,,550,550,,,550,,550,424,,424,550',
+'424,424,,424,424,424,424,424,550,424,,,,550,550,550,550,,550,550,550',
+'550,,,,,550,550,,424,,424,,,550,,550,550,550,0,0,0,0,0,0,,,,0,0,,,,0',
+',0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,430,0,0,0,0,0,0,0,0,0,0,0',
+'0,,0,0,0,,0,0,0,0,0,430,430,430,430,430,430,430,430,430,430,430,,430',
+'430,,,430,430,,0,,,0,,,0,0,,,0,,0,430,,430,0,430,430,,430,430,430,430',
+'430,0,430,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,430,,,,,0,,0,0,0,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,282,282,282,282,282,282',
+'282,282,282,282,282,,282,282,,,282,282,,307,,,307,,,307,307,,,307,,307',
+'282,,282,307,282,282,,282,282,282,282,282,307,282,,,,307,307,307,307',
+',307,307,307,307,,,,,307,307,,282,,,,,307,,307,307,307,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,751,751,751,751,751,751,751',
+'751,751,751,751,,751,751,,,751,751,,571,,,571,,,571,571,,,571,,571,751',
+',751,571,751,751,,751,751,751,751,751,571,751,,,,571,571,571,571,,571',
+'571,571,571,,,,,571,571,,751,,,,,571,,571,571,571,350,350,350,350,350',
+'350,,,,350,350,,,,350,,350,350,350,350,350,350,350,,,,,,350,350,350',
+'350,350,350,350,,,350,,,,,,350,350,350,350,350,350,350,350,350,350,350',
+'350,,350,350,350,,350,350,350,350,350,482,482,482,482,482,482,482,482',
+'482,482,482,,482,482,,,482,482,,350,,,350,,,350,350,,,350,,350,482,',
+'482,350,482,482,,482,482,482,482,482,350,482,,,,350,350,350,350,,350',
+'350,350,350,,,,,350,350,482,482,,,,,350,,350,350,350,923,923,923,923',
+'923,923,,,,923,923,,,,923,,923,923,923,923,923,923,923,,,,,,923,923',
+'923,923,923,923,923,,,923,,,,,,923,923,923,923,923,923,923,923,923,923',
+'923,923,,923,923,923,,923,923,923,923,923,845,845,845,845,845,845,845',
+'845,845,845,845,,845,845,,,845,845,,923,,,923,,,923,923,,,923,,923,845',
+',845,923,845,845,,845,845,845,845,845,923,845,,,,923,923,923,923,,923',
+'923,923,923,,,,,923,923,,845,,,,,923,,923,923,923,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,21,21,21,21,21,21,21,21,21,21',
+'21,,21,21,,,21,21,,791,,,791,,,791,791,,,791,,791,21,,21,791,21,21,',
+'21,21,21,21,21,791,21,,,,791,791,791,791,,791,791,791,791,,,,,791,791',
+',21,,,,,791,,791,791,791,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,531,531,531,531,531,531,531,531,531,531,531,,531,531',
+',,531,531,,735,,,735,,,735,735,,,735,,735,531,,531,735,531,531,,531',
+'531,531,531,531,735,531,,,,735,735,735,735,,735,735,735,735,,,,,735',
+'735,,531,,,,,735,,735,735,735,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,461,461,461,461,461,461,461,461,461,461,461,,461',
+'461,,,461,461,,716,,,716,,,716,716,,,716,,716,461,,461,716,461,461,',
+'461,461,461,461,461,716,461,,,,716,716,716,716,,716,716,716,716,,,,',
+'716,716,,,,,,,716,,716,716,716,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,473,473,473,473,473,473,473,,,473,473,,,,,,473',
+'473,,302,,,302,,,302,302,,,302,,302,473,,473,302,473,473,,473,473,473',
+'473,473,302,473,,,,302,302,302,302,,302,302,302,302,,,,,302,302,,,,',
+',,302,,302,302,302,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,475,475,475,475,475,475,475,,,475,475,,,,,,475,475,,780,,,780',
+',,780,780,,,780,,780,475,,475,780,475,475,,475,475,475,475,475,780,475',
+',,,780,780,780,780,,780,780,780,780,,,,,780,780,,,,,,,780,,780,780,780',
+'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,477,477,477',
+'477,477,477,477,,,477,477,,,,,,477,477,,832,,,832,,,832,832,,,832,,832',
+'477,,477,832,477,477,,477,477,477,477,477,832,477,,,,832,832,832,832',
+',832,832,832,832,,,,,832,832,,,,,,,832,,832,832,832,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,472,472,472,472,472,472,472',
+',,472,472,,,,,,472,472,,725,,,725,,,725,725,,,725,,725,472,,472,725',
+'472,472,,472,472,472,472,472,725,472,,,,725,725,725,725,,725,725,725',
+'725,,,,,725,725,,,,,,,725,,725,725,725,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,481,481,481,481,481,481,481,481,,481,481',
+',,,,,481,481,,721,,,721,,,721,721,,,721,,721,481,,481,721,481,481,,481',
+'481,481,481,481,721,481,,,,721,721,721,721,,721,721,721,721,,,,,721',
+'721,,,,,,,721,,721,721,721,236,236,236,236,236,236,,,,236,236,,,,236',
+',236,236,236,236,236,236,236,,,,,,236,236,236,236,236,236,236,,,236',
+',,,,,236,236,236,236,236,236,236,236,236,236,236,236,,236,236,236,,236',
+'236,236,236,236,480,480,480,480,480,480,480,,,480,480,,,,,,480,480,',
+'236,,,236,,,236,236,,,236,,236,480,,480,236,480,480,,480,480,480,480',
+'480,236,480,,,,236,236,236,236,,236,236,236,236,,,,,236,236,,,,,,,236',
+',236,236,236,826,826,826,826,826,826,,,,826,826,,,,826,,826,826,826',
+'826,826,826,826,,,,,,826,826,826,826,826,826,826,,,826,,,,,,826,826',
+'826,826,826,826,826,826,826,826,826,826,,826,826,826,,826,826,826,826',
+'826,462,462,462,462,462,462,462,462,462,462,462,,462,462,,,462,462,',
+'826,,,826,,,826,826,,,826,,826,462,,462,826,462,462,,462,462,462,462',
+'462,826,462,,,,826,826,826,826,,826,826,826,826,,,,,826,826,,,,,,,826',
+',826,826,826,33,33,33,33,33,33,,,,33,33,,,,33,,33,33,33,33,33,33,33',
+',,,,,33,33,33,33,33,33,33,,,33,,,,,,33,33,33,33,33,33,33,33,33,33,33',
+'33,,33,33,33,,33,33,33,33,33,476,476,476,476,476,476,476,,,476,476,',
+',,,,476,476,,33,,,33,,,33,33,,,33,,33,476,,476,33,476,476,,476,476,476',
+'476,476,33,476,,,,33,33,33,33,,33,33,33,33,,,,,33,33,,,,,,,33,,33,33',
+'33,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,474,474',
+'474,474,474,474,474,,,474,474,,,,,,474,474,,547,,,547,,,547,547,,,547',
+',547,474,,474,547,474,474,,474,474,474,474,474,547,474,,,,547,547,547',
+'547,,547,547,547,547,,,,,547,547,,,,,,,547,,547,547,547,349,349,349',
+'349,349,349,,,,349,349,,,,349,,349,349,349,349,349,349,349,,,,,,349',
+'349,349,349,349,349,349,,,349,,,,,,349,349,349,349,349,349,349,349,349',
+'349,349,349,,349,349,349,,349,349,349,349,349,469,,,,,,,,,,,,,,,,469',
+'469,,349,,,349,,,349,349,,,349,,349,469,,469,349,469,469,,469,469,,',
+',349,,,,,349,349,349,349,,349,349,349,349,,,,,349,349,,,,,,,349,,349',
+'349,349,333,333,333,333,333,333,,,,333,333,,,,333,,333,333,333,333,333',
+'333,333,,,,,,333,333,333,333,333,333,333,,,333,,,,,,333,333,333,333',
+'333,333,333,333,333,333,333,333,,333,333,333,,333,333,333,333,333,,',
+',,,,,,,,,,,,,,,,,333,,,333,,,333,333,,,333,,333,,,,333,,,,,,,,,333,',
+',,,333,333,333,333,,333,333,333,333,,,,,333,333,,,,,,,333,,333,333,333',
+'126,126,126,126,126,126,,,,126,126,,,,126,,126,126,126,126,126,126,126',
+',,,,,126,126,126,126,126,126,126,,,126,,,,,,126,126,126,126,126,126',
+'126,126,126,126,126,126,,126,126,126,,126,126,126,126,126,,,,,,,,,,',
+',,,,,,,,,126,,,126,,,126,126,,,126,,126,,,,126,,,,,,,,,126,,,,,126,126',
+'126,126,,126,126,126,126,,,,,126,126,,,,,,,126,,126,126,126,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,,,,,864,864,864,864',
+',864,864,864,864,,,,,864,864,,,,,,,864,,864,864,864,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,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,211,211,211,211,211,211,',
+',,211,211,,,,211,,211,211,211,211,211,211,211,,,,,,211,211,211,211,211',
+'211,211,,,211,,,,,,211,211,211,211,211,211,211,211,211,211,211,211,',
+'211,211,211,,211,211,211,211,211,,,,,,,,,,,,,,,,,,,,211,,,211,,,211',
+'211,,,211,,211,,,,211,,,,,,,,,211,,,,,211,211,211,211,,211,211,211,211',
+',,,,211,211,,,,,,,211,,211,211,211,948,948,948,948,948,948,,,,948,948',
+',,,948,,948,948,948,948,948,948,948,,,,,,948,948,948,948,948,948,948',
+',,948,,,,,,948,948,948,948,948,948,948,948,948,948,948,948,,948,948',
+'948,,948,948,948,948,948,,,,,,,,,,,,,,,,,,,,948,,,948,,,948,948,,,948',
+',948,,,,948,,,,,,,,,948,,,,,948,948,948,948,,948,948,948,948,,,,,948',
+'948,,,,,,,948,,948,948,948,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,931,931,931,,931,931,931,931,,,,,931,931,,',
+',,,,931,,931,931,931,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,,,,,,,,,,,,,,,,,,,,846,,,846,,,846,846,,,846,,846,,,,846',
+',,,,,,,,846,,,,,846,846,846,846,,846,846,846,846,,,,,846,846,,,,,,,846',
+',846,846,846,930,930,930,930,930,930,,,,930,930,,,,930,,930,930,930',
+'930,930,930,930,,,,,,930,930,930,930,930,930,930,,,930,,,,,,930,930',
+'930,930,930,930,930,930,930,930,930,930,,930,930,930,,930,930,930,930',
+'930,,,,,,,,,,,,,,,,,,,,930,,,930,,,930,930,,,930,,930,,,,930,,,,,,,',
+',930,,,,,930,930,930,930,,930,930,930,930,,,,,930,930,,,,224,224,224',
+'930,224,930,930,930,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,224,,,770,770,770,224,770,224,224,224,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,,,,768,768,768',
+'770,768,770,770,770,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,,,,235,235,235,766,235,766,766,766,235,235,,,,235,,235',
+'235,235,235,235,235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,',
+',235,,,235,235,235,235,235,235,235,235,,235,235,235,,235,235,235,235',
+'235,,,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,,,,235',
+',,,,235,235,235,235,,235,235,235,235,,,,,235,235,,,,765,765,765,235',
+'765,235,235,235,765,765,,,,765,,765,765,765,765,765,765,765,,,,,,765',
+'765,765,765,765,765,765,,,765,,,,,,,765,,,765,765,765,765,765,765,765',
+'765,,765,765,765,,765,765,765,765,765,,,,,,,,,,,,,,,,,,,,765,,,765,',
+',765,765,,,765,,,,,,765,,,,,,,,,765,,,,,765,765,765,765,,765,765,765',
+'765,,,,,765,765,,,,238,238,238,765,238,765,765,765,238,238,,,,238,,238',
+'238,238,238,238,238,238,,,,,,238,238,238,238,238,238,238,,,238,,,,,',
+',238,,,238,238,238,238,238,238,238,238,,238,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,,,,259,259,259,258',
+'259,258,258,258,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259',
+'259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259',
+'259,,259,259,259,,259,259,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,',
+',259,259,,,259,,,,,,259,,,,,,,,,259,,,,,259,259,259,259,,259,259,259',
+'259,,,,,259,259,,,,264,264,264,259,264,259,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,,,,,264,264,,,,752,752,752,264',
+'752,264,264,264,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,,,,271,271,271,752,271,752,752,752,271,271,,,,271,,271',
+'271,271,271,271,271,271,,,,,,271,271,271,271,271,271,271,,,271,,,,,',
+',271,,,271,271,271,271,271,271,271,271,271,271,271,271,,271,271,271',
+'271,271,,,,,,,,,,,,,,,,,,,,271,,,271,,,271,271,,,271,,271,,271,,271',
+',,271,,,,,,271,,,,,271,271,271,271,,271,271,271,271,,,,,271,271,,,,272',
+'272,272,271,272,271,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,,,,,272,272,,,,280,280,280,272,280,272',
+'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,280,280,,,744,744,744,280,744,280,280,280,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,,,,,744,744,,,,287,287',
+'287,744,287,744,744,744,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,,,,289,289,289,287,289,287,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,,,,,289,289,,,,292',
+'292,292,289,292,289,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,,,,,292,292,,,,293,293,293,292,293,292,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,,,,,293,293,',
+',,,,,293,,293,293,293,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,,,,722,722,722',
+'298,722,298,298,298,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,,,,,722,722,,,,541,541,541,722,541,722,722,722,541,541,,,,541,,541',
+'541,541,541,541,541,541,,,,,,541,541,541,541,541,541,541,,,541,,,,,',
+',541,,,541,541,541,541,541,541,541,541,541,541,541,541,,541,541,541',
+'541,541,,,,,,,,,,,,,,,,,,,,541,,,541,,,541,541,,,541,,,,,,541,,,541',
+',,,,,541,,,,,541,541,541,541,,541,541,541,541,,,,,541,541,,,,,,,541',
+',541,541,541,5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5,5',
+',,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,,,,,,,,,,,',
+',,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,,5,5,5,5,,,,,5,5,,,',
+'972,972,972,5,972,5,5,5,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,,,,20,20,20,972,20,972,972,972',
+'20,20,,,,20,,20,20,20,20,20,20,20,,,,,,20,20,20,20,20,20,20,,,20,,,',
+',,,20,,,20,20,20,20,20,20,20,20,,20,20,20,,20,20,20,20,20,,,,,,,,,,',
+',,,,,,,,,20,,,20,,,20,20,,,20,,,,,,20,,,,,,,,,20,,,,,20,20,20,20,,20',
+'20,20,20,,,,,20,20,,,,919,919,919,20,919,20,20,20,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,,919,919,919,,919,919,,,919,',
+',,,,,,,,,,,,,,,,,,919,,,919,,,919,919,,,919,,,,,,,,,,,,,,,,,,,,919,919',
+'919,919,,919,919,919,919,,,,,919,919,,,,29,29,29,919,29,919,919,919',
+'29,29,,,,29,,29,29,29,29,29,29,29,,,,,,29,29,29,29,29,29,29,,,29,,,',
+',,,29,,,29,29,29,29,29,29,29,29,29,29,29,29,,29,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,,,1027,,1027,1027,1027,1027,1027,,,,,,,,,1027,,35,35,35',
+'35,,35,35,35,35,,,,,35,35,,,,35,,1027,35,,35,35,35,868,868,868,,868',
+'1027,1027,,868,868,1027,,,868,,868,868,868,868,868,868,868,,,,,,868',
+'868,868,868,868,868,868,,,868,,,,,,,868,,,868,868,868,868,868,868,868',
+'868,,868,868,868,,868,868,,,868,,,,,,,,,,,,,,,,,,,,868,,,868,,,868,868',
+',,868,,,,,,,,,,,,,,,,,,,,868,868,868,868,,868,868,868,868,,,,,868,868',
+',,,859,859,859,868,859,868,868,868,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,,,,42,42,42,859,42,859,859,859,42,42,,,,42,,42,42,42',
+'42,42,42,42,,,,,,42,42,42,42,42,42,42,,,42,,,,,,,42,,,42,42,42,42,42',
+'42,42,42,,42,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,,,,844,844,844,45,844,45,45,45,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,844,844,,844,844,844,844,,,,,844,844,,,,843,843,843,844,843',
+'844,844,844,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,,,,,843,843,,,,,,,843,,843,843,843,59,59,59,59,59,,,,59,59,',
+',,59,,59,59,59,59,59,59,59,,,,,,59,59,59,59,59,59,59,,,59,,,,,,59,59',
+',59,59,59,59,59,59,59,59,59,,59,59,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,,,914,,914,914,914',
+'914,914,,,,,,,,,914,,71,71,71,71,,71,71,71,71,,,,,71,71,,,,,,914,71',
+',71,71,71,115,115,115,115,115,914,914,,115,115,914,,,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,,,,,115,115,,,,,,115,115,',
+'115,115,115,120,120,120,,120,,,,120,120,,,,120,,120,120,120,120,120',
+'120,120,,,,,,120,120,120,120,120,120,120,,,120,,,,,,,120,,,120,120,120',
+'120,120,120,120,120,,120,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',
+',,,122,122,122,121,122,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,,,,123,123,123,122,123,122,122,122',
+'123,123,,,,123,,123,123,123,123,123,123,123,,,,,,123,123,123,123,123',
+'123,123,,,123,,,,,,,123,,,123,123,123,123,123,123,123,123,,123,123,123',
+',123,123,123,123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123,,,123,,',
+',,,123,,,,,,,,,123,,,,,123,123,123,123,,123,123,123,123,,,,,123,123',
+',,,,,,123,,123,123,123,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,,,,825,825,825',
+'124,825,124,124,124,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,825,,825,825',
+'825,825,,,,,825,825,,,,822,822,822,825,822,825,825,825,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,,,,,822,822,,,,212,212,212',
+'822,212,822,822,822,212,212,,,,212,,212,212,212,212,212,212,212,,,,',
+',212,212,212,212,212,212,212,,,212,,,,,,,212,,,212,212,212,212,212,212',
+'212,212,,212,212,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,217,,,,,217',
+'217,,,,809,809,809,217,809,217,217,217,809,809,,,,809,,809,809,809,809',
+'809,809,809,,,,,,809,809,809,809,809,809,809,,,809,,,,,,,809,,,809,809',
+'809,809,809,809,809,809,,809,809,809,,809,809,809,809,809,,,,,,,,,,',
+',,,,,,,,,809,,,809,,,809,809,,,809,,,,,,809,,,,,,,,,809,,,,,809,809',
+'809,809,,809,809,809,809,,,,,809,809,,,,222,222,222,809,222,809,809',
+'809,222,222,,,,222,,222,222,222,222,222,222,222,,,,,,222,222,222,222',
+'222,222,222,,,222,,,,,,,222,,,222,222,222,222,222,222,222,222,,222,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,,,,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,,,,306,306,306,223,306,223,223,223',
+'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,,,991,,991',
+'991,991,991,991,,,,,,,,,991,,306,306,306,306,,306,306,306,306,,,,,306',
+'306,,,,306,,991,306,,306,306,306,688,688,688,,688,991,991,,688,688,991',
+',,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,,,,662',
+'662,662,688,662,688,688,688,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,662,,,,657,657,657,662,657,662,662,662,657',
+'657,,,,657,,657,657,657,657,657,657,657,,,,,,657,657,657,657,657,657',
+'657,,,657,,,,,,,657,,,657,657,657,657,657,657,657,657,,657,657,657,',
+'657,657,,,657,,,,,,,,,,,,,,,,,,,,657,,,657,,,657,657,,,657,,,,,,,,,',
+',,,,,,,,,,657,657,657,657,,657,657,657,657,,,,,657,657,,,,646,646,646',
+'657,646,657,657,657,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,,,,323,323,323,646,323,646,646,646,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,,,,643,643,643,323,643,323,323,323,643,643,',
+',,643,,643,643,643,643,643,643,643,,,,,,643,643,643,643,643,643,643',
+',,643,,,,,,,643,,,643,643,643,643,643,643,643,643,,643,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,,,,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,,,,330,330,330,640,330,640,640,640,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,',
+',,332,332,332,330,332,330,330,330,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,332,,,,,332,332,,,,616,616,616,332,616,332,332,332',
+'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',
+',,,615,615,615,616,615,616,616,616,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,,,,611,611,611,615,611,615,615,615',
+'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',
+',,,610,610,610,611,610,611,611,611,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,,,,609,609,609,610,609,610,610,610',
+'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,609,609,609,,,,',
+'609,609,,,,608,608,608,609,608,609,609,609,608,608,,,,608,,608,608,608',
+'608,608,608,608,,,,,,608,608,608,608,608,608,608,,,608,,,,,,,608,,,608',
+'608,608,608,608,608,608,608,608,608,608,608,,608,608,608,608,608,,,',
+',,,,,,,,,,,,,,,,608,,,608,,,608,608,,,608,,608,,608,,608,,,608,,,,,',
+'608,,,,,608,608,608,608,,608,608,608,608,,,,,608,608,,,,605,605,605',
+'608,605,608,608,608,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,605,605,604,604,604,604,604,,,,604,604',
+',,,604,,604,604,604,604,604,604,604,,,,,,604,604,604,604,604,604,604',
+',,604,,,,,,604,604,,604,604,604,604,604,604,604,604,604,,604,604,604',
+',604,604,604,604,604,,,,,,,,,,,,,,,,,,,,604,,,604,,,604,604,,,604,,604',
+',,,604,,,,,,,,,604,,,,,604,604,604,604,,604,604,604,604,,,,,604,604',
+',,,601,601,601,604,601,604,604,604,601,601,,,,601,,601,601,601,601,601',
+'601,601,,,,,,601,601,601,601,601,601,601,,,601,,,,,,,601,,,601,601,601',
+'601,601,601,601,601,601,601,601,601,,601,601,601,601,601,,,,,,,,,,,',
+',,,,,,,,601,,,601,,,601,601,,,601,,601,,601,,601,,,601,,,,,,601,,,,',
+'601,601,601,601,,601,601,601,601,,,,,601,601,,,,348,348,348,601,348',
+'601,601,601,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,348,348,,348,348,348,348',
+',,,,348,348,,,,600,600,600,348,600,348,348,348,600,600,,,,600,,600,600',
+'600,600,600,600,600,,,,,,600,600,600,600,600,600,600,,,600,,,,,,,600',
+',,600,600,600,600,600,600,600,600,,600,600,600,,600,600,600,600,600',
+',,,,,,,,,,,,,,,,,,,600,,,600,,,600,600,,,600,,,,,,600,,,,,,,,,600,,',
+',,600,600,600,600,,600,600,600,600,,,,,600,600,,,,599,599,599,600,599',
+'600,600,600,599,599,,,,599,,599,599,599,599,599,599,599,,,,,,599,599',
+'599,599,599,599,599,,,599,,,,,,,599,,,599,599,599,599,599,599,599,599',
+',599,599,599,,599,599,599,599,599,,,,,,,,,,,,,,,,,,,,599,,,599,,,599',
+'599,,,599,,599,,,,599,,,,,,,,,599,,,,,599,599,599,599,,599,599,599,599',
+',,,,599,599,,,,567,567,567,599,567,599,599,599,567,567,,,,567,,567,567',
+'567,567,567,567,567,,,,,,567,567,567,567,567,567,567,,,567,,,,,,,567',
+',,567,567,567,567,567,567,567,567,567,567,567,567,,567,567,567,567,567',
+',,,,,,,,,,,,,,,,,,,567,,,567,,,567,567,,,567,,567,,567,,567,,,567,,',
+',,,567,,,,,567,567,567,567,,567,567,567,567,,,,,567,567,,,,557,557,557',
+'567,557,567,567,567,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,557,557,557,,,,,557,557,,,,369,369,369,557,369,557,557,557',
+'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',
+',,,556,556,556,369,556,369,369,369,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,556,,,,538,538,538,556,538,556,556,556',
+'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,,,,532,532,532,538,532,538,538,538,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,,,,527,527,527,532,527,532',
+'532,532,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,,,,526,526,526,527,526,527,527,527,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,,,,523,523,523,526,523,526',
+'526,526,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,,,,385',
+'385,385,523,385,523,523,523,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,,,,517,517,517,385,517,385,385,385,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,517,517,,,,,517',
+'517,,,,515,515,515,517,515,517,517,517,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,,,515,515,,,515,,,993,,993,993,993,993,993,,,,,,,,,993',
+',515,515,515,515,,515,515,515,515,,,,,515,515,,,,,,993,515,,515,515',
+'515,507,507,507,507,507,993,993,,507,507,993,,,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,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,,,,499,499,499,501,499,501,501,501,499,499,',
+',,499,,499,499,499,499,499,499,499,,,,,,499,499,499,499,499,499,499',
+',,499,,,,,,,499,,,499,499,499,499,499,499,499,499,499,499,499,499,,499',
+'499,499,499,499,,,,,,,,,,,,,,,,,,,,499,,,499,,,499,499,,,499,,,,499',
+',499,,,499,,,,,,499,,,,,499,499,499,499,,499,499,499,499,,,,,499,499',
+',,,497,497,497,499,497,499,499,499,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,,,,460,460,460,497,460',
+'497,497,497,460,460,,,,460,,460,460,460,460,460,460,460,,,,,,460,460',
+'460,460,460,460,460,,,460,,,,,,,460,,,460,460,460,460,460,460,460,460',
+',460,460,460,,460,460,460,460,460,,,,,,,,,,,,,,,,,,,,460,,,460,,,460',
+'460,,,460,,,,,,460,,,,,,,,,460,,,,,460,460,460,460,,460,460,460,460',
+',,,,460,460,,,,459,459,459,460,459,460,460,460,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,,,,456,456,456,458,456,458,458,458,456,456,,,,456,,456,456',
+'456,456,456,456,456,,,,,,456,456,456,456,456,456,456,,,456,,,,,,,456',
+',,456,456,456,456,456,456,456,456,456,456,456,456,,456,456,456,456,456',
+',,,,,,,,,,,,,,,,,,,456,,,456,,,456,456,,,456,,456,,456,,456,,,456,,',
+',,,456,,,,,456,456,456,456,,456,456,456,456,,,,,456,456,,,,413,413,413',
+'456,413,456,456,456,413,413,,,,413,,413,413,413,413,413,413,413,,,,',
+',413,413,413,413,413,413,413,,,413,,,,,,,413,,,413,413,413,413,413,413',
+'413,413,,413,413,413,,413,413,413,413,413,,,,,,,,,,,,,,,,,,,,413,,,413',
+',,413,413,,,413,,,,,,413,,,,,,,,,413,,,,,413,413,413,413,,413,413,413',
+'413,,,,,413,413,,,,,,,413,,413,413,413,596,596,596,596,596,596,596,596',
+'596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,,,,596',
+'596,596,596,596,596,596,596,596,596,,,,,,596,596,596,596,596,596,596',
+'596,596,,,596,,,,,,,,596,596,,596,596,596,596,596,596,596,,,596,596',
+',,,596,596,596,596,,,,,,,,,,,,,,596,596,,596,596,596,596,596,596,596',
+'596,596,596,596,596,,,596,596,,,,,,,,,,,,,,596,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,404',
+',,404,404,,,,404,404,404,404,,,,,,,,,,,,,,404,404,,404,404,404,404,404',
+'404,404,404,404,404,404,404,,,404,404,,,,,,,,,,,,,,404,9,9,9,9,9,9,9',
+'9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,,,,9,9,9,9,9,9,9,9,9,9,,,,,,9,9,9',
+'9,9,9,9,9,9,,,9,,,,,,,,9,9,,9,9,9,9,9,9,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,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,728,728,728,728,728',
+'728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728',
+'728,728,,,,728,728,728,728,728,728,728,728,728,728,,,,,,728,728,728',
+'728,728,728,728,728,728,,,728,,,,,,,,728,728,,728,728,728,728,728,728',
+'728,,,728,728,,,,728,728,728,728,,,,,,,,,,,,,,728,728,,728,728,728,728',
+'728,728,728,728,728,728,728,728,528,528,728,,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,559,559,528',
+',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,603,603,559,,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,602,602,603,,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,218,218',
+'602,,218,,,,,,,,218,218,,218,218,218,218,218,218,218,,,218,218,,,,218',
+'218,218,218,,,,,,218,,,,,,,,218,218,,218,218,218,218,218,218,218,218',
+'218,218,218,218,267,267,218,,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,219,219,267,,219,,,,,,,,219,219',
+',219,219,219,219,219,219,219,,,219,219,,,,219,219,219,219,,,,,,219,',
+',,,,,,219,219,,219,219,219,219,219,219,219,219,219,219,219,219,455,455',
+'219,,455,,,,,,,,455,455,,455,455,455,455,455,455,455,,,455,455,,,,455',
+'455,455,455,,,,,,455,,,,,,,,455,455,,455,455,455,455,455,455,455,455',
+'455,455,455,455,454,454,455,,454,,,,,,,,454,454,,454,454,454,454,454',
+'454,454,,,454,454,,,,454,454,454,454,,,,,,454,,,,,,,,454,454,,454,454',
+'454,454,454,454,454,454,454,454,454,454,974,974,454,,974,,,,,,,,974',
+'974,,974,974,974,974,974,974,974,,,974,974,,,,974,974,974,974,,,,,,974',
+',,,,,,,974,974,,974,974,974,974,974,974,974,974,974,974,974,974,566',
+'566,974,,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,565,565,566,,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,973,973,565,,973,,,,,,,',
+'973,973,,973,973,973,973,973,973,973,,,973,973,,,,973,973,973,973,,',
+',,,973,,,,,,,,973,973,,973,973,973,973,973,973,973,973,973,973,973,973',
+'969,969,973,,969,,,,,,,,969,969,,969,969,969,969,969,969,969,,,969,969',
+',,,969,969,969,969,,,,,,969,,,,,,,,969,969,,969,969,969,969,969,969',
+'969,969,969,969,969,969,518,518,969,,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,519,519,518,,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,558,558,519,,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,529,529,558,,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,,805,529,805,805',
+'805,805,805,,727,,727,727,727,727,727,805,,,,,,,,727,,989,,989,989,989',
+'989,989,,,,,,805,,,989,,,,,727,805,805,805,805,,,,805,727,727,727,727',
+',,,727,989,,910,,910,910,910,910,910,989,989,989,989,,,,989,910,,912',
+',912,912,912,912,912,,726,,726,726,726,726,726,912,,,,,910,,,726,,,',
+',,910,910,910,910,,,,910,912,,,,,,,,726,912,912,912,912,,,,912,726,726',
+'726,726,,,995,726,995,995,995,995,995,,934,,934,934,934,934,934,995',
+',,,,,,,934,,936,,936,936,936,936,936,,,,,,995,,,936,,,,,934,,,995,995',
+',,,995,934,934,934,934,,,,934,936,,938,,938,938,938,938,938,,,936,936',
+',,,936,938,,940,,940,940,940,940,940,1010,,1010,1010,1010,1010,1010',
+',940,,,,,938,,1010,,668,,668,668,668,668,668,938,938,,,,938,940,,668',
+',,,,1010,,,,940,940,,,,940,,1010,1010,,,,1010,668,,546,,546,546,546',
+'546,546,668,668,668,668,,,,668,546,,803,,803,803,803,803,803,807,,807',
+'807,807,807,807,,803,,,,,546,546,807,,,,,,,546,546,546,546,,,,546,803',
+',,,,,,807,,803,803,803,803,,,,803,,807,807,,,,807' ]
+ racc_action_check = arr = ::Array.new(24631, 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 = [
+ 1920, 101, nil, 270, nil, 11209, 1358, 1126, 22816, 22688,
+ 1121, nil, 1055, 1044, 567, 1074, 768, 416, nil, -79,
+ 11471, 2620, 1126, nil, 334, nil, 232, 1423, 1533, 11733,
+ 11864, 11995, nil, 4020, 12126, 12257, nil, 1001, 841, 837,
+ 1039, 171, 12658, 12789, 521, 12920, 927, 654, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 1208, nil, 13321,
+ 13452, 13583, -8, nil, 13714, 13845, nil, nil, 13976, 14115,
+ 14246, 14377, 22944, nil, nil, nil, nil, nil, nil, nil,
+ nil, 602, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 574,
+ nil, nil, 686, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 1035, nil, 14516, nil, nil, nil, nil,
+ 14655, 14786, 14917, 15048, 15187, nil, 4580, nil, 577, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 895,
+ nil, 5000, 15580, 15711, 15842, 15973, 16104, 16235, 23362, 23484,
+ nil, nil, 16497, 16628, 5691, nil, nil, 582, 160, 223,
+ 927, 141, 823, 874, nil, 6346, 3740, 869, 6608, 6739,
+ 6870, 7001, 7132, 7263, 7394, 7525, 7656, 7787, 7918, 8049,
+ 8180, 8311, 8442, 8573, 8704, 8835, 8966, 9097, 9228, 9359,
+ nil, nil, nil, nil, 9490, nil, nil, 23423, nil, nil,
+ 859, 9752, 9883, nil, nil, nil, nil, nil, nil, nil,
+ 10014, nil, 2060, nil, 809, 805, nil, 10276, 847, 10407,
+ nil, nil, 10538, 10669, nil, nil, 268, nil, 10808, 1412,
+ 814, 778, 3040, 787, 825, 764, 16759, 2060, 977, 940,
+ 908, 805, 770, nil, 742, 697, 165, nil, nil, nil,
+ 720, 220, 657, 17422, nil, 365, 719, 658, nil, 668,
+ 17815, nil, 17946, 4440, 1349, 602, nil, 361, 360, 625,
+ 602, 349, 616, nil, nil, 250, 10, -1, 19264, 4300,
+ 2340, 121, 676, 554, 5, 40, 578, 610, 11, 639,
+ nil, nil, 467, 230, -21, nil, 436, nil, 530, 19919,
+ nil, nil, nil, 772, 771, 662, 660, 659, 607, 555,
+ 554, 442, nil, 118, nil, 20836, nil, 290, 498, 501,
+ 390, 495, -37, -27, 386, nil, nil, nil, nil, nil,
+ nil, nil, nil, 300, 22560, nil, nil, nil, nil, 294,
+ nil, nil, 268, 22293, 225, nil, nil, 208, nil, 809,
+ 105, 259, nil, nil, 1780, nil, nil, nil, nil, nil,
+ 1920, 148, nil, 64, 101, 804, 756, 1645, nil, nil,
+ nil, 464, 222, 258, nil, nil, 936, 1072, nil, nil,
+ nil, 18, nil, 290, 23606, 23545, 22162, 437, 22031, 21900,
+ 21769, 2900, 3880, -46, 1098, 353, 373, 375, 377, 4300,
+ 1485, 1596, 3460, 3040, 4160, 3180, 4020, 3320, 893, 1025,
+ 3740, 3600, 2340, 1311, nil, 1344, nil, nil, nil, nil,
+ 339, nil, nil, nil, 345, nil, nil, 21638, nil, 21507,
+ nil, 21376, nil, 215, nil, nil, nil, 21237, 1538, nil,
+ 369, 376, nil, nil, 389, 21098, 394, 20967, 23972, 24033,
+ 690, 439, nil, 20705, 412, nil, 20574, 20443, 23118, 24155,
+ 1159, 2760, 20312, 546, 554, 435, 478, nil, 20181, nil,
+ nil, 11070, nil, nil, nil, nil, 24502, 4160, 564, nil,
+ 1780, 90, 576, 599, 596, 609, 20050, 19788, 24094, 23179,
+ -19, nil, nil, 512, nil, 23789, 23728, 19657, nil, nil,
+ 213, 2200, 580, nil, -33, nil, nil, nil, 1269, nil,
+ nil, nil, 554, nil, nil, 258, nil, 324, nil, nil,
+ 544, nil, 554, nil, nil, nil, 22432, nil, 557, 19526,
+ 19395, 19133, 23301, 23240, 19002, 18863, 384, 614, 18732, 18601,
+ 18470, 18339, 625, nil, nil, 18208, 18077, 637, nil, nil,
+ nil, 382, 409, 0, 798, 611, 613, 739, nil, 723,
+ 130, nil, nil, 653, -50, 766, nil, 644, nil, 694,
+ 17684, nil, nil, 17553, nil, -112, 17291, 670, nil, 678,
+ 136, 312, 726, 256, 904, 731, 689, 17160, nil, 764,
+ 24, 819, 17029, nil, nil, nil, 388, nil, 24463, nil,
+ 711, 713, nil, 718, 720, 724, nil, nil, nil, nil,
+ nil, nil, nil, nil, 715, 1135, nil, nil, 16898, nil,
+ nil, nil, 811, nil, nil, nil, 827, nil, nil, 828,
+ 374, nil, 869, nil, nil, nil, nil, nil, 878, nil,
+ 6, 765, 41, -18, 68, 135, 2900, 292, 1040, nil,
+ 794, 3600, 10939, nil, 923, 3460, 24306, 24225, 23057, nil,
+ nil, nil, nil, nil, nil, 2760, nil, nil, nil, nil,
+ nil, nil, nil, 806, 10145, 824, -85, 331, 110, 354,
+ nil, 2200, 9621, nil, 824, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 6477, 6215, 6084, 5953, 292,
+ 5822, nil, -59, nil, nil, 870, nil, nil, 1308, nil,
+ 3180, nil, nil, nil, nil, 853, 183, nil, nil, 979,
+ nil, 2620, 867, 929, nil, nil, nil, -9, 891, 890,
+ nil, nil, 534, 24519, nil, 24217, nil, 24526, nil, 16366,
+ nil, 1005, nil, 889, 355, 895, nil, nil, nil, nil,
+ 1018, nil, 15449, 1022, nil, 15318, 3880, 39, 1028, nil,
+ 1031, 141, 3320, nil, 1042, 922, -50, nil, 926, 922,
+ 142, nil, nil, 13182, 13051, 2480, 5420, nil, 931, 932,
+ nil, 941, 942, 943, nil, 974, 959, 955, 949, 12527,
+ nil, nil, nil, nil, 4720, nil, nil, 76, 12396, nil,
+ nil, nil, nil, 1005, 963, nil, nil, nil, 973, 977,
+ nil, 983, 985, nil, 989, nil, nil, 996, 1140, 999,
+ 1201, nil, nil, -10, nil, nil, 256, nil, nil, nil,
+ 1126, nil, nil, nil, 1047, nil, nil, 1021, nil, nil,
+ 24281, nil, 24298, nil, 14424, nil, nil, 1028, 1050, 11602,
+ 694, 1097, nil, 2480, 79, 33, 766, 1102, 36, nil,
+ 5560, 5280, nil, nil, 24366, nil, 24383, nil, 24422, nil,
+ 24439, nil, nil, nil, nil, 320, 865, 1025, 5140, nil,
+ nil, nil, nil, 4860, 1028, nil, nil, 1030, 1034, 1036,
+ 1038, nil, 1040, nil, 353, nil, nil, nil, 190, 23911,
+ nil, 1169, 11340, 23850, 23667, 35, 1093, 1201, 1078, 1079,
+ 1080, 1085, 1086, 1389, 1093, 1427, 324, 1218, nil, 24242,
+ nil, 16806, nil, 21145, nil, 24358, nil, nil, nil, 914,
+ 1140, 1141, nil, 1101, 32, 34, 109, 69, nil, nil,
+ 24446, nil, nil, nil, nil, 1279, -101, nil, nil, -84,
+ -80, -71, -38, nil, 26, -11, 42, 12304, nil, nil,
+ nil, nil, nil, 72, nil ]
+
+racc_action_default = [
+ -3, -608, -1, -594, -4, -608, -7, -608, -608, -608,
+ -608, -30, -608, -608, -34, -608, -608, -287, -46, -596,
+ -608, -51, -55, -56, -57, -61, -264, -264, -264, -300,
+ -330, -331, -73, -12, -77, -85, -87, -608, -498, -499,
+ -608, -608, -608, -608, -223, -608, -596, -237, -278, -279,
+ -280, -281, -282, -283, -284, -285, -286, -582, -289, -293,
+ -607, -572, -308, -310, -608, -608, -53, -53, -594, -608,
+ -608, -608, -608, -332, -333, -335, -336, -337, -439, -440,
+ -441, -442, -443, -464, -446, -447, -466, -468, -451, -456,
+ -460, -462, -478, -464, -480, -482, -483, -484, -485, -580,
+ -487, -488, -581, -490, -491, -492, -493, -494, -495, -496,
+ -497, -502, -503, -608, -2, -595, -603, -604, -605, -6,
+ -608, -608, -608, -608, -608, -8, -3, -18, -608, -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, -608, -608, -608, -608, -608, -254, -608, -608,
+ -592, -593, -608, -608, -596, -597, -50, -608, -498, -499,
+ -608, -287, -608, -608, -229, -608, -12, -608, -608, -608,
+ -608, -608, -608, -608, -608, -608, -608, -608, -608, -608,
+ -608, -608, -608, -608, -608, -608, -608, -608, -608, -608,
+ -238, -239, -240, -241, -608, -403, -405, -608, -590, -591,
+ -62, -254, -608, -307, -409, -418, -420, -68, -415, -69,
+ -596, -70, -244, -259, -268, -268, -263, -608, -269, -608,
+ -464, -574, -608, -608, -71, -72, -594, -13, -608, -16,
+ -608, -75, -12, -596, -608, -78, -81, -12, -93, -94,
+ -608, -608, -101, -300, -303, -596, -608, -330, -331, -334,
+ -416, -608, -83, -608, -89, -297, -481, -608, -217, -218,
+ -608, -230, -608, -12, -291, -596, -245, -600, -600, -608,
+ -608, -600, -608, -309, -394, -52, -608, -608, -608, -12,
+ -12, -594, -608, -595, -498, -499, -608, -608, -287, -608,
+ -347, -348, -111, -112, -608, -114, -608, -287, -506, -608,
+ -498, -499, -323, -116, -117, -158, -159, -160, -176, -181,
+ -188, -191, -325, -608, -570, -608, -444, -608, -608, -608,
+ -608, -608, -608, -608, -608, 1035, -5, -606, -24, -25,
+ -26, -27, -28, -608, -608, -20, -21, -22, -126, -608,
+ -31, -33, -274, -608, -608, -273, -32, -608, -35, -608,
+ -287, -43, -45, -199, -249, -269, -47, -48, -36, -200,
+ -249, -596, -255, -268, -268, -583, -584, -264, -413, -585,
+ -586, -584, -583, -264, -412, -414, -585, -586, -42, -207,
+ -49, -596, -306, -608, -608, -608, -254, -297, -608, -608,
+ -608, -208, -209, -210, -211, -212, -213, -214, -215, -219,
+ -220, -221, -222, -224, -225, -226, -227, -228, -231, -232,
+ -233, -234, -596, -242, -424, -264, -583, -584, -59, -63,
+ -596, -265, -422, -424, -596, -302, -260, -608, -261, -608,
+ -266, -608, -270, -608, -577, -579, -11, -595, -15, -17,
+ -596, -74, -295, -90, -79, -608, -596, -254, -608, -608,
+ -100, -608, -481, -608, -86, -91, -608, -608, -608, -608,
+ -243, -235, -608, -431, -608, -596, -608, -246, -602, -601,
+ -248, -602, -298, -299, -573, -311, -530, -12, -338, -339,
+ -12, -608, -608, -608, -608, -608, -608, -254, -608, -608,
+ -297, -53, -111, -112, -113, -608, -608, -254, -319, -504,
+ -608, -12, -508, -327, -596, -445, -465, -470, -608, -472,
+ -448, -467, -608, -469, -450, -608, -453, -608, -455, -458,
+ -608, -459, -608, -479, -9, -19, -608, -29, -277, -608,
+ -608, -254, -608, -608, -608, -608, -417, -608, -256, -258,
+ -608, -608, -64, -253, -410, -608, -608, -66, -411, -305,
+ -598, -583, -584, -583, -584, -596, -608, -608, -425, -58,
+ -406, -422, -251, -608, -383, -608, -301, -268, -267, -271,
+ -608, -575, -576, -608, -14, -76, -608, -82, -88, -596,
+ -583, -584, -252, -587, -99, -608, -84, -608, -206, -216,
+ -596, -607, -607, -290, -292, -294, -600, -395, -530, -398,
+ -569, -569, -513, -515, -515, -515, -529, -531, -532, -533,
+ -534, -535, -536, -537, -538, -608, -540, -542, -544, -549,
+ -551, -552, -554, -559, -561, -562, -564, -565, -566, -608,
+ -607, -340, -607, -54, -341, -342, -314, -315, -608, -317,
+ -608, -596, -583, -584, -587, -296, -12, -111, -112, -115,
+ -596, -12, -608, -321, -608, -12, -530, -530, -608, -571,
+ -471, -474, -475, -476, -477, -12, -449, -452, -454, -457,
+ -461, -463, -127, -275, -608, -596, -583, -584, -584, -583,
+ -44, -250, -608, -599, -268, -38, -202, -39, -203, -65,
+ -40, -205, -41, -204, -67, -608, -608, -608, -608, -417,
+ -608, -404, -383, -408, -407, -608, -419, -384, -596, -386,
+ -12, -421, -262, -272, -578, -80, -417, -92, -304, -607,
+ -345, -12, -432, -607, -433, -434, -247, -608, -596, -608,
+ -511, -512, -608, -608, -522, -608, -525, -608, -527, -608,
+ -349, -608, -351, -353, -360, -596, -543, -553, -563, -567,
+ -608, -343, -608, -608, -316, -608, -12, -417, -608, -417,
+ -608, -608, -12, -324, -608, -596, -608, -328, -608, -276,
+ -417, -37, -201, -257, -608, -236, -12, -60, -569, -569,
+ -365, -367, -367, -367, -382, -608, -596, -388, -538, -546,
+ -547, -557, -423, -10, -12, -438, -346, -608, -608, -436,
+ -396, -399, -401, -608, -569, -550, -568, -514, -515, -515,
+ -541, -515, -515, -560, -515, -538, -555, -596, -608, -358,
+ -608, -539, -312, -608, -313, -271, -607, -318, -320, -505,
+ -608, -326, -507, -509, -508, -473, -426, -608, -363, -364,
+ -373, -375, -608, -378, -608, -380, -385, -608, -608, -608,
+ -545, -608, -437, -12, -498, -499, -608, -608, -287, -435,
+ -12, -12, -397, -510, -608, -518, -608, -520, -608, -523,
+ -608, -526, -528, -350, -352, -356, -608, -361, -12, -427,
+ -428, -429, -322, -12, -569, -548, -366, -367, -367, -367,
+ -367, -558, -367, -387, -596, -390, -392, -393, -556, -608,
+ -297, -431, -254, -608, -608, -297, -608, -608, -515, -515,
+ -515, -515, -354, -608, -359, -608, -607, -608, -362, -608,
+ -370, -608, -372, -608, -376, -608, -379, -381, -389, -608,
+ -296, -587, -430, -596, -583, -584, -587, -296, -400, -402,
+ -608, -516, -519, -521, -524, -608, -357, -344, -329, -367,
+ -367, -367, -367, -391, -417, -515, -355, -608, -368, -371,
+ -374, -377, -517, -367, -369 ]
+
+clist = [
+'223,382,534,29,266,274,278,431,29,319,319,343,267,118,336,114,283,283',
+'283,555,218,322,498,29,305,125,725,332,268,137,137,661,29,29,29,641',
+'29,6,132,132,127,210,6,820,319,319,319,115,346,347,547,550,351,606,135',
+'135,349,350,428,415,416,490,29,638,448,638,326,29,29,524,226,29,284',
+'284,284,800,801,641,118,489,352,303,537,540,345,345,544,564,345,944',
+'387,789,780,883,633,880,334,270,277,279,394,119,132,337,398,399,400',
+'401,437,443,852,281,294,295,967,2,961,1,29,815,585,587,429,29,29,29',
+'29,29,449,29,301,965,823,335,285,285,285,627,368,372,345,345,345,345',
+'535,641,635,333,854,452,383,568,6,359,545,856,340,485,855,384,630,402',
+'339,6,964,338,341,667,870,546,797,498,330,596,638,638,930,931,873,484',
+'492,493,772,949,793,867,944,386,388,669,389,390,631,961,391,967,392',
+'438,581,583,586,586,880,393,283,495,730,735,722,703,404,396,1023,878',
+'29,29,29,29,29,29,29,708,883,411,361,29,29,29,511,209,846,454,880,775',
+'426,427,917,875,955,29,724,403,957,450,451,887,625,769,947,447,644,344',
+'863,908,909,414,414,721,283,283,26,647,410,421,832,26,421,283,571,656',
+'572,786,421,728,29,29,904,,,933,26,319,,29,,676,,880,719,26,26,26,514',
+'26,,274,521,503,319,278,,29,,,984,29,118,649,506,,29,798,,525,518,284',
+'536,,509,26,,,304,284,26,26,950,,26,1017,,528,551,827,422,508,29,422',
+',,507,1016,829,422,437,443,522,711,,,510,29,29,29,491,516,,720,953,988',
+'558,118,494,554,449,,429,840,345,835,836,573,29,1026,782,26,619,285',
+',641,26,26,26,26,26,285,26,268,29,570,830,745,785,,834,738,,738,,301',
+',,,,301,574,,676,652,638,,796,607,,826,632,613,,652,636,,759,618,602',
+',137,764,,,,,,658,438,132,645,595,,,,,648,,283,,,,,652,,135,,755,757',
+',,652,760,762,29,664,,,626,613,676,676,,,1002,,26,26,26,26,26,26,26',
+',,,,26,26,26,447,,,,,319,782,437,443,,,26,438,319,729,409,900,,,283',
+'525,,438,612,794,29,,,525,617,906,756,758,,,29,761,763,,,304,,,,,853',
+'26,26,,684,29,,438,,,26,,,,283,438,,,,447,29,716,660,29,283,879,629',
+'881,26,447,29,704,26,951,,,,26,,,29,923,,,29,,,,,774,723,438,,,,788',
+',,283,447,,304,,26,841,447,304,948,,710,,,637,29,29,,607,29,26,26,26',
+'773,,29,29,,795,137,29,29,,319,987,,,1024,132,,742,26,607,613,319,447',
+'618,,525,,552,553,,750,135,666,,26,,787,,,421,,,,,,684,837,842,,421',
+'421,958,,959,421,421,,,,,756,758,763,761,,,,,,,,859,,,,978,,,,,,607',
+',,,,,,,,607,,,,414,831,,,,,,,754,684,684,26,,,29,,422,,,29,29,607,,29',
+',,422,422,,,,422,422,29,,891,1019,345,865,,,,869,,,842,,,,,29,,,132',
+'857,902,,1003,,,,858,26,,,,,,,,,,26,,857,,,,29,,,,,,,,684,26,684,29',
+'810,,,,,,,421,,,,893,26,,,26,859,943,,859,,859,26,859,,,,,,,29,850,26',
+',29,,26,,,319,29,700,857,,702,,899,345,319,,,903,876,16,29,876,,,16',
+',,,,,,26,26,,652,26,,,29,227,,26,26,,422,,26,26,227,227,227,,16,310',
+'310,,,,,,,,,,859,319,859,,859,858,859,858,,,,,,,16,911,913,915,,227',
+'227,,,227,356,366,366,13,810,684,,889,13,29,,,,973,859,,29,29,,,,,,',
+',,,,998,,,,,,29,438,13,,876,29,,850,283,850,,850,16,,849,,,227,227,227',
+'227,16,,16,29,26,858,,13,,26,26,,607,26,874,,,360,,,,,,26,,,810,447',
+'810,,,,447,828,,,,,,,26,,990,992,994,996,,997,804,806,808,,838,,,,,',
+',,,,,13,,850,,850,26,850,,850,13,,13,,,,,26,,,,982,810,,,16,227,419',
+'227,227,419,227,,,,862,419,227,227,,,850,1028,1029,1030,1031,866,,26',
+',16,,26,851,,,1034,,26,810,954,810,,849,,849,,849,,,,,26,,,,,,,,882',
+'896,884,,,227,227,,,,26,810,,,227,,,13,,417,,,417,,,,,,417,,,,16,,,',
+'16,,,922,310,16,13,,,,,,,,,,,,,,,310,,,,,849,,849,,849,16,849,26,,,',
+',,,26,26,,,,,227,16,16,,,,,,,,39,,26,,,39,971,26,849,,,227,13,976,977',
+'960,13,962,,935,937,13,939,941,,942,26,227,,,,986,,39,309,309,,979,',
+'980,,981,,,,,,13,,,,,,,,,,,,39,,,,13,13,,,,,355,371,371,371,,,,38,,',
+',,38,,,,,,,,,,,1020,,1021,,1022,,227,,,,,,,,,,,38,308,308,,1025,,39',
+',,,1011,1012,1013,1014,,39,,39,,,,1033,,,,,38,,,,,,,,,,354,370,370,370',
+'16,,,,,,,,310,,227,,,,,,310,1032,,,,,,,,227,,,,,,,,,,,,,,,16,,38,16',
+',,,,,,227,38,,38,,,,,,,227,,39,,16,,,,,,,,13,,,,,,,,,,,,,,,39,,,,,,419',
+'227,,,16,,,,,,419,419,,,,419,419,,,13,,,13,,,,,,,,,,,,,,,,,,,,,13,,38',
+'310,,,,,,,,,,39,310,,,39,,,,309,39,,,,,38,,417,,,,13,,,,,309,417,417',
+',,,417,417,,,39,,,,,,,,,,,,,,,,39,39,,,,,,,,16,,,,,16,227,,,16,,,,,',
+',38,,,16,38,,,,308,38,,,,,,,,,,,419,,,,,308,,,,342,,,,,,38,,,,,,,,,',
+',,,16,,,38,38,,,,13,,,16,,13,,,,13,,,,,,,,,,13,,,,,,,,,,,,,,,227,,417',
+',16,,,,,,16,,,,,,,,,,,,,,16,,,,,,13,,,,17,,,920,,17,,13,16,39,,,926',
+',,,,309,,,,,,,,309,,,,,,,,17,312,312,,,,,,,13,,,,,,13,39,,,39,,,,412',
+'425,,17,,,13,968,,,,16,,358,367,367,,39,16,16,,,,,13,,,,929,38,,,,,',
+',16,308,,,,16,,,,308,,,,,39,,,,,,,,,17,227,,,,,,,,17,38,17,,38,,,500',
+',502,,,504,505,,13,,,,,,,13,13,309,38,,,,,,,,,,309,,15,,,13,,15,,,13',
+',,,,,,,,,,,,38,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,17,,420,,,420,,39,,15,',
+'420,39,308,,,39,,,,,,,,308,17,39,,,,,,,,,,,,,,,,,,,,598,,,,,,,,,,,,',
+',,,,,,15,,,,,,39,,,15,,15,,,,,,39,38,,,,17,38,,,17,38,,,312,17,,,,,',
+'38,,,,,,,,,,312,,,,,39,,,,,17,39,,,,,,,639,,342,,642,,,39,17,17,,,,',
+',,,38,,,371,,,,,39,,,38,925,,15,,15,,,15,,,,,639,15,,342,,,,,,,,,,,',
+'15,,,425,,,,38,,,,,,38,,,,,,,,,,,371,,,38,39,,,,,,,39,39,,,,370,,,,',
+'38,743,,,924,,,,39,,639,342,,39,,,,15,,,,15,,,,,15,,,,,,,,,,,,,,,,783',
+',,784,,,,,,,15,,,370,,,,38,,,,,792,17,38,38,15,15,,,,312,,,,,,,,312',
+',,38,,,,,38,816,,,,,,,,,,,,,,,17,,,17,,,,,,,,,,,,,,,,,,,,,17,,,,,,,734',
+',,,,,,,,,839,,,,,,,,,,,,420,,,,17,,,,,,420,420,,,,420,420,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,312,,,,,,,886,,,,312,,,,,,,,,,,15,895,,,,,,,,,,,',
+',,,,,,342,,,,,,,,,,,,,,,,,,,,,15,,,15,,,,,17,,,,,17,,,,17,,,,,,,15,',
+',17,,,,,,,,,,,,,,,,,420,,,,,,,,,15,,,,15,,,,,,15,15,,,,15,15,,,17,,',
+',,,,,,,,17,,,,,,,,,,,,,,,,,234,,,,,,,,,282,282,282,,,,,,,17,,,,328,329',
+'17,331,,,,,,,,,,,,,17,,282,282,,,,,,,,,,367,,,,,17,,,,928,,,,,,,,,15',
+',,,,15,,,,15,,,,,,,,,,15,,,,,,,,,,,,,,,,,15,,,,,,367,,,,17,,,,,,,17',
+'17,,,,,,,,,,15,,,,,,,17,,,,15,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,15',
+',,,,,15,,,,,,,282,424,,,430,282,,15,,,430,,,,,,,,,,,,,234,,15,461,462',
+'463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479',
+'480,481,482,,,,,483,,,,,,,282,282,,,,,,,,282,,,,,,,282,,282,,,282,282',
+',,15,,,,,,,15,15,,,,,,,,,,,,,,,,,15,,,,,15,,,,530,,531,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,282',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,282,,430,430,430,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,282,,282,,282,,,,,,,,,,,,,,,,282,,,,,,,,',
+'430,659,,,,,,,,,,,282,,,282,,,,,,,,,,,,,,,282,282,,,,,,,,,,282,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,282,430,282,,,,751,,,282,282,430,430,,,,430',
+'430,,,,,,,,,,,,,,,,,,,,,,,,282,,,282,,,,,,,,,,,,,,,,,,,282,,,,,,,,,',
+',,,,,,,,,,,,,,,,282,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,282,,,,,,,,430,,,,,,,,,,,,,430,430,430,430,,845,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,282,,,,,,,,,,,,,,,,282,,,,,,,,,,,,,,,,,,282',
+'430,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,282' ]
+ racc_goto_table = arr = ::Array.new(3465, 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,63,9,50,144,81,81,30,50,73,73,96,42,105,77,4,39,39,39,101,32,57,83',
+'50,56,8,107,34,32,68,68,11,50,50,50,188,50,7,64,64,16,16,7,100,73,73',
+'73,6,18,18,99,99,18,31,67,67,36,36,27,23,23,30,50,84,27,84,71,50,50',
+'58,21,50,78,78,78,126,126,188,105,45,4,53,79,79,25,25,79,61,25,119,161',
+'12,133,184,46,179,7,44,44,44,161,5,64,78,18,18,18,18,43,43,131,51,51',
+'51,138,2,185,1,50,121,165,165,70,50,50,50,50,50,70,50,52,137,12,111',
+'80,80,80,147,62,62,25,25,25,25,110,188,147,109,123,54,108,104,7,102',
+'98,129,95,43,135,94,82,7,76,7,136,80,80,139,140,141,142,83,74,69,84',
+'84,145,146,135,148,150,151,154,155,156,157,119,160,162,143,163,164,48',
+'185,167,138,168,81,166,166,166,166,179,169,39,54,170,171,172,37,26,5',
+'137,177,50,50,50,50,50,50,50,101,184,24,20,50,50,50,54,17,133,32,179',
+'46,25,25,135,181,182,50,9,2,131,25,25,121,30,31,122,64,15,112,13,126',
+'126,78,78,113,39,39,47,58,21,21,114,47,21,39,115,58,116,31,21,117,50',
+'50,118,,,126,47,73,,50,,173,,179,61,47,47,47,57,47,,81,34,161,73,81',
+',50,,,122,50,105,30,4,,50,143,,56,32,78,34,,8,47,,,10,78,47,47,12,,47',
+'100,,32,18,31,19,7,50,19,,,6,122,31,19,43,43,71,30,,,53,50,50,50,51',
+'53,,30,107,126,32,105,51,4,70,,70,31,25,143,143,42,50,122,83,47,54,80',
+',188,47,47,47,47,47,80,47,32,50,25,9,30,58,,9,166,,166,,52,,,,,52,25',
+',173,43,84,,79,34,,99,54,81,,43,54,,45,81,32,,68,45,,,,,,70,81,64,54',
+'16,,,,,54,,39,,,,,43,,67,,27,27,,,43,27,27,50,54,,,34,81,173,173,,,11',
+',47,47,47,47,47,47,47,,,,,47,47,47,64,,,,,73,83,43,43,,,47,81,73,54',
+'10,9,,,39,56,,81,44,23,50,,,56,44,9,70,70,,,50,70,70,,,10,,,,,132,47',
+'47,,178,50,,81,,,47,,,,39,81,,,,64,50,36,25,50,39,132,44,132,47,64,50',
+'105,47,101,,,,47,,,50,99,,,50,,,,,96,105,81,,,,54,,,39,64,,10,,47,27',
+'64,10,99,,78,,,80,50,50,,34,50,47,47,47,144,,50,50,,77,68,50,50,,73',
+'9,,,31,64,,16,47,34,81,73,64,81,,56,,10,10,,7,67,80,,47,,56,,,21,,,',
+',,178,63,70,,21,21,132,,132,21,21,,,,,70,70,70,70,,,,,,,,180,,,,132',
+',,,,,34,,,,,,,,,34,,,,78,18,,,,,,,80,178,178,47,,,50,,19,,,50,50,34',
+',50,,,19,19,,,,19,19,50,,54,132,25,77,,,,77,,,70,,,,,50,,,64,34,54,',
+'30,,,,178,47,,,,,,,,,,47,,34,,,,50,,,,,,,,178,47,178,50,120,,,,,,,21',
+',,,18,47,,,47,180,54,,180,,180,47,180,,,,,,,50,127,47,,50,,47,,,73,50',
+'10,34,,10,,105,25,73,,,105,127,29,50,127,,,29,,,,,,,47,47,,43,47,,,50',
+'29,,47,47,,19,,47,47,29,29,29,,29,29,29,,,,,,,,,,180,73,180,,180,178',
+'180,178,,,,,,,29,128,128,128,,29,29,,,29,29,29,29,22,120,178,,120,22',
+'50,,,,32,180,,50,50,,,,,,,,,,,34,,,,,,50,81,22,,127,50,,127,39,127,',
+'127,29,,125,,,29,29,29,29,29,,29,50,47,178,,22,,47,47,,34,47,125,,,22',
+',,,,,47,,,120,64,120,,,,64,10,,,,,,,47,,128,128,128,128,,128,176,176',
+'176,,10,,,,,,,,,,,22,,127,,127,47,127,,127,22,,22,,,,,47,,,,120,120',
+',,29,29,29,29,29,29,29,,,,10,29,29,29,,,127,128,128,128,128,10,,47,',
+'29,,47,130,,,128,,47,120,125,120,,125,,125,,125,,,,,47,,,,,,,,130,10',
+'130,,,29,29,,,,47,120,,,29,,,22,,22,,,22,,,,,,22,,,,29,,,,29,,,10,29',
+'29,22,,,,,,,,,,,,,,,29,,,,,125,,125,,125,29,125,47,,,,,,,47,47,,,,,29',
+'29,29,,,,,,,,60,,47,,,60,10,47,125,,,29,22,10,10,130,22,130,,176,176',
+'22,176,176,,176,47,29,,,,10,,60,60,60,,130,,130,,130,,,,,,22,,,,,,,',
+',,,,60,,,,22,22,,,,,60,60,60,60,,,,59,,,,,59,,,,,,,,,,,130,,130,,130',
+',29,,,,,,,,,,,59,59,59,,130,,60,,,,176,176,176,176,,60,,60,,,,130,,',
+',,59,,,,,,,,,,59,59,59,59,29,,,,,,,,29,,29,,,,,,29,176,,,,,,,,29,,,',
+',,,,,,,,,,,29,,59,29,,,,,,,29,59,,59,,,,,,,29,,60,,29,,,,,,,,22,,,,',
+',,,,,,,,,,60,,,,,,29,29,,,29,,,,,,29,29,,,,29,29,,,22,,,22,,,,,,,,,',
+',,,,,,,,,,,22,,59,29,,,,,,,,,,60,29,,,60,,,,60,60,,,,,59,,22,,,,22,',
+',,,60,22,22,,,,22,22,,,60,,,,,,,,,,,,,,,,60,60,,,,,,,,29,,,,,29,29,',
+',29,,,,,,,59,,,29,59,,,,59,59,,,,,,,,,,,29,,,,,59,,,,75,,,,,,59,,,,',
+',,,,,,,,29,,,59,59,,,,22,,,29,,22,,,,22,,,,,,,,,,22,,,,,,,,,,,,,,,29',
+',22,,29,,,,,,29,,,,,,,,,,,,,,29,,,,,,22,,,,33,,,29,,33,,22,29,60,,,29',
+',,,,60,,,,,,,,60,,,,,,,,33,33,33,,,,,,,22,,,,,,22,60,,,60,,,,75,75,',
+'33,,,22,29,,,,29,,33,33,33,,60,29,29,,,,,22,,,,22,59,,,,,,,29,59,,,',
+'29,,,,59,,,,,60,,,,,,,,,33,29,,,,,,,,33,59,33,,59,,,75,,75,,,75,75,',
+'22,,,,,,,22,22,60,59,,,,,,,,,,60,,28,,,22,,28,,,22,,,,,,,,,,,,,59,,',
+',,,,,,,,,28,,,,,,,,,,,,,,,,,33,,33,,,33,,60,,28,,33,60,59,,,60,,,,,',
+',,59,33,60,,,,,,,,,,,,,,,,,,,,75,,,,,,,,,,,,,,,,,,,28,,,,,,60,,,28,',
+'28,,,,,,60,59,,,,33,59,,,33,59,,,33,33,,,,,,59,,,,,,,,,,33,,,,,60,,',
+',,33,60,,,,,,,75,,75,,75,,,60,33,33,,,,,,,,59,,,60,,,,,60,,,59,60,,28',
+',28,,,28,,,,,75,28,,75,,,,,,,,,,,,28,,,75,,,,59,,,,,,59,,,,,,,,,,,60',
+',,59,60,,,,,,,60,60,,,,59,,,,,59,75,,,59,,,,60,,75,75,,60,,,,28,,,,28',
+',,,,28,,,,,,,,,,,,,,,,75,,,75,,,,,,,28,,,59,,,,59,,,,,75,33,59,59,28',
+'28,,,,33,,,,,,,,33,,,59,,,,,59,75,,,,,,,,,,,,,,,33,,,33,,,,,,,,,,,,',
+',,,,,,,,33,,,,,,,33,,,,,,,,,,75,,,,,,,,,,,,33,,,,33,,,,,,33,33,,,,33',
+'33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,33,,,,,,,75,,,,33,,,,,,,,,,,28,75,,',
+',,,,,,,,,,,,,,,75,,,,,,,,,,,,,,,,,,,,,28,,,28,,,,,33,,,,,33,,,,33,,',
+',,,,28,,,33,,,,,,,,,,,,,,,,,33,,,,,,,,,28,,,,28,,,,,,28,28,,,,28,28',
+',,33,,,,,,,,,,,33,,,,,,,,,,,,,,,,,35,,,,,,,,,35,35,35,,,,,,,33,,,,35',
+'35,33,35,,,,,,,,,,,,,33,,35,35,,,,,,,,,,33,,,,,33,,,,33,,,,,,,,,28,',
+',,,28,,,,28,,,,,,,,,,28,,,,,,,,,,,,,,,,,28,,,,,,33,,,,33,,,,,,,33,33',
+',,,,,,,,,28,,,,,,,33,,,,28,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,,',
+',,,28,,,,,,,35,35,,,35,35,,28,,,35,,,,,,,,,,,,,35,,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,,,28,,,,,,,28,28,,,,,,,,,,,,,,,,,28,',
+',,,28,,,,35,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,35,,35,35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,,35,,,',
+',,,,,,,,,,,,35,,,,,,,,,35,35,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,35,35,',
+',,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,35,,,,35,,,35,35,35',
+'35,,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,35,,,,',
+',,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,35,,,,,,,,35,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,35,35,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ]
+ racc_goto_check = arr = ::Array.new(3465, 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, 117, 115, nil, 12, 96, 44, 37, 18, -331,
+ 289, -502, -570, -537, nil, -257, 32, 220, -16, 121,
+ 155, 50, 920, -153, 11, 20, 83, -158, 1865, 848,
+ -210, -378, 4, 1704, -19, 2492, -10, -342, nil, -13,
+ nil, nil, -12, -110, 71, -191, -398, 260, -296, nil,
+ 3, 82, 97, 48, -75, nil, -10, -14, -254, 1282,
+ 1206, -277, 68, -71, 30, nil, nil, 46, 21, -235,
+ -94, 25, nil, -25, 128, 1548, 102, -46, 43, -255,
+ 105, -21, -325, -263, -434, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 87, 95, -51, nil, -190, -296,
+ -657, -333, 84, nil, -217, 10, nil, -546, 78, 89,
+ -190, 74, 188, -311, -459, -104, -112, -300, -561, -799,
+ 110, -566, -642, -630, nil, 187, -595, 48, 57, -623,
+ 309, -668, -248, -542, nil, -620, -754, -787, -804, -379,
+ -629, -175, -497, -357, -18, -695, -695, -347, -86, nil,
+ -95, -95, nil, nil, -446, -713, -478, -608, nil, nil,
+ 106, 7, 102, 103, 103, -270, -190, 105, 106, 112,
+ -372, -372, -361, -261, nil, nil, 347, -590, -12, -708,
+ -96, -562, -669, nil, -712, -796, nil, nil, -464 ]
+
+racc_goto_default = [
+ nil, nil, nil, 3, nil, 4, 353, 299, nil, nil,
+ 533, nil, 821, nil, 296, 297, nil, nil, nil, 11,
+ 12, 18, 232, nil, nil, 14, nil, 418, 233, 327,
+ nil, nil, 566, 231, 453, 21, nil, nil, 348, 22,
+ 23, 24, nil, 655, nil, nil, nil, 316, nil, 25,
+ 313, 432, 32, nil, nil, 34, 37, 36, nil, 228,
+ 229, 365, nil, 134, 440, 133, 136, 79, 80, nil,
+ 423, 94, 44, 47, 264, 288, nil, 790, 433, nil,
+ 434, 445, 614, 496, 286, 272, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, nil, 273, 62, nil, nil,
+ nil, nil, nil, 70, nil, 548, 71, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 812,
+ 683, nil, 813, 956, 848, 671, nil, 672, nil, nil,
+ 673, nil, 675, nil, 777, nil, nil, nil, 681, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 444,
+ nil, nil, 634, 628, nil, nil, nil, nil, 78, 81,
+ 82, nil, nil, nil, nil, nil, 576, nil, nil, nil,
+ nil, nil, nil, 877, 727, 670, nil, 674, 885, 686,
+ 688, 689, 860, 692, 693, 861, 696, 699, 291 ]
+
+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, 254, :_reduce_289,
+ 4, 218, :_reduce_290,
+ 0, 255, :_reduce_291,
+ 4, 218, :_reduce_292,
+ 0, 256, :_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,
+ 0, 257, :_reduce_310,
+ 3, 218, :_reduce_311,
+ 6, 218, :_reduce_312,
+ 6, 218, :_reduce_313,
+ 4, 218, :_reduce_314,
+ 4, 218, :_reduce_315,
+ 5, 218, :_reduce_316,
+ 4, 218, :_reduce_317,
+ 6, 218, :_reduce_318,
+ 0, 258, :_reduce_319,
+ 6, 218, :_reduce_320,
+ 0, 259, :_reduce_321,
+ 7, 218, :_reduce_322,
+ 0, 260, :_reduce_323,
+ 5, 218, :_reduce_324,
+ 0, 261, :_reduce_325,
+ 6, 218, :_reduce_326,
+ 0, 262, :_reduce_327,
+ 0, 263, :_reduce_328,
+ 9, 218, :_reduce_329,
+ 1, 218, :_reduce_330,
+ 1, 218, :_reduce_331,
+ 1, 218, :_reduce_332,
+ 1, 218, :_reduce_333,
+ 1, 174, :_reduce_none,
+ 1, 248, :_reduce_335,
+ 1, 251, :_reduce_336,
+ 1, 195, :_reduce_337,
+ 1, 244, :_reduce_none,
+ 1, 244, :_reduce_none,
+ 2, 244, :_reduce_340,
+ 1, 182, :_reduce_none,
+ 1, 182, :_reduce_none,
+ 1, 245, :_reduce_none,
+ 5, 245, :_reduce_344,
+ 1, 157, :_reduce_none,
+ 2, 157, :_reduce_346,
+ 1, 247, :_reduce_none,
+ 1, 247, :_reduce_none,
+ 1, 264, :_reduce_349,
+ 3, 264, :_reduce_350,
+ 1, 267, :_reduce_351,
+ 3, 267, :_reduce_352,
+ 1, 266, :_reduce_none,
+ 4, 266, :_reduce_354,
+ 6, 266, :_reduce_355,
+ 3, 266, :_reduce_356,
+ 5, 266, :_reduce_357,
+ 2, 266, :_reduce_358,
+ 4, 266, :_reduce_359,
+ 1, 266, :_reduce_360,
+ 3, 266, :_reduce_361,
+ 4, 268, :_reduce_362,
+ 2, 268, :_reduce_363,
+ 2, 268, :_reduce_364,
+ 1, 268, :_reduce_365,
+ 2, 273, :_reduce_366,
+ 0, 273, :_reduce_367,
+ 6, 274, :_reduce_368,
+ 8, 274, :_reduce_369,
+ 4, 274, :_reduce_370,
+ 6, 274, :_reduce_371,
+ 4, 274, :_reduce_372,
+ 2, 274, :_reduce_none,
+ 6, 274, :_reduce_374,
+ 2, 274, :_reduce_375,
+ 4, 274, :_reduce_376,
+ 6, 274, :_reduce_377,
+ 2, 274, :_reduce_378,
+ 4, 274, :_reduce_379,
+ 2, 274, :_reduce_380,
+ 4, 274, :_reduce_381,
+ 1, 274, :_reduce_none,
+ 0, 278, :_reduce_383,
+ 1, 278, :_reduce_384,
+ 3, 279, :_reduce_385,
+ 1, 279, :_reduce_386,
+ 4, 279, :_reduce_387,
+ 1, 280, :_reduce_388,
+ 4, 280, :_reduce_389,
+ 1, 281, :_reduce_390,
+ 3, 281, :_reduce_391,
+ 1, 282, :_reduce_392,
+ 1, 282, :_reduce_none,
+ 0, 286, :_reduce_394,
+ 0, 287, :_reduce_395,
+ 4, 243, :_reduce_396,
+ 4, 284, :_reduce_397,
+ 1, 284, :_reduce_398,
+ 0, 290, :_reduce_399,
+ 4, 285, :_reduce_400,
+ 0, 291, :_reduce_401,
+ 4, 285, :_reduce_402,
+ 0, 293, :_reduce_403,
+ 4, 289, :_reduce_404,
+ 2, 186, :_reduce_405,
+ 4, 186, :_reduce_406,
+ 5, 186, :_reduce_407,
+ 5, 186, :_reduce_408,
+ 2, 242, :_reduce_409,
+ 4, 242, :_reduce_410,
+ 4, 242, :_reduce_411,
+ 3, 242, :_reduce_412,
+ 3, 242, :_reduce_413,
+ 3, 242, :_reduce_414,
+ 2, 242, :_reduce_415,
+ 1, 242, :_reduce_416,
+ 4, 242, :_reduce_417,
+ 0, 295, :_reduce_418,
+ 4, 241, :_reduce_419,
+ 0, 296, :_reduce_420,
+ 4, 241, :_reduce_421,
+ 0, 297, :_reduce_422,
+ 3, 191, :_reduce_423,
+ 0, 298, :_reduce_424,
+ 0, 299, :_reduce_425,
+ 4, 292, :_reduce_426,
+ 5, 246, :_reduce_427,
+ 1, 300, :_reduce_428,
+ 1, 300, :_reduce_none,
+ 6, 156, :_reduce_430,
+ 0, 156, :_reduce_431,
+ 1, 301, :_reduce_432,
+ 1, 301, :_reduce_none,
+ 1, 301, :_reduce_none,
+ 2, 302, :_reduce_435,
+ 1, 302, :_reduce_none,
+ 2, 158, :_reduce_437,
+ 1, 158, :_reduce_none,
+ 1, 231, :_reduce_none,
+ 1, 231, :_reduce_none,
+ 1, 231, :_reduce_none,
+ 1, 232, :_reduce_442,
+ 1, 304, :_reduce_443,
+ 2, 304, :_reduce_444,
+ 3, 305, :_reduce_445,
+ 1, 305, :_reduce_446,
+ 1, 305, :_reduce_447,
+ 3, 233, :_reduce_448,
+ 4, 234, :_reduce_449,
+ 3, 235, :_reduce_450,
+ 0, 309, :_reduce_451,
+ 3, 309, :_reduce_452,
+ 1, 310, :_reduce_453,
+ 2, 310, :_reduce_454,
+ 3, 237, :_reduce_455,
+ 0, 312, :_reduce_456,
+ 3, 312, :_reduce_457,
+ 3, 236, :_reduce_458,
+ 3, 238, :_reduce_459,
+ 0, 313, :_reduce_460,
+ 3, 313, :_reduce_461,
+ 0, 314, :_reduce_462,
+ 3, 314, :_reduce_463,
+ 0, 306, :_reduce_464,
+ 2, 306, :_reduce_465,
+ 0, 307, :_reduce_466,
+ 2, 307, :_reduce_467,
+ 0, 308, :_reduce_468,
+ 2, 308, :_reduce_469,
+ 1, 311, :_reduce_470,
+ 2, 311, :_reduce_471,
+ 0, 316, :_reduce_472,
+ 4, 311, :_reduce_473,
+ 1, 315, :_reduce_474,
+ 1, 315, :_reduce_475,
+ 1, 315, :_reduce_476,
+ 1, 315, :_reduce_none,
+ 1, 212, :_reduce_478,
+ 3, 213, :_reduce_479,
+ 1, 303, :_reduce_480,
+ 2, 303, :_reduce_481,
+ 1, 216, :_reduce_482,
+ 1, 216, :_reduce_483,
+ 1, 216, :_reduce_484,
+ 1, 216, :_reduce_485,
+ 1, 204, :_reduce_486,
+ 1, 204, :_reduce_487,
+ 1, 204, :_reduce_488,
+ 1, 204, :_reduce_489,
+ 1, 204, :_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, 205, :_reduce_497,
+ 1, 239, :_reduce_498,
+ 1, 239, :_reduce_499,
+ 1, 173, :_reduce_500,
+ 1, 173, :_reduce_501,
+ 1, 178, :_reduce_502,
+ 1, 178, :_reduce_503,
+ 0, 317, :_reduce_504,
+ 4, 249, :_reduce_505,
+ 0, 249, :_reduce_506,
+ 3, 252, :_reduce_507,
+ 0, 319, :_reduce_508,
+ 3, 252, :_reduce_509,
+ 4, 318, :_reduce_510,
+ 2, 318, :_reduce_511,
+ 2, 318, :_reduce_512,
+ 1, 318, :_reduce_513,
+ 2, 321, :_reduce_514,
+ 0, 321, :_reduce_515,
+ 6, 288, :_reduce_516,
+ 8, 288, :_reduce_517,
+ 4, 288, :_reduce_518,
+ 6, 288, :_reduce_519,
+ 4, 288, :_reduce_520,
+ 6, 288, :_reduce_521,
+ 2, 288, :_reduce_522,
+ 4, 288, :_reduce_523,
+ 6, 288, :_reduce_524,
+ 2, 288, :_reduce_525,
+ 4, 288, :_reduce_526,
+ 2, 288, :_reduce_527,
+ 4, 288, :_reduce_528,
+ 1, 288, :_reduce_529,
+ 0, 288, :_reduce_530,
+ 1, 283, :_reduce_531,
+ 1, 283, :_reduce_532,
+ 1, 283, :_reduce_533,
+ 1, 283, :_reduce_534,
+ 1, 265, :_reduce_none,
+ 1, 265, :_reduce_536,
+ 1, 323, :_reduce_537,
+ 1, 324, :_reduce_538,
+ 3, 324, :_reduce_539,
+ 1, 275, :_reduce_540,
+ 3, 275, :_reduce_541,
+ 1, 325, :_reduce_542,
+ 2, 326, :_reduce_543,
+ 1, 326, :_reduce_544,
+ 2, 327, :_reduce_545,
+ 1, 327, :_reduce_546,
+ 1, 269, :_reduce_547,
+ 3, 269, :_reduce_548,
+ 1, 320, :_reduce_549,
+ 3, 320, :_reduce_550,
+ 1, 328, :_reduce_none,
+ 1, 328, :_reduce_none,
+ 2, 270, :_reduce_553,
+ 1, 270, :_reduce_554,
+ 3, 329, :_reduce_555,
+ 3, 330, :_reduce_556,
+ 1, 276, :_reduce_557,
+ 3, 276, :_reduce_558,
+ 1, 322, :_reduce_559,
+ 3, 322, :_reduce_560,
+ 1, 331, :_reduce_none,
+ 1, 331, :_reduce_none,
+ 2, 277, :_reduce_563,
+ 1, 277, :_reduce_564,
+ 1, 332, :_reduce_none,
+ 1, 332, :_reduce_none,
+ 2, 272, :_reduce_567,
+ 2, 271, :_reduce_568,
+ 0, 271, :_reduce_569,
+ 1, 253, :_reduce_none,
+ 3, 253, :_reduce_571,
+ 0, 240, :_reduce_572,
+ 2, 240, :_reduce_none,
+ 1, 225, :_reduce_574,
+ 3, 225, :_reduce_575,
+ 3, 333, :_reduce_576,
+ 2, 333, :_reduce_577,
+ 4, 333, :_reduce_578,
+ 2, 333, :_reduce_579,
+ 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, 294, :_reduce_none,
+ 1, 294, :_reduce_none,
+ 1, 294, :_reduce_none,
+ 1, 187, :_reduce_none,
+ 1, 187, :_reduce_none,
+ 1, 177, :_reduce_592,
+ 1, 177, :_reduce_593,
+ 0, 149, :_reduce_none,
+ 1, 149, :_reduce_none,
+ 0, 179, :_reduce_none,
+ 1, 179, :_reduce_none,
+ 2, 199, :_reduce_598,
+ 2, 176, :_reduce_599,
+ 0, 224, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 250, :_reduce_603,
+ 1, 250, :_reduce_none,
+ 1, 151, :_reduce_none,
+ 2, 151, :_reduce_none,
+ 0, 222, :_reduce_607 ]
+
+racc_reduce_n = 608
+
+racc_shift_n = 1035
+
+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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "singleton",
+ "@6",
+ "@7",
+ "@8",
+ "@9",
+ "@10",
+ "@11",
+ "@12",
+ "@13",
+ "@14",
+ "@15",
+ "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",
+ "@16",
+ "@17",
+ "f_args",
+ "do_block",
+ "@18",
+ "@19",
+ "do_body",
+ "@20",
+ "operation3",
+ "@21",
+ "@22",
+ "@23",
+ "@24",
+ "@25",
+ "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",
+ "@26",
+ "@27",
+ "args_tail",
+ "@28",
+ "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)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_60(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ 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_internal(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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_311(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_312(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_313(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_314(val, _values, result)
+ result = @builder.loop(:while, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_315(val, _values, result)
+ result = @builder.loop(:until, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_316(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_317(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_318(val, _values, result)
+ result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5])
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_328(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_329(val, _values, result)
+ result = @builder.def_singleton(val[0], val[1], val[2],
+ val[4], val[6], val[7], val[8])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ result
+end
+
+def _reduce_330(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_331(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_332(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_333(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 334 omitted
+
+def _reduce_335(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_336(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_337(val, _values, result)
+ if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda)
+ diagnostic :error, :invalid_return, nil, val[0]
+ end
+
+ result
+end
+
+# reduce 338 omitted
+
+# reduce 339 omitted
+
+def _reduce_340(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 341 omitted
+
+# reduce 342 omitted
+
+# reduce 343 omitted
+
+def _reduce_344(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 345 omitted
+
+def _reduce_346(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 347 omitted
+
+# reduce 348 omitted
+
+def _reduce_349(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_351(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_352(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 353 omitted
+
+def _reduce_354(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2], val[3]))
+
+ result
+end
+
+def _reduce_355(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2], val[3])).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_356(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2]))
+
+ result
+end
+
+def _reduce_357(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_358(val, _values, result)
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_359(val, _values, result)
+ result = [ @builder.restarg(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_360(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+def _reduce_361(val, _values, result)
+ result = [ @builder.restarg(val[0]),
+ *val[2] ]
+
+ 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[1])
+
+ 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] ]
+
+ result
+end
+
+def _reduce_366(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_367(val, _values, result)
+ result = []
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_370(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ 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[3])
+
+ result
+end
+
+# reduce 373 omitted
+
+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)
+ 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_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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_378(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ 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[1])
+
+ result
+end
+
+def _reduce_381(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 382 omitted
+
+def _reduce_383(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_384(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_385(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = @builder.args(val[0], [], val[0])
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_391(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_392(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 393 omitted
+
+def _reduce_394(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_395(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_396(val, _values, result)
+ @lexer.cmdarg.pop
+
+ result = [ val[1], val[3] ]
+
+ @static_env.unextend
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ result = @builder.args(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_401(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_402(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_403(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_404(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_405(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_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]
+ 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_408(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_409(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_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)
+ 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_412(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ 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[2]
+ result = @builder.call_method(val[0], val[1], nil,
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_415(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_416(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_417(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_418(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_419(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_421(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_422(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_423(val, _values, result)
+ result = [ val[1], val[2] ]
+
+ @static_env.unextend
+
+ result
+end
+
+def _reduce_424(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_426(val, _values, result)
+ result = [ val[2], val[3] ]
+
+ @static_env.unextend
+ @lexer.cmdarg.pop
+
+ result
+end
+
+def _reduce_427(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_428(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 429 omitted
+
+def _reduce_430(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_431(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_432(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 433 omitted
+
+# reduce 434 omitted
+
+def _reduce_435(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 436 omitted
+
+def _reduce_437(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 438 omitted
+
+# reduce 439 omitted
+
+# reduce 440 omitted
+
+# reduce 441 omitted
+
+def _reduce_442(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ 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)
+ string = @builder.string_compose(val[0], val[1], val[2])
+ result = @builder.dedent_string(string, @lexer.dedent_level)
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ string = @builder.string(val[0])
+ result = @builder.dedent_string(string, @lexer.dedent_level)
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_448(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_449(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_450(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_451(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_452(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_453(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_454(val, _values, result)
+ result = val[0] << val[1]
+
+ 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.word(val[1])
+
+ result
+end
+
+def _reduce_458(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_459(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_460(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_461(val, _values, result)
+ result = val[0] << @builder.string_internal(val[1])
+
+ result
+end
+
+def _reduce_462(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_463(val, _values, result)
+ result = val[0] << @builder.symbol_internal(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 = []
+
+ result
+end
+
+def _reduce_467(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_469(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_470(val, _values, result)
+ result = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_471(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_472(val, _values, result)
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+
+ result
+end
+
+def _reduce_473(val, _values, result)
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_474(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_475(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_476(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 477 omitted
+
+def _reduce_478(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_479(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_480(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_481(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_482(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_483(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_484(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.rational(val[0])
+
+ result
+end
+
+def _reduce_485(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.complex(val[0])
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_489(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_490(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_491(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_492(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_493(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_497(val, _values, result)
+ result = @builder.__ENCODING__(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.accessible(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.assignable(val[0])
+
+ result
+end
+
+def _reduce_502(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_503(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_504(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_505(val, _values, result)
+ result = [ val[0], val[2] ]
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_507(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_509(val, _values, result)
+ @context.in_kwarg = val[0]
+ result = @builder.args(nil, val[1], nil)
+
+ 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[1])
+
+ 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] ]
+
+ result
+end
+
+def _reduce_514(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_515(val, _values, result)
+ result = []
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ 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].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ 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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_525(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_526(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_527(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_528(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_529(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_530(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_531(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_532(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_533(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_534(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 535 omitted
+
+def _reduce_536(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_537(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_538(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_539(val, _values, result)
+ result = @builder.multi_lhs(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)
+ check_kwarg_name(val[0])
+
+ @static_env.declare val[0][0]
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_543(val, _values, result)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_544(val, _values, result)
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_545(val, _values, result)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_546(val, _values, result)
+ result = @builder.kwarg(val[0])
+
+ 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.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_554(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ 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 = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+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 = [ val[0] ]
+
+ result
+end
+
+def _reduce_560(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 561 omitted
+
+# reduce 562 omitted
+
+def _reduce_563(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_564(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 565 omitted
+
+# reduce 566 omitted
+
+def _reduce_567(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+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[1]
+
+ result
+end
+
+def _reduce_572(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 573 omitted
+
+def _reduce_574(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_575(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_576(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_577(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_578(val, _values, result)
+ result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_579(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# 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
+
+# reduce 591 omitted
+
+def _reduce_592(val, _values, result)
+ result = [:dot, val[0][1]]
+
+ result
+end
+
+def _reduce_593(val, _values, result)
+ result = [:anddot, val[0][1]]
+
+ result
+end
+
+# reduce 594 omitted
+
+# reduce 595 omitted
+
+# reduce 596 omitted
+
+# reduce 597 omitted
+
+def _reduce_598(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_599(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 600 omitted
+
+# reduce 601 omitted
+
+# reduce 602 omitted
+
+def _reduce_603(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 604 omitted
+
+# reduce 605 omitted
+
+# reduce 606 omitted
+
+def _reduce_607(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby25
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby26.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby26.rb
new file mode 100644
index 000000000..c7578d32a
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby26.rb
@@ -0,0 +1,6721 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-590,611,550,215,216,-109,-107,-590,-590,-590,225,550,-590,-590,-590',
+'780,-590,277,550,873,246,-88,550,591,780,-590,-590,-590,-590,-102,563',
+'-74,986,593,564,-110,-590,-590,-104,-590,-590,-590,-590,-590,-105,-103',
+'-107,-109,-110,1028,779,226,243,996,215,216,245,244,-105,779,215,216',
+'996,-104,-103,-105,-590,-590,-590,-590,-590,-590,-590,-590,-590,-590',
+'-590,-590,-590,-590,118,-108,-590,-590,-590,117,768,-590,550,590,-590',
+'-102,-106,-590,-590,996,-590,226,-590,592,-590,114,-590,-590,276,-590',
+'-590,-590,-590,-590,-298,-590,-590,-590,-100,-98,706,-298,-298,-298',
+'118,-106,941,-298,-298,117,-298,-590,872,118,-590,-590,-590,-590,117',
+'-590,118,-590,-93,826,118,117,-590,-106,-101,117,-298,-298,226,-298',
+'-298,-298,-298,-298,226,277,-104,-586,-587,-108,-96,-104,-105,-103,-107',
+'-109,-110,-105,-103,-107,-109,-110,-95,-94,-96,986,-298,-298,-298,-298',
+'-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,277,223,-298,-298',
+'-298,221,616,609,-586,-108,-298,-97,270,-298,-108,996,118,-95,-298,-102',
+'-298,117,-298,-298,-102,-298,-298,-298,-298,-298,118,-298,-590,-298',
+'-587,117,-96,459,753,-590,-590,-590,96,97,610,-590,-590,-298,-590,-106',
+'-298,-298,276,-298,-106,-298,-503,-590,-110,215,216,118,-298,-108,272',
+'-584,117,277,-590,-590,222,-590,-590,-590,-590,-590,-96,221,-99,-96',
+'792,118,557,-95,970,578,117,276,226,-96,-97,96,97,568,-110,-104,215',
+'216,-590,-590,-590,-590,-590,-590,-590,-590,-590,-590,-590,-590,-590',
+'-590,605,-102,-590,-590,-590,-492,617,-504,98,99,-590,-95,-492,-590',
+'-95,-590,578,-584,-590,272,-590,-492,-590,-590,-95,-590,-590,-590,-590',
+'-590,222,-590,-590,-590,-98,823,792,580,579,576,-584,118,276,-586,-97',
+'272,117,-590,578,601,-590,-590,-590,-97,644,-590,600,98,99,-590,-590',
+'-590,-590,-106,-103,-590,-590,-590,-590,683,-492,680,679,678,-590,681',
+'845,-590,621,-586,580,579,578,-590,-97,823,792,-97,-590,-590,738,-590',
+'-590,-590,-590,-590,118,-97,118,-271,-98,117,-590,117,683,598,680,679',
+'678,221,681,595,580,579,576,612,270,246,-590,-590,-590,-590,-590,-590',
+'-590,-590,-590,-590,-590,-590,-590,-590,-590,-104,-590,-590,-590,246',
+'617,246,-98,246,-590,-98,578,-590,580,579,578,527,-590,984,-590,-98',
+'-590,-590,740,-590,-590,-590,-590,-590,-298,-590,-590,-590,766,226,753',
+'-298,-298,-298,-107,226,222,-298,-298,540,-298,-590,542,226,-590,-590',
+'1000,-590,891,-590,540,540,-583,542,539,767,-590,-106,-100,226,-298',
+'-298,223,-298,-298,-298,-298,-298,-109,-88,580,579,594,221,580,579,585',
+'-95,540,-496,566,542,647,527,226,-105,-496,-104,533,568,-298,-298,-298',
+'-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-489,658,-298',
+'-298,-298,-101,616,-489,-107,663,-298,578,-583,-298,578,-110,-489,578',
+'-298,664,-298,226,-298,-298,666,-298,-298,-298,-298,-298,-489,-298,702',
+'-298,222,-583,-109,-489,-489,-489,-496,707,-489,-489,-489,-299,-489',
+'-298,263,264,-298,-298,-299,-99,-489,-298,-489,-489,-489,215,216,-299',
+'-298,-108,708,-489,-489,-489,557,-489,-489,-489,-489,-489,710,580,579',
+'589,580,579,581,580,579,583,262,261,406,-495,-494,699,698,408,407,570',
+'-495,-494,-489,-489,-489,-489,-489,-489,-489,-489,-489,-489,-489,-489',
+'-489,-489,-299,221,-489,-489,-489,221,-489,-489,560,562,-489,561,456',
+'-489,-489,727,-489,558,-489,737,-489,457,-489,-489,741,-489,-489,-489',
+'-489,-489,-497,-489,-492,-489,742,398,-272,-497,557,-492,-492,-492,-495',
+'-494,-492,-492,-492,-489,-492,502,-489,-489,-489,-489,754,-489,-492',
+'-489,-492,-492,-492,544,-489,-489,84,543,222,489,-492,-492,222,-492',
+'-492,-492,-492,-492,85,-336,226,489,246,221,-500,-498,-336,-499,86,226',
+'530,-500,-498,771,-499,-336,772,-497,266,457,-492,-492,-492,-492,-492',
+'-492,-492,-492,-492,-492,-492,-492,-492,-492,777,-299,-492,-492,-492',
+'221,-492,-492,-299,782,-492,500,970,-492,-492,502,-492,-299,-492,528',
+'-492,568,-492,-492,524,-492,-492,-492,-492,-492,-336,-492,-298,-492',
+'222,-500,-498,658,-499,-298,-298,-298,226,272,-298,-298,-298,-492,-298',
+'272,-492,-492,-492,-492,272,-492,658,-492,-298,-298,-298,226,-492,-492',
+'246,281,-299,792,-298,-298,222,-298,-298,-298,-298,-298,612,221,800',
+'221,803,-289,-492,-489,975,804,220,806,-289,-492,-489,808,810,973,521',
+'218,818,-289,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298',
+'-298,-298,-298,819,820,-298,-298,-298,792,769,-298,221,825,-298,-98',
+'611,-298,-298,604,-298,226,-298,514,-298,-107,-298,-298,602,-298,-298',
+'-298,-298,-298,222,-298,222,-298,-289,-492,-489,513,683,226,680,679',
+'678,-73,681,-504,226,-298,127,-503,-298,-298,-298,-298,834,-298,502',
+'-298,-591,-96,500,-273,-298,-108,498,-591,-591,-591,688,-105,-591,-591',
+'-591,222,-591,812,226,489,691,844,225,246,461,-591,-591,-591,-591,967',
+'460,680,679,678,-94,681,-591,-591,-93,-591,-591,-591,-591,-591,-103',
+'-298,458,848,-102,221,658,865,-298,699,698,243,520,-587,692,245,244',
+'-298,241,242,-271,518,-591,-591,-591,-591,-591,-591,-591,-591,-591,-591',
+'-591,-591,-591,-591,869,-502,-591,-591,-591,226,889,-591,-502,226,-591',
+'893,409,-591,-591,895,-591,-502,-591,396,-591,898,-591,-591,899,-591',
+'-591,-591,-591,-591,-298,-591,-591,-591,222,902,226,906,-501,-274,683',
+'226,680,679,678,-501,681,-591,908,803,-591,-591,-591,-591,-501,-591',
+'-592,-591,911,913,915,688,-591,-592,-592,-592,-502,917,-592,-592,-592',
+'691,-592,226,919,246,920,812,326,933,803,-592,-592,-592,-592,967,815',
+'680,679,678,935,681,-592,-592,937,-592,-592,-592,-592,-592,939,-298',
+'941,-501,699,698,941,243,-298,692,226,245,244,-587,241,242,947,-298',
+'325,953,727,964,-592,-592,-592,-592,-592,-592,-592,-592,-592,-592,-592',
+'-592,-592,-592,971,266,-592,-592,-592,976,986,-592,217,803,-592,990',
+'246,-592,-592,992,-592,994,-592,996,-592,996,-592,-592,663,-592,-592',
+'-592,-592,-592,-298,-592,-592,-592,683,214,680,679,678,683,681,680,679',
+'678,243,681,213,-592,245,244,-592,-592,-592,-592,1009,-592,-290,-592',
+'1010,1011,941,941,-592,-290,-290,-290,941,1016,-290,-290,-290,812,-290',
+'246,986,1019,812,-587,-586,226,815,212,-290,-290,-290,946,127,,,256',
+'257,,-290,-290,,-290,-290,-290,-290,-290,683,,680,679,678,243,681,249',
+',245,244,,241,242,,,247,,248,,,,-290,-290,-290,-290,-290,-290,-290,-290',
+'-290,-290,-290,-290,-290,-290,,812,-290,-290,-290,,,-290,,,-290,,,-290',
+'-290,,-290,,-290,,-290,,-290,-290,,-290,-290,-290,-290,-290,,-290,,-290',
+'732,733,,,734,112,113,,683,,680,679,678,-290,681,,-290,-290,-290,-290',
+',-290,-254,-290,,,,,-290,-254,-254,-254,,,-254,-254,-254,683,-254,680',
+'679,678,688,681,,812,,-254,-254,,,,691,,,246,,,-254,-254,,-254,-254',
+'-254,-254,-254,121,122,123,124,125,256,257,,686,121,122,123,124,125',
+',,,696,695,699,698,243,,249,692,245,244,,241,242,,,247,-254,248,-419',
+',,,,-254,,-419,-419,-419,272,-254,-419,-419,-419,226,-419,683,,680,679',
+'678,,681,,-419,-419,-419,121,122,123,124,125,-254,-254,,-419,-419,,-419',
+'-419,-419,-419,-419,,,,,-254,,,-254,,,812,683,-254,680,679,678,,681',
+',-254,,,-419,-419,-419,-419,-419,-419,-419,-419,-419,-419,-419,-419',
+'-419,-419,,,-419,-419,-419,,,-419,,272,-419,,812,-419,-419,,-419,,-419',
+',-419,,-419,-419,,-419,-419,-419,-419,-419,-305,-419,-419,-419,,,,-305',
+'-305,-305,,,-305,-305,-305,,-305,-419,246,,-419,-419,,-419,,-419,-305',
+'-305,,,,,-419,,256,257,-305,-305,,-305,-305,-305,-305,-305,121,122,123',
+'124,125,,243,,249,,245,244,,241,242,,,,,,,,-305,-305,-305,-305,-305',
+'-305,-305,-305,-305,-305,-305,-305,-305,-305,,,-305,-305,-305,,,-305',
+',281,-305,,,-305,-305,,-305,,-305,,-305,,-305,-305,,-305,-305,-305,-305',
+'-305,,-305,-254,-305,,,,,,-254,-254,-254,,,-254,-254,-254,-305,-254',
+'246,-305,-305,,-305,,-305,,-254,-254,-254,,,-305,,,256,257,,-254,-254',
+',-254,-254,-254,-254,-254,,,,,,243,,,,245,244,,241,242,,,,,,,,,-254',
+'-254,-254,-254,-254,-254,-254,-254,-254,-254,-254,-254,-254,-254,,,-254',
+'-254,-254,,,-254,,272,-254,,,-254,-254,,-254,,-254,,-254,,-254,-254',
+',-254,-254,-254,-254,-254,,-254,-254,-254,,,,,,,,,,,,,,-254,,,-254,-254',
+',-254,,-254,299,75,76,77,9,58,-254,,,64,65,,,,68,,66,67,69,30,31,73',
+'74,,,,,,78,28,27,106,105,107,108,,,19,,,,,606,8,46,301,10,110,109,111',
+'100,57,102,101,103,,104,112,113,,96,97,42,43,41,246,250,251,252,253',
+'263,264,258,259,254,255,,239,240,,,256,257,,40,,,33,,,59,60,,,61,,35',
+'243,,249,45,245,244,,241,242,262,261,247,20,248,,,,94,84,87,88,,89,91',
+'90,92,,,,,85,93,,260,,-246,,,63,,86,98,99,5,75,76,77,9,58,,,,64,65,',
+',,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,606',
+'8,46,7,10,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41',
+'246,250,251,252,253,263,264,258,259,254,255,,239,240,,,256,257,,40,',
+',33,,,59,60,,,61,,35,243,,249,45,245,244,,241,242,262,261,247,20,248',
+',,,94,84,87,88,,89,91,90,92,,,,,85,93,,260,,,,,63,,86,98,99,299,75,76',
+'77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107',
+'108,,,19,,,,,,8,46,301,10,110,109,111,100,57,102,101,103,,104,112,113',
+',96,97,42,43,41,246,250,251,252,253,263,264,258,259,254,255,,239,240',
+',,256,257,,40,,,303,,,59,60,,,61,,35,243,,249,45,245,244,,241,242,262',
+'261,247,20,248,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,260,,,,,63,,86',
+'98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78',
+'28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100,57,102,101',
+'103,,104,112,113,,96,97,42,43,41,246,250,251,252,253,263,264,258,259',
+'254,255,,239,240,,,256,257,,40,,,33,,,59,60,,,61,,35,243,,249,45,245',
+'244,,241,242,262,261,247,20,248,,,,94,84,87,88,,89,91,90,92,,,,,85,93',
+',260,,,,,63,,86,98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30',
+'31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110,109',
+'111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,246,250,251,252',
+'253,263,264,258,259,254,255,,239,240,,,256,257,,40,,,33,,,59,60,,,61',
+',35,243,,249,45,245,244,,241,242,262,261,247,20,248,,,,94,84,87,88,',
+'89,91,90,92,,,,,85,93,226,260,,,,,63,,86,98,99,299,75,76,77,9,58,,,',
+'64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19',
+',,,,,8,46,301,10,110,109,111,100,57,102,101,103,,104,112,113,,96,97',
+'42,43,41,246,250,251,252,253,263,264,258,259,254,255,,239,240,,,256',
+'257,,40,,,33,,,59,60,,,61,,35,243,,249,45,245,244,,241,242,262,261,247',
+'20,248,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,260,,,,,63,,86,98,99,299',
+'75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106',
+'105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100,57,102,101,103,,104',
+'112,113,,96,97,42,43,41,246,250,251,252,253,263,264,258,259,254,255',
+',239,240,,,256,257,,40,,,33,,,59,60,,,61,,35,243,,249,45,245,244,,241',
+'242,262,261,247,20,248,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,260,,',
+',,63,,86,98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74',
+',,,,,78,28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100',
+'57,102,101,103,,104,112,113,,96,97,42,43,41,246,250,251,252,253,263',
+'264,258,259,254,255,,239,240,,,256,257,,40,,,33,,,59,60,,,61,,35,243',
+',249,45,245,244,,241,242,262,261,247,20,248,,,,94,84,87,88,,89,91,90',
+'92,,,,,85,93,,260,,,,,63,,86,98,99,299,75,76,77,9,58,,,,64,65,,,,68',
+',66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,8,46,301',
+'10,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,246,250',
+'251,252,253,263,264,258,259,254,255,,-611,-611,,,256,257,,40,,,33,,',
+'59,60,,,61,,35,243,,249,45,245,244,,241,242,262,261,247,20,248,,,,94',
+'84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,299,75,76,77,9,58',
+',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,',
+',19,,,,,,8,46,301,10,110,109,111,100,57,102,101,103,,104,112,113,,96',
+'97,42,43,41,246,-611,-611,-611,-611,263,264,,,-611,-611,,,,,,256,257',
+',40,,,303,,,59,60,,,61,,35,243,,249,45,245,244,,241,242,262,261,247',
+'20,248,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,299',
+'75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106',
+'105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100,57,102,101,103,,104',
+'112,113,,96,97,42,43,41,246,-611,-611,-611,-611,263,264,,,-611,-611',
+',,,,,256,257,,40,,,33,,,59,60,,,61,,35,243,,249,45,245,244,,241,242',
+'262,261,247,20,248,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86',
+'98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78',
+'28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100,57,102,101',
+'103,,104,112,113,,96,97,42,43,41,246,-611,-611,-611,-611,263,264,,,-611',
+'-611,,,,,,256,257,,40,,,33,,,59,60,,,61,,35,243,,249,45,245,244,,241',
+'242,262,261,247,20,248,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63',
+',86,98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,',
+',,78,28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100,57',
+'102,101,103,,104,112,113,,96,97,42,43,41,246,-611,-611,-611,-611,263',
+'264,,,-611,-611,,,,,,256,257,,40,,,33,,,59,60,,,61,,35,243,,249,45,245',
+'244,,241,242,262,261,247,20,248,,,,94,84,87,88,,89,91,90,92,,,,,85,93',
+',,,,,,63,,86,98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31',
+'73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110,109,111',
+'100,57,102,101,103,,104,112,113,,96,97,42,43,41,246,250,251,252,253',
+'263,264,258,,254,255,,,,,,256,257,,40,,,33,,,59,60,,,61,,35,243,,249',
+'45,245,244,,241,242,262,261,247,20,248,,,,94,84,87,88,,89,91,90,92,',
+',,,85,93,,,,,,,63,,86,98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67',
+'69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110',
+'109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,246,250,251',
+'252,253,263,264,,,254,255,,,,,,256,257,,40,,,33,,,59,60,,,61,,35,243',
+',249,45,245,244,,241,242,262,261,247,20,248,,,,94,84,87,88,,89,91,90',
+'92,,,,,85,93,,,,,,,63,,86,98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66',
+'67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,8,46,301,10',
+'110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,246,250',
+'251,252,253,263,264,258,259,254,255,,-611,-611,,,256,257,,40,,,33,,',
+'59,60,,,61,,35,243,,249,45,245,244,,241,242,262,261,247,20,248,,,,94',
+'84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,299,75,76,77,9,58',
+',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,',
+',19,,,,,,8,46,301,10,110,109,111,100,57,102,101,103,,104,112,113,,96',
+'97,42,43,41,246,-611,-611,-611,-611,263,264,,,-611,-611,,,,,,256,257',
+',40,,,303,,,59,60,,,61,,35,243,,249,45,245,244,,241,242,262,261,247',
+'20,248,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,299',
+'75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106',
+'105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100,57,102,101,103,,104',
+'112,113,,96,97,42,43,41,246,-611,-611,-611,-611,263,264,,,-611,-611',
+',,,,,256,257,,40,,,33,,,59,60,,,61,,35,243,,249,45,245,244,,241,242',
+'262,261,247,20,248,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86',
+'98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78',
+'28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100,57,102,101',
+'103,,104,112,113,,96,97,42,43,41,246,,,,,,,,,,,,,,,,256,257,,40,,,33',
+',,59,60,,,61,,35,243,,249,45,245,244,,241,242,,,,20,,,,,94,84,87,88',
+',89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,299,75,76,77,9,58,,,,64,65',
+',,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,',
+'8,46,301,10,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,',
+'94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,5,75,76,77,9,58',
+',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,',
+',19,,,,,,8,46,7,10,110,109,111,100,57,102,101,103,,104,112,113,,96,97',
+'42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20',
+',,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,299,75,76',
+'77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107',
+'108,,,19,,,,,,8,46,301,10,110,109,111,100,57,102,101,103,,104,112,113',
+',96,97,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,',
+',,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,299',
+'75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106',
+'105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100,57,102,101,103,,104',
+'112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35',
+',,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86',
+'98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78',
+'28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100,57,102,101',
+'103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60',
+',,61,,35,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,',
+',,,63,,86,98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73',
+'74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110,109,111,100',
+'57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,40,,',
+'33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,',
+',,85,93,,,,,,,63,,86,98,99,299,75,76,77,9,58,,,,64,65,,,,68,,66,67,69',
+'30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110',
+'109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,',
+',,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89',
+'91,90,92,,,,,85,93,,,,,,,63,,86,98,99,299,75,76,77,9,58,,,,64,65,,,',
+'68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,8,46',
+'301,10,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,',
+',,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,94,84',
+'87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,299,75,76,77,9,58,,',
+',64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19',
+',,,,,8,46,301,10,110,109,111,100,57,102,101,103,,104,112,113,,96,97',
+'42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20',
+',,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,',
+',,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41',
+',,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,94',
+'84,87,88,,89,91,90,92,,,,,85,93,226,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,238,,,,',
+',,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,',
+',,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,,,94',
+'84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,',
+'68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,238,,,,,,,46',
+',,110,109,111,100,57,102,101,103,293,104,112,113,,96,97,42,43,41,,,',
+',,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,290,,288,,45,,,294,,,,,,236',
+',,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,238,',
+',,,,,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,290,,288,,45,,,294,,,',
+',,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98',
+'99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,',
+',238,,,,,,,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96,97',
+'42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,290,,288,,45,,,294',
+',,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,226,,,75,76,77,63,58',
+'86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105',
+'107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113',
+',96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,',
+',,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107',
+'108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96',
+'97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,',
+',,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98',
+'99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108',
+',,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97',
+'42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236',
+',,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,75,76,77,9,58',
+',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,',
+',19,,,,,,8,46,,10,110,109,111,100,57,102,101,103,,104,112,113,,96,97',
+'42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20',
+',,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,',
+',,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41',
+',,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,94',
+'84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,',
+'68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238,,,',
+',,,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,294,,,,,,236',
+',,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,75,76,77',
+'9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107',
+'108,,,19,,,,,,8,46,7,10,110,109,111,100,57,102,101,103,,104,112,113',
+',96,97,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,',
+',,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108',
+',,238,,,,,,,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96',
+'97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,290,,288,,45',
+',,294,,,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63',
+'58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105',
+'107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113',
+',96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,',
+',,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107',
+'108,,,238,,,,,,,316,,,110,109,111,100,57,102,101,103,,104,112,113,,96',
+'97,,,322,,,,,,,,,,,,,,,,,,,,922,,,237,,,59,60,,,61,,,,,,,,,,,,,,,,,',
+',,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,238,,,,',
+',,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96,97,42,43,41',
+',,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,290,,288,,45,,,294,,,,,,236',
+',,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,238,',
+',,,,,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,290,,288,,45,,,294,,,',
+',,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98',
+'99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,',
+',238,,,,,,,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96,97',
+'42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,290,,288,,45,,,294',
+',,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107',
+'108,,,238,,,,,,,316,,,110,109,111,100,57,102,101,103,,104,112,113,,96',
+'97,,,322,,,,,,,,,,,,,,,,,,,,312,,,308,,,59,60,,,61,,307,,,,,,,,,,,,',
+',,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,316,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,,,322',
+',,,,,,,,,,,,,,,,,,,312,,,237,,,59,60,,,61,,,683,,680,679,678,688,681',
+',,,,,,,,691,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,324,,686,63,,86,98',
+'99,75,76,77,,58,699,698,,64,65,692,,,68,,66,67,69,318,319,73,74,,,,',
+',78,315,321,106,105,107,108,,,238,,,,,,,316,,,110,109,111,100,57,102',
+'101,103,,104,112,113,,96,97,,,322,,,,,,,,,,,,,,,,,,,,928,,,237,,,59',
+'60,,,61,,,,,,,,,,,,,,,,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75',
+'76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315',
+'321,106,105,107,108,,,238,,,,,,,316,,,110,109,111,100,57,102,101,103',
+',104,112,113,,96,97,,,322,,,,,,,,,,,,,,,,,,,,922,,,237,,,59,60,,,61',
+',,,,,,,,,,,,,,,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63',
+'58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106',
+'105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112',
+'113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45',
+',,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58',
+'86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105',
+'107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113',
+',96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,',
+',,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107',
+'108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96',
+'97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,',
+',,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98',
+'99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108',
+',,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97',
+'42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236',
+',,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96,97,42',
+'43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,288,,45,,,294,,,',
+',,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,75',
+'76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105',
+'107,108,,,19,,,,,,8,46,,10,110,109,111,100,57,102,101,103,,104,112,113',
+',96,97,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,',
+',,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107',
+'108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,293,104,112,113',
+',96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,290,,,,45',
+',,294,,,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63',
+'58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106',
+'105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,293,104',
+'112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,',
+',,,45,,,294,,,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76',
+'77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106',
+'105,107,108,,,19,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112',
+'113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45',
+',,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58',
+'86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107',
+'108,,,19,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96',
+'97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,',
+',,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98',
+'99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,',
+',19,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42',
+'43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,20,',
+',,,94,84,87,88,,89,91,90,92,,,,,85,93,118,,,,,117,63,,86,98,99,75,76',
+'77,,58,,,,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105',
+'107,108,,,238,,,,,,,316,,,110,109,111,100,57,102,101,103,,104,112,113',
+',96,97,,,322,,,,,,,,,,,,,,,,,,,,358,,,33,,,59,60,,,61,,35,,,,,,,,,,',
+',,,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99',
+'64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108',
+',,238,,,,,,,316,,,110,109,111,363,57,102,101,364,,104,112,113,,96,97',
+',,322,,,,,,,,,,,,,,,,,370,,,365,,,237,,,59,60,,,61,,,,,,,,,,,,,,,,,',
+',,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,316,,,110,109,111,363,57,102,101,364,,104,112,113,,96,97,,,322',
+',,,,,,,,,,,,,,,,,,,365,,,237,,,59,60,,,61,,,683,,680,679,678,688,681',
+',,,,,,,,691,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,686,63,,86,98,99',
+'75,76,77,9,58,699,698,,64,65,692,,,68,,66,67,69,30,31,73,74,,,,,,78',
+'28,27,106,105,107,108,,,19,,,,,,8,46,7,10,110,109,111,100,57,102,101',
+'103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60',
+',,61,,35,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,',
+',,398,63,,86,98,99,75,76,77,,58,,,,64,65,,,,68,,66,67,69,30,31,73,74',
+',,,,,78,28,27,106,105,107,108,,,19,,,,,,,46,,,110,109,111,100,57,102',
+'101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,',
+'59,60,,,61,,,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93',
+',,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78',
+'28,27,106,105,107,108,,,19,,,,,,,46,,,110,109,111,100,57,102,101,103',
+',104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,',
+'61,,,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76',
+'77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106',
+'105,107,108,,,19,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112',
+'113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45',
+',,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58',
+'86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107',
+'108,,,19,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96',
+'97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,',
+',,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,75,76',
+'77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107',
+'108,,,19,,,,,,8,46,,10,110,109,111,100,57,102,101,103,,104,112,113,',
+'96,97,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,',
+',,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107',
+'108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96',
+'97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,641,,,,45,,,',
+',,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108',
+',,19,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42',
+'43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,20,',
+',,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,238,',
+',,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41',
+',,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,414,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,238,,,,',
+',,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,',
+',,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,414,,,,45,,,,,,,,,236,,,,',
+'94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,',
+',46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,,',
+',,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,94,84',
+'87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68',
+',66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,,46,,',
+'110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,',
+',,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,94,84,87,88',
+',89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67',
+'69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,238,,,,,,,46,,,110,109',
+'111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,',
+',,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91',
+'90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30',
+'31,73,74,,,,,,78,28,27,106,105,107,108,,,238,,,,,,,46,,,110,109,111',
+'100,57,102,101,103,293,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,',
+',,231,,,237,,,59,60,,,61,,290,,288,,45,,,294,,,,,,236,,,,,94,291,87',
+'88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66',
+'67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238,,,,,,,46,',
+',110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,',
+',,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,,,94,84,87',
+'88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66',
+'67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,238,,,,,,,46,,,110',
+'109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,',
+',,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89',
+'91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69',
+'30,31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,,46,,,110,109,111',
+'100,57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231',
+',,237,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,',
+',,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73',
+'74,,,,,,78,315,321,106,105,107,108,,,238,,,,,,,316,,,110,109,111,100',
+'57,102,101,103,,104,112,113,,96,97,,,322,,,,,,,,,,,,,,,,,,,,312,,,237',
+',,59,60,,,61,,,683,,680,679,678,688,681,,,,,,,,,691,,94,84,87,88,,89',
+'91,90,92,,,,,85,93,,,,516,,686,63,,86,98,99,75,76,77,,58,699,698,,64',
+'65,692,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108',
+',,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97',
+'42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236',
+',,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,414,,,,45,,,,,,,,,236',
+',,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,316,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,,,322',
+',,,,,,,,,,,,,,,,,,,312,,,308,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,94,84,87',
+'88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66',
+'67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238,,,,,,,316',
+',,110,109,111,100,57,102,101,103,,104,112,113,,96,97,,,322,,,,,,,,,',
+',,,,,,,,,,312,,,308,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,94,84,87,88,,89',
+'91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69',
+'318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238,,,,,,,316,,,110',
+'109,111,100,57,102,101,103,,104,112,113,,96,97,,,322,,,,,,,,,,,,,,,',
+',,,,312,,,308,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,94,84,87,88,,89,91,90',
+'92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319',
+'73,74,,,,,,78,315,321,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100',
+'57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,',
+',237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,',
+',,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73',
+'74,,,,,,78,315,321,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100',
+'57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,',
+',237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,',
+',,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73',
+'74,,,,,,78,315,321,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100',
+'57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,',
+',237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,',
+',,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73',
+'74,,,,,,78,315,321,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100',
+'57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,',
+',237,533,,59,60,,,61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92',
+',,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73',
+'74,,,,,,78,28,27,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57',
+'102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237',
+',,59,60,,,61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85',
+'93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,',
+',78,28,27,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101',
+'103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60',
+',,61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75',
+'76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27',
+'106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104',
+'112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,',
+',,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77',
+'63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105',
+'107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113',
+',96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,',
+',,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107',
+'108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,293,104,112,113',
+',96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,288,,45',
+',,294,,,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63',
+'58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106',
+'105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,293,104',
+'112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,641',
+',288,,45,,,294,,,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75',
+'76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315',
+'321,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103',
+',104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,',
+'61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,',
+'63,,86,98,99,75,76,77,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,',
+',78,28,27,106,105,107,108,,,19,,,,,,8,46,,10,110,109,111,100,57,102',
+'101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59',
+'60,,,61,,35,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93',
+',,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78',
+'28,27,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103',
+'293,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60',
+',,61,,290,,288,,45,,,294,,,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,',
+'85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,',
+',,,,78,28,27,106,105,107,108,,,19,,,,,,,46,,,110,109,111,100,57,102',
+'101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,',
+'59,60,,,61,,,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93',
+',,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78',
+'28,27,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103',
+',104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,',
+'61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75',
+'76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315',
+'321,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103',
+',104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,',
+'61,,745,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,',
+'75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28',
+'27,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,293',
+'104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61',
+',290,,288,,45,,,294,,,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93',
+',,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78',
+'28,27,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103',
+'293,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60',
+',,61,,290,,288,,45,,,294,,,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,',
+'85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,',
+',,,,78,28,27,106,105,107,108,,,19,,,,,,,46,,,110,109,111,100,57,102',
+'101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,',
+'59,60,,,61,,,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93',
+',,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,',
+'78,315,321,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101',
+'103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60',
+',,61,,290,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,',
+',,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78',
+'315,321,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101',
+'103,293,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59',
+'60,,,61,,641,,,,45,,,294,,,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,',
+'85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,',
+',,,,78,28,27,106,105,107,108,,,19,,,,,,,46,,,110,109,111,100,57,102',
+'101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,',
+'59,60,,,61,,,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93',
+',,,75,76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,',
+'78,315,321,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101',
+'103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60',
+',,61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75',
+'76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315',
+'321,106,105,107,108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103',
+',104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,',
+'61,,,,,,45,,,,,,,,,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75',
+'76,77,63,58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315',
+'321,106,105,107,108,,,238,,,,,,,316,,,110,109,111,100,57,102,101,103',
+',104,112,113,,96,97,,,322,,,,,,,,,,,,,,,,,,,,312,,,308,,,59,60,,,61',
+',,,,,,,,,,,,,,,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63',
+'58,86,98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105',
+'107,108,,,19,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113',
+',96,97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,',
+',,,,,,20,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108',
+',,238,,,,,,,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96',
+'97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,290,,288,,45',
+',,294,,,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63',
+'58,86,98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106',
+'105,107,108,,,238,,,,,,,316,,,110,109,111,100,57,102,101,103,,104,112',
+'113,,96,97,,,322,,,,,,,,,,,,,,,,,,,,312,,,308,,,59,60,,,61,,,683,,680',
+'679,678,688,681,,,,,,,,,691,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,',
+',686,63,,86,98,99,75,76,77,9,58,699,698,,64,65,692,,,68,,66,67,69,30',
+'31,73,74,,,,,,78,28,27,106,105,107,108,,,19,,,,,,8,46,301,10,110,109',
+'111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,,,,,,,,,,',
+',,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,94,84,87,88,,89,91',
+'90,92,,,,,85,93,,,,,,398,63,,86,98,99,75,76,77,,58,,,,64,65,,,,68,,66',
+'67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238,,,,,,,46,',
+',110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43,41,,,,,,,',
+',,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,,,94,84,87',
+'88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65,,,,68,,66',
+'67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238,,,,,,,46,',
+',110,109,111,100,57,102,101,103,293,104,112,113,,96,97,42,43,41,,,,',
+',,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,288,,45,,,294,,,,,,236,,,,',
+'94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96,97,42',
+'43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,641,,288,,45,,,294',
+',,,,,236,,,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86',
+'98,99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107',
+'108,,,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96',
+'97,42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,',
+',,236,,,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98',
+'99,64,65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108',
+',,238,,,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97',
+'42,43,41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236',
+',,,,94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64,65',
+',,,68,,66,67,69,30,31,73,74,,,,,,78,28,27,106,105,107,108,,,238,,,,',
+',,46,,,110,109,111,100,57,102,101,103,293,104,112,113,,96,97,42,43,41',
+',,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,290,,288,,45,,,294,,,,,,236',
+',,,,94,291,87,88,,89,91,90,92,,,,,85,93,,,,75,76,77,63,58,86,98,99,64',
+'65,,,,68,,66,67,69,318,319,73,74,,,,,,78,315,321,106,105,107,108,,,238',
+',,,,,,46,,,110,109,111,100,57,102,101,103,,104,112,113,,96,97,42,43',
+'41,,,,,,,,,,,,,,,,,,,,231,,,237,,,59,60,,,61,,,,,,45,,,,,,,,,236,,,',
+',94,84,87,88,,89,91,90,92,,,,,85,93,,,,,,,63,,86,98,99,179,190,180,203',
+'176,196,186,185,206,207,201,184,183,178,204,208,209,188,177,191,195',
+'197,189,182,,,,198,205,200,199,192,202,187,175,194,193,,,,,,174,181',
+'172,173,169,170,171,130,132,,,131,,,,,,,,163,164,,160,142,143,144,151',
+'148,150,,,145,146,,,,165,166,152,153,,,,,,,,,,,,,,157,156,,141,162,159',
+'158,167,154,155,149,147,139,161,140,,,168,94,,,,,,,,,,,,,,93,179,190',
+'180,203,176,196,186,185,206,207,201,184,183,178,204,208,209,188,177',
+'191,195,197,189,182,,,,198,205,200,199,192,202,187,175,194,193,,,,,',
+'174,181,172,173,169,170,171,130,132,,,131,,,,,,,,163,164,,160,142,143',
+'144,151,148,150,,,145,146,,,,165,166,152,153,,,,,,,,,,,,,,157,156,,141',
+'162,159,158,167,154,155,149,147,139,161,140,,,168,94,,,,,,,,,,,,,,93',
+'179,190,180,203,176,196,186,185,206,207,201,184,183,178,204,208,209',
+'188,177,191,195,197,189,182,,,,198,205,200,199,192,202,187,175,194,193',
+',,,,,174,181,172,173,169,170,171,130,132,,,131,,,,,,,,163,164,,160,142',
+'143,144,151,148,150,,,145,146,,,,165,166,152,153,,,,,,,,,,,,,,157,156',
+',141,162,159,158,167,154,155,149,147,139,161,140,,,168,94,,,,,,,,,,',
+',,,93,179,190,180,203,176,196,186,185,206,207,201,184,183,178,204,208',
+'209,188,177,191,195,197,189,182,,,,198,205,200,199,192,202,187,175,194',
+'193,,,,,,174,181,172,173,169,170,171,130,132,129,,131,,,,,,,,163,164',
+',160,142,143,144,151,148,150,,,145,146,,,,165,166,152,153,,,,,,,,,,',
+',,,157,156,,141,162,159,158,167,154,155,149,147,139,161,140,,,168,94',
+',,,,,,,,,,,,,93,179,190,180,203,176,196,186,185,206,207,201,184,183',
+'178,204,208,209,188,177,191,195,197,189,182,,,,198,205,200,381,380,382',
+'379,175,194,193,,,,,,174,181,172,173,376,377,378,374,132,102,101,375',
+',104,,,,,,163,164,,160,142,143,144,151,148,150,,,145,146,,,,165,166',
+'152,153,,,,,,386,,,,,,,,157,156,,141,162,159,158,167,154,155,149,147',
+'139,161,140,,,168,179,190,180,203,176,196,186,185,206,207,201,184,183',
+'178,204,208,209,188,177,191,195,197,189,182,,,,198,205,200,199,192,202',
+'187,175,194,193,,,,,,174,181,172,173,169,170,171,130,132,,,131,,,,,',
+',,163,164,,160,142,143,144,151,148,150,,,145,146,,,,165,166,152,153',
+',,,,,,,,,,,,,157,156,,141,162,159,158,167,154,155,149,147,139,161,140',
+'622,440,168,,623,,,,,,,,163,164,,160,142,143,144,151,148,150,,,145,146',
+',,,165,166,152,153,,,,,,272,,,,,,,,157,156,,141,162,159,158,167,154',
+'155,149,147,139,161,140,715,447,168,,716,,,,,,,,163,164,,160,142,143',
+'144,151,148,150,,,145,146,,,,165,166,152,153,,,,,,272,,,,,,,,157,156',
+',141,162,159,158,167,154,155,149,147,139,161,140,750,447,168,,749,,',
+',,,,,163,164,,160,142,143,144,151,148,150,,,145,146,,,,165,166,152,153',
+',,,,,272,,,,,,,,157,156,,141,162,159,158,167,154,155,149,147,139,161',
+'140,747,440,168,,748,,,,,,,,163,164,,160,142,143,144,151,148,150,,,145',
+'146,,,,165,166,152,153,,,,,,272,,,,,,,,157,156,,141,162,159,158,167',
+'154,155,149,147,139,161,140,436,440,168,,437,,,,,,,,163,164,,160,142',
+'143,144,151,148,150,,,145,146,,,,165,166,152,153,,,,,,272,,,,,,,,157',
+'156,,141,162,159,158,167,154,155,149,147,139,161,140,487,440,168,,488',
+',,,,,,,163,164,,160,142,143,144,151,148,150,,,145,146,,,,165,166,152',
+'153,,,,,,,,,,,,,,157,156,,141,162,159,158,167,154,155,149,147,139,161',
+'140,443,447,168,,442,,,,,,,,163,164,,160,142,143,144,151,148,150,,,145',
+'146,,,,165,166,152,153,,,,,,272,,,,,,,,157,156,,141,162,159,158,167',
+'154,155,149,147,139,161,140,624,447,168,,625,,,,,,,,163,164,,160,142',
+'143,144,151,148,150,,,145,146,,,,165,166,152,153,,,,,,272,,,,,,,,157',
+'156,,141,162,159,158,167,154,155,149,147,139,161,140,622,440,168,,623',
+',,,,,,,163,164,,160,142,143,144,151,148,150,,,145,146,,,,165,166,152',
+'153,,,,,,272,,,,,,,,157,156,,141,162,159,158,167,154,155,149,147,139',
+'161,140,1007,447,168,,1008,,,,,,,,163,164,,160,142,143,144,151,148,150',
+',,145,146,,,,165,166,152,153,,,,,,272,,,,,,,,157,156,,141,162,159,158',
+'167,154,155,149,147,139,161,140,487,440,168,,488,,,,,,,,163,164,,160',
+'142,143,144,151,148,150,,,145,146,,,,165,166,152,153,,,,,,272,,,,,,',
+',157,156,,141,162,159,158,167,154,155,149,147,139,161,140,718,447,168',
+',719,,,,,,,,163,164,,160,142,143,144,151,148,150,,,145,146,,,,165,166',
+'152,153,,,,,,272,,,,,,,,157,156,,141,162,159,158,167,154,155,149,147',
+'139,161,140,1005,440,168,,1006,,,,,,,,163,164,,160,142,143,144,151,148',
+'150,,,145,146,,,,165,166,152,153,,,,,,272,,,,,,,,157,156,,141,162,159',
+'158,167,154,155,149,147,139,161,140,1002,447,168,,1001,,,,,,,,163,164',
+',160,142,143,144,151,148,150,,,145,146,,,,165,166,152,153,,,,,,272,',
+',,,,,,157,156,,141,162,159,158,167,154,155,149,147,139,161,140,651,440',
+'168,,652,,,,,,,,163,164,,160,142,143,144,151,148,150,,,145,146,,,,165',
+'166,152,153,,,,,,272,,,,,,,,157,156,,141,162,159,158,167,154,155,149',
+'147,139,161,140,654,447,168,,655,,,,,,,,163,164,,160,142,143,144,151',
+'148,150,,,145,146,,,,165,166,152,153,,,,,,272,,,,,,,,157,156,,141,162',
+'159,158,167,154,155,149,147,139,161,140,713,440,168,,714,,,,,,,,163',
+'164,,160,142,143,144,151,148,150,,,145,146,,,,165,166,152,153,,,,,,272',
+',,,,,,,157,156,,141,162,159,158,167,154,155,149,147,139,161,140,624',
+'447,168,,625,,,,,,,,163,164,,160,142,143,144,151,148,150,,,145,146,',
+',,165,166,152,153,,,,,,272,,,,,,,,157,156,,141,162,159,158,167,154,155',
+'149,147,139,161,140,,683,168,680,679,678,688,681,,683,,680,679,678,688',
+'681,691,,,,,,,,691,,683,,680,679,678,688,681,,,,,,686,,,691,,,,,686',
+'696,695,699,698,,,,692,696,695,699,698,,,,692,686,,683,,680,679,678',
+'688,681,696,695,699,698,,,,692,691,,683,,680,679,678,688,681,,683,,680',
+'679,678,688,681,691,,,,,686,,,691,,,,,,696,695,699,698,,,,692,686,,',
+',,,,,686,696,695,699,698,,,,692,696,695,699,698,,,683,692,680,679,678',
+'688,681,,683,,680,679,678,688,681,691,,,,,,,,691,,683,,680,679,678,688',
+'681,,,,,,686,,,691,,,,,686,,,699,698,,,,692,696,695,699,698,,,,692,686',
+',683,,680,679,678,688,681,,,699,698,,,,692,691,,683,,680,679,678,688',
+'681,683,,680,679,678,688,681,,691,,,,,686,,691,,683,,680,679,678,688',
+'681,699,698,,,,692,686,,691,,,,,686,,,,699,698,,,,692,,699,698,,,,692',
+'686,,683,,680,679,678,688,681,696,695,699,698,,,,692,691,,683,,680,679',
+'678,688,681,683,,680,679,678,688,681,,691,,,,,686,669,691,,,,,,,696',
+'695,699,698,,,,692,686,,,,,,,686,,696,695,699,698,,,,692,,699,698,,',
+',692' ]
+ racc_action_table = arr = ::Array.new(24631, 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 = [
+'624,747,894,575,575,561,714,624,624,624,19,348,624,624,624,773,624,62',
+'711,798,464,646,347,393,635,624,624,624,624,355,365,646,1017,394,365',
+'359,624,624,1025,624,624,624,624,624,1005,926,1006,976,929,1020,773',
+'19,464,1021,452,452,464,464,747,635,661,661,1022,828,356,713,624,624',
+'624,624,624,624,624,624,624,624,624,624,624,624,837,1008,624,624,624',
+'837,624,624,868,393,624,925,715,624,624,1023,624,575,624,394,624,1,624',
+'624,62,624,624,624,624,624,749,624,624,624,561,714,552,749,749,749,894',
+'1007,1026,749,749,894,749,624,798,348,624,624,624,624,348,624,711,624',
+'355,711,347,711,624,624,359,347,749,749,452,749,749,749,749,749,661',
+'631,1025,715,1008,716,651,1025,1005,926,1006,976,929,1005,926,1006,976',
+'929,828,356,713,1027,749,749,749,749,749,749,749,749,749,749,749,749',
+'749,749,317,421,749,749,749,384,749,434,1007,1008,749,715,384,749,1008',
+'1034,868,787,749,925,749,868,749,749,925,749,749,749,749,749,552,749',
+'443,749,716,552,651,232,841,443,443,443,41,41,435,443,443,749,443,1007',
+'749,749,631,749,1007,749,229,443,421,571,571,352,749,749,317,364,352',
+'26,443,443,384,443,443,443,443,443,651,969,716,651,897,832,897,787,969',
+'504,832,317,432,651,654,322,322,969,232,841,346,346,443,443,443,443',
+'443,443,443,443,443,443,443,443,443,443,422,229,443,443,443,364,443',
+'230,41,41,443,787,364,443,787,718,586,364,443,26,443,364,443,443,787',
+'443,443,443,443,443,969,443,443,443,652,987,987,504,504,504,364,571',
+'26,654,654,444,571,443,388,418,443,443,750,443,504,443,415,322,322,750',
+'750,750,443,443,230,750,750,718,750,946,364,946,946,946,718,946,770',
+'750,454,718,586,586,588,718,654,701,701,654,750,750,586,750,750,750',
+'750,750,297,654,3,413,652,297,718,3,815,410,815,815,815,24,815,404,388',
+'388,388,748,24,466,750,750,750,750,750,750,750,750,750,750,750,750,750',
+'750,718,770,750,750,750,467,750,468,652,469,750,652,395,750,588,588',
+'391,326,750,946,750,652,750,750,588,750,750,750,750,750,442,750,750',
+'750,622,491,607,442,442,442,748,495,24,442,442,342,442,750,342,965,750',
+'750,965,750,815,750,339,338,363,339,338,623,750,750,326,511,442,442',
+'17,442,442,442,442,442,326,512,395,395,395,367,391,391,391,607,667,382',
+'367,667,515,458,517,622,382,607,522,367,442,442,442,442,442,442,442',
+'442,442,442,442,442,442,442,363,525,442,442,442,17,442,363,623,534,442',
+'392,363,442,389,17,363,390,442,535,442,536,442,442,537,442,442,442,442',
+'442,100,442,549,442,367,363,458,100,100,100,382,553,100,100,100,564',
+'100,442,44,44,442,442,564,442,100,442,100,100,100,14,14,564,442,442',
+'554,363,100,100,555,100,100,100,100,100,556,392,392,392,389,389,389',
+'390,390,390,44,44,129,381,380,803,803,129,129,369,381,380,100,100,100',
+'100,100,100,100,100,100,100,100,100,100,100,564,357,100,100,100,228',
+'100,100,357,360,100,358,228,100,100,573,100,357,100,583,100,228,100',
+'100,591,100,100,100,100,100,379,100,103,100,593,354,599,379,353,103',
+'103,103,381,380,103,103,103,100,103,343,100,100,100,100,608,100,103',
+'100,103,103,103,341,100,100,82,340,357,613,103,103,228,103,103,103,103',
+'103,82,47,336,618,330,328,378,377,47,376,82,626,328,378,377,627,376',
+'47,628,379,630,328,103,103,103,103,103,103,103,103,103,103,103,103,103',
+'103,634,521,103,103,103,921,103,103,521,636,103,638,921,103,103,640',
+'103,521,103,327,103,921,103,103,323,103,103,103,103,103,47,103,625,103',
+'328,378,377,648,376,625,625,625,650,321,625,625,625,103,625,653,103',
+'103,103,103,656,103,657,103,625,625,625,316,103,103,660,315,521,662',
+'625,625,921,625,625,625,625,625,437,927,671,16,672,313,375,374,927,674',
+'16,675,313,375,374,676,685,927,312,16,693,313,625,625,625,625,625,625',
+'625,625,625,625,625,625,625,625,697,700,625,625,625,703,625,625,420',
+'709,625,437,436,625,625,420,625,712,625,306,625,437,625,625,420,625',
+'625,625,625,625,927,625,16,625,313,375,374,305,947,304,947,947,947,302',
+'947,39,721,625,301,38,625,625,625,625,725,625,289,625,447,436,286,744',
+'625,625,285,447,447,447,800,436,447,447,447,420,447,947,746,271,800',
+'755,238,479,234,447,447,447,447,1000,233,1000,1000,1000,39,1000,447',
+'447,38,447,447,447,447,447,39,655,231,776,38,311,786,790,655,800,800',
+'479,311,655,800,479,479,655,479,479,793,311,447,447,447,447,447,447',
+'447,447,447,447,447,447,447,447,794,310,447,447,447,799,814,447,310',
+'816,447,821,210,447,447,824,447,310,447,114,447,829,447,447,831,447',
+'447,447,447,447,655,447,447,447,311,835,836,839,309,840,812,46,812,812',
+'812,309,812,447,849,850,447,447,447,447,309,447,448,447,852,853,854',
+'908,447,448,448,448,310,856,448,448,448,908,448,857,858,480,859,812',
+'40,874,875,448,448,448,448,919,812,919,919,919,879,919,448,448,880,448',
+'448,448,448,448,882,719,883,309,908,908,885,480,719,908,888,480,480',
+'719,480,480,890,719,37,901,905,918,448,448,448,448,448,448,448,448,448',
+'448,448,448,448,448,922,22,448,448,448,928,948,448,15,955,448,958,465',
+'448,448,959,448,960,448,961,448,963,448,448,972,448,448,448,448,448',
+'719,448,448,448,686,13,686,686,686,889,686,889,889,889,465,889,12,448',
+'465,465,448,448,448,448,977,448,57,448,978,979,980,981,448,57,57,57',
+'982,983,57,57,57,686,57,531,985,988,889,1001,1002,1004,686,10,57,57',
+'57,889,7,,,531,531,,57,57,,57,57,57,57,57,891,,891,891,891,531,891,531',
+',531,531,,531,531,,,531,,531,,,,57,57,57,57,57,57,57,57,57,57,57,57',
+'57,57,,891,57,57,57,,,57,,,57,,,57,57,,57,,57,,57,,57,57,,57,57,57,57',
+'57,,57,,57,579,579,,,579,579,579,,1016,,1016,1016,1016,57,1016,,57,57',
+'57,57,,57,486,57,,,,,57,486,486,486,,,486,486,486,779,486,779,779,779',
+'779,779,,1016,,486,486,,,,779,,,484,,,486,486,,486,486,486,486,486,335',
+'335,335,335,335,484,484,,779,6,6,6,6,6,,,,779,779,779,779,484,,484,779',
+'484,484,,484,484,,,484,486,484,27,,,,,486,,27,27,27,486,486,27,27,27',
+'779,27,984,,984,984,984,,984,,27,27,27,300,300,300,300,300,486,486,',
+'27,27,,27,27,27,27,27,,,,,486,,,486,,,984,986,486,986,986,986,,986,',
+'486,,,27,27,27,27,27,27,27,27,27,27,27,27,27,27,,,27,27,27,,,27,,27',
+'27,,986,27,27,,27,,27,,27,,27,27,,27,27,27,27,27,28,27,27,27,,,,28,28',
+'28,,,28,28,28,,28,27,471,,27,27,,27,,27,28,28,,,,,27,,471,471,28,28',
+',28,28,28,28,28,509,509,509,509,509,,471,,471,,471,471,,471,471,,,,',
+',,,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,438,28,,,,,,438,438,438',
+',,438,438,438,28,438,472,28,28,,28,,28,,438,438,438,,,28,,,472,472,',
+'438,438,,438,438,438,438,438,,,,,,472,,,,472,472,,472,472,,,,,,,,,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,551,551,551,551,551',
+'551,438,,,551,551,,,,551,,551,551,551,551,551,551,551,,,,,,551,551,551',
+'551,551,551,551,,,551,,,,,425,551,551,551,551,551,551,551,551,551,551',
+'551,551,,551,551,551,,551,551,551,551,551,425,425,425,425,425,425,425',
+'425,425,425,425,,425,425,,,425,425,,551,,,551,,,551,551,,,551,,551,425',
+',425,551,425,425,,425,425,425,425,425,551,425,,,,551,551,551,551,,551',
+'551,551,551,,,,,551,551,,425,,425,,,551,,551,551,551,0,0,0,0,0,0,,,',
+'0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,431,0,0,0,0,0,0,0',
+'0,0,0,0,0,,0,0,0,,0,0,0,0,0,431,431,431,431,431,431,431,431,431,431',
+'431,,431,431,,,431,431,,0,,,0,,,0,0,,,0,,0,431,,431,0,431,431,,431,431',
+'431,431,431,0,431,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,431,,,,,0,,0,0,0,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,283,283,283,283',
+'283,283,283,283,283,283,283,,283,283,,,283,283,,308,,,308,,,308,308',
+',,308,,308,283,,283,308,283,283,,283,283,283,283,283,308,283,,,,308',
+'308,308,308,,308,308,308,308,,,,,308,308,,283,,,,,308,,308,308,308,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,752,752,752,752',
+'752,752,752,752,752,752,752,,752,752,,,752,752,,572,,,572,,,572,572',
+',,572,,572,752,,752,572,752,752,,752,752,752,752,752,572,752,,,,572',
+'572,572,572,,572,572,572,572,,,,,572,572,,752,,,,,572,,572,572,572,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,483,483,483,483',
+'483,483,483,483,483,483,483,,483,483,,,483,483,,351,,,351,,,351,351',
+',,351,,351,483,,483,351,483,483,,483,483,483,483,483,351,483,,,,351',
+'351,351,351,,351,351,351,351,,,,,351,351,483,483,,,,,351,,351,351,351',
+'924,924,924,924,924,924,,,,924,924,,,,924,,924,924,924,924,924,924,924',
+',,,,,924,924,924,924,924,924,924,,,924,,,,,,924,924,924,924,924,924',
+'924,924,924,924,924,924,,924,924,924,,924,924,924,924,924,846,846,846',
+'846,846,846,846,846,846,846,846,,846,846,,,846,846,,924,,,924,,,924',
+'924,,,924,,924,846,,846,924,846,846,,846,846,846,846,846,924,846,,,',
+'924,924,924,924,,924,924,924,924,,,,,924,924,,846,,,,,924,,924,924,924',
+'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,21,21,21,21',
+'21,21,21,21,21,21,21,,21,21,,,21,21,,792,,,792,,,792,792,,,792,,792',
+'21,,21,792,21,21,,21,21,21,21,21,792,21,,,,792,792,792,792,,792,792',
+'792,792,,,,,792,792,,21,,,,,792,,792,792,792,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,532,532,532,532,532,532,532,532,532',
+'532,532,,532,532,,,532,532,,736,,,736,,,736,736,,,736,,736,532,,532',
+'736,532,532,,532,532,532,532,532,736,532,,,,736,736,736,736,,736,736',
+'736,736,,,,,736,736,,532,,,,,736,,736,736,736,717,717,717,717,717,717',
+',,,717,717,,,,717,,717,717,717,717,717,717,717,,,,,,717,717,717,717',
+'717,717,717,,,717,,,,,,717,717,717,717,717,717,717,717,717,717,717,717',
+',717,717,717,,717,717,717,717,717,462,462,462,462,462,462,462,462,462',
+'462,462,,462,462,,,462,462,,717,,,717,,,717,717,,,717,,717,462,,462',
+'717,462,462,,462,462,462,462,462,717,462,,,,717,717,717,717,,717,717',
+'717,717,,,,,717,717,,,,,,,717,,717,717,717,303,303,303,303,303,303,',
+',,303,303,,,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303,303',
+'303,303,,,303,,,,,,303,303,303,303,303,303,303,303,303,303,303,303,',
+'303,303,303,,303,303,303,303,303,474,474,474,474,474,474,474,,,474,474',
+',,,,,474,474,,303,,,303,,,303,303,,,303,,303,474,,474,303,474,474,,474',
+'474,474,474,474,303,474,,,,303,303,303,303,,303,303,303,303,,,,,303',
+'303,,,,,,,303,,303,303,303,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,476,476,476,476,476,476,476,,,476,476,,,,,,476,476,',
+'781,,,781,,,781,781,,,781,,781,476,,476,781,476,476,,476,476,476,476',
+'476,781,476,,,,781,781,781,781,,781,781,781,781,,,,,781,781,,,,,,,781',
+',781,781,781,833,833,833,833,833,833,,,,833,833,,,,833,,833,833,833',
+'833,833,833,833,,,,,,833,833,833,833,833,833,833,,,833,,,,,,833,833',
+'833,833,833,833,833,833,833,833,833,833,,833,833,833,,833,833,833,833',
+'833,478,478,478,478,478,478,478,,,478,478,,,,,,478,478,,833,,,833,,',
+'833,833,,,833,,833,478,,478,833,478,478,,478,478,478,478,478,833,478',
+',,,833,833,833,833,,833,833,833,833,,,,,833,833,,,,,,,833,,833,833,833',
+'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,473,473,473',
+'473,473,473,473,,,473,473,,,,,,473,473,,726,,,726,,,726,726,,,726,,726',
+'473,,473,726,473,473,,473,473,473,473,473,726,473,,,,726,726,726,726',
+',726,726,726,726,,,,,726,726,,,,,,,726,,726,726,726,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,482,482,482,482,482,482,482',
+'482,,482,482,,,,,,482,482,,722,,,722,,,722,722,,,722,,722,482,,482,722',
+'482,482,,482,482,482,482,482,722,482,,,,722,722,722,722,,722,722,722',
+'722,,,,,722,722,,,,,,,722,,722,722,722,237,237,237,237,237,237,,,,237',
+'237,,,,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237,237',
+'237,,,237,,,,,,237,237,237,237,237,237,237,237,237,237,237,237,,237',
+'237,237,,237,237,237,237,237,481,481,481,481,481,481,481,,,481,481,',
+',,,,481,481,,237,,,237,,,237,237,,,237,,237,481,,481,237,481,481,,481',
+'481,481,481,481,237,481,,,,237,237,237,237,,237,237,237,237,,,,,237',
+'237,,,,,,,237,,237,237,237,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,827,,827,827,827,,827',
+'827,827,827,827,463,463,463,463,463,463,463,463,463,463,463,,463,463',
+',,463,463,,827,,,827,,,827,827,,,827,,827,463,,463,827,463,463,,463',
+'463,463,463,463,827,463,,,,827,827,827,827,,827,827,827,827,,,,,827',
+'827,,,,,,,827,,827,827,827,33,33,33,33,33,33,,,,33,33,,,,33,,33,33,33',
+'33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,33,33,33,33,33,33,33',
+'33,33,33,33,33,,33,33,33,,33,33,33,33,33,477,477,477,477,477,477,477',
+',,477,477,,,,,,477,477,,33,,,33,,,33,33,,,33,,33,477,,477,33,477,477',
+',477,477,477,477,477,33,477,,,,33,33,33,33,,33,33,33,33,,,,,33,33,,',
+',,,,33,,33,33,33,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,475,475,475,475,475,475,475,,,475,475,,,,,,475,475,,548,,,548',
+',,548,548,,,548,,548,475,,475,548,475,475,,475,475,475,475,475,548,475',
+',,,548,548,548,548,,548,548,548,548,,,,,548,548,,,,,,,548,,548,548,548',
+'350,350,350,350,350,350,,,,350,350,,,,350,,350,350,350,350,350,350,350',
+',,,,,350,350,350,350,350,350,350,,,350,,,,,,350,350,350,350,350,350',
+'350,350,350,350,350,350,,350,350,350,,350,350,350,350,350,470,,,,,,',
+',,,,,,,,,470,470,,350,,,350,,,350,350,,,350,,350,470,,470,350,470,470',
+',470,470,,,,350,,,,,350,350,350,350,,350,350,350,350,,,,,350,350,,,',
+',,,350,,350,350,350,334,334,334,334,334,334,,,,334,334,,,,334,,334,334',
+'334,334,334,334,334,,,,,,334,334,334,334,334,334,334,,,334,,,,,,334',
+'334,334,334,334,334,334,334,334,334,334,334,,334,334,334,,334,334,334',
+'334,334,,,,,,,,,,,,,,,,,,,,334,,,334,,,334,334,,,334,,334,,,,334,,,',
+',,,,,334,,,,,334,334,334,334,,334,334,334,334,,,,,334,334,,,,,,,334',
+',334,334,334,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,,,,,,,,,,,,,,,,,,,,127,,,127,,,127,127,,,127,,127,,,,127,,,,,,,',
+',127,,,,,127,127,127,127,,127,127,127,127,,,,,127,127,,,,,,,127,,127',
+'127,127,865,865,865,865,865,865,,,,865,865,,,,865,,865,865,865,865,865',
+'865,865,,,,,,865,865,865,865,865,865,865,,,865,,,,,,865,865,865,865',
+'865,865,865,865,865,865,865,865,,865,865,865,,865,865,865,865,865,,',
+',,,,,,,,,,,,,,,,,865,,,865,,,865,865,,,865,,865,,,,865,,,,,,,,,865,',
+',,,865,865,865,865,,865,865,865,865,,,,,865,865,,,,,,,865,,865,865,865',
+'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,,,,,,,,,,',
+',,,,,,,,,954,,,954,,,954,954,,,954,,954,,,,954,,,,,,,,,954,,,,,954,954',
+'954,954,,954,954,954,954,,,,,954,954,,,,,,,954,,954,954,954,212,212',
+'212,212,212,212,,,,212,212,,,,212,,212,212,212,212,212,212,212,,,,,',
+'212,212,212,212,212,212,212,,,212,,,,,,212,212,212,212,212,212,212,212',
+'212,212,212,212,,212,212,212,,212,212,212,212,212,,,,,,,,,,,,,,,,,,',
+',212,,,212,,,212,212,,,212,,212,,,,212,,,,,,,,,212,,,,,212,212,212,212',
+',212,212,212,212,,,,,212,212,,,,,,,212,,212,212,212,949,949,949,949',
+'949,949,,,,949,949,,,,949,,949,949,949,949,949,949,949,,,,,,949,949',
+'949,949,949,949,949,,,949,,,,,,949,949,949,949,949,949,949,949,949,949',
+'949,949,,949,949,949,,949,949,949,949,949,,,,,,,,,,,,,,,,,,,,949,,,949',
+',,949,949,,,949,,949,,,,949,,,,,,,,,949,,,,,949,949,949,949,,949,949',
+'949,949,,,,,949,949,,,,,,,949,,949,949,949,932,932,932,932,932,932,',
+',,932,932,,,,932,,932,932,932,932,932,932,932,,,,,,932,932,932,932,932',
+'932,932,,,932,,,,,,932,932,932,932,932,932,932,932,932,932,932,932,',
+'932,932,932,,932,932,932,932,932,,,,,,,,,,,,,,,,,,,,932,,,932,,,932',
+'932,,,932,,932,,,,932,,,,,,,,,932,,,,,932,932,932,932,,932,932,932,932',
+',,,,932,932,,,,,,,932,,932,932,932,847,847,847,847,847,847,,,,847,847',
+',,,847,,847,847,847,847,847,847,847,,,,,,847,847,847,847,847,847,847',
+',,847,,,,,,847,847,847,847,847,847,847,847,847,847,847,847,,847,847',
+'847,,847,847,847,847,847,,,,,,,,,,,,,,,,,,,,847,,,847,,,847,847,,,847',
+',847,,,,847,,,,,,,,,847,,,,,847,847,847,847,,847,847,847,847,,,,,847',
+'847,,,,,,,847,,847,847,847,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,931,931,931,,931,931,931,931,,,,,931,931,,',
+',225,225,225,931,225,931,931,931,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,225,,,771,771,771,225,771,225,225,225',
+'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',
+',,,769,769,769,771,769,771,771,771,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,,,,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,,,,236,236,236,767,236,767,767,767',
+'236,236,,,,236,,236,236,236,236,236,236,236,,,,,,236,236,236,236,236',
+'236,236,,,236,,,,,,,236,,,236,236,236,236,236,236,236,236,,236,236,236',
+',236,236,236,236,236,,,,,,,,,,,,,,,,,,,,236,,,236,,,236,236,,,236,,',
+',,,236,,,,,,,,,236,,,,,236,236,236,236,,236,236,236,236,,,,,236,236',
+',,,766,766,766,236,766,236,236,236,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,,,,239,239,239,766,239,766,766,766',
+'239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239,239,239,239,239',
+'239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239,239,,239,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,,,,259,259,259,258,259,258,258,258',
+'259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259,259,259,259,259',
+'259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259,259,259',
+',259,259,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259,,,259,,',
+',,,259,,,,,,,,,259,,,,,259,259,259,259,,259,259,259,259,,,,,259,259',
+',,,260,260,260,259,260,259,259,259,260,260,,,,260,,260,260,260,260,260',
+'260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,,,260,,,260,260,260',
+'260,260,260,260,260,,260,260,260,,260,260,260,260,260,,,,,,,,,,,,,,',
+',,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,,260,,,,,260,260,260',
+'260,,260,260,260,260,,,,,260,260,,,,265,265,265,260,265,260,260,260',
+'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',
+',,,753,753,753,265,753,265,265,265,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,,,,272,272,272,753,272,753,753,753',
+'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,,,,273,273,273,272,273,272,272,272,273,273,,,,273,,273,273',
+'273,273,273,273,273,,,,,,273,273,273,273,273,273,273,,,273,,,,,,,273',
+',,273,273,273,273,273,273,273,273,273,273,273,273,,273,273,273,273,273',
+',,,,,,,,,,,,,,,,,,,273,,,273,,,273,273,,,273,,273,,273,,273,,,273,,',
+',,,273,,,,,273,273,273,273,,273,273,273,273,,,,,273,273,,,,281,281,281',
+'273,281,273,273,273,281,281,,,,281,,281,281,281,281,281,281,281,,,,',
+',281,281,281,281,281,281,281,,,281,,,,,,,281,,,281,281,281,281,281,281',
+'281,281,281,281,281,281,,281,281,281,281,281,,,,,,,,,,,,,,,,,,,,281',
+',,281,,,281,281,,,281,,281,,281,,281,,,281,,,,,,281,,,,,281,281,281',
+'281,,281,281,281,281,,,,,281,281,281,,,745,745,745,281,745,281,281,281',
+'745,745,,,,745,,745,745,745,745,745,745,745,,,,,,745,745,745,745,745',
+'745,745,,,745,,,,,,,745,,,745,745,745,745,745,745,745,745,,745,745,745',
+',745,745,745,745,745,,,,,,,,,,,,,,,,,,,,745,,,745,,,745,745,,,745,,',
+',,,745,,,,,,,,,745,,,,,745,745,745,745,,745,745,745,745,,,,,745,745',
+',,,288,288,288,745,288,745,745,745,288,288,,,,288,,288,288,288,288,288',
+'288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,,,288,,,288,288,288',
+'288,288,288,288,288,,288,288,288,,288,288,288,288,288,,,,,,,,,,,,,,',
+',,,,,288,,,288,,,288,288,,,288,,,,,,288,,,,,,,,,288,,,,,288,288,288',
+'288,,288,288,288,288,,,,,288,288,,,,290,290,290,288,290,288,288,288',
+'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',
+',,,293,293,293,290,293,290,290,290,293,293,,,,293,,293,293,293,293,293',
+'293,293,,,,,,293,293,293,293,293,293,293,,,293,,,,,,,293,,,293,293,293',
+'293,293,293,293,293,,293,293,293,,293,293,293,293,293,,,,,,,,,,,,,,',
+',,,,,293,,,293,,,293,293,,,293,,,,,,293,,,,,,,,,293,,,,,293,293,293',
+'293,,293,293,293,293,,,,,293,293,,,,294,294,294,293,294,293,293,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,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,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,299,299,,299,299,299,299,,,,,299,299,,,,723,723,723',
+'299,723,299,299,299,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,,,,542,542,542,723,542,723,723,723,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,542,,,,,,,542',
+',542,542,542,5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5,5',
+',,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,,,,,,,,,,,',
+',,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,,5,5,5,5,,,,,5,5,,,',
+'973,973,973,5,973,5,5,5,973,973,,,,973,,973,973,973,973,973,973,973',
+',,,,,973,973,973,973,973,973,973,,,973,,,,,,,973,,,973,973,973,973,973',
+'973,973,973,973,973,973,973,,973,973,973,973,973,,,,,,,,,,,,,,,,,,,',
+'973,,,973,,,973,973,,,973,,973,,973,,973,,,973,,,,,,973,,,,,973,973',
+'973,973,,973,973,973,973,,,,,973,973,,,,20,20,20,973,20,973,973,973',
+'20,20,,,,20,,20,20,20,20,20,20,20,,,,,,20,20,20,20,20,20,20,,,20,,,',
+',,,20,,,20,20,20,20,20,20,20,20,,20,20,20,,20,20,20,20,20,,,,,,,,,,',
+',,,,,,,,,20,,,20,,,20,20,,,20,,,,,,20,,,,,,,,,20,,,,,20,20,20,20,,20',
+'20,20,20,,,,,20,20,,,,920,920,920,20,920,20,20,20,920,920,,,,920,,920',
+'920,920,920,920,920,920,,,,,,920,920,920,920,920,920,920,,,920,,,,,',
+',920,,,920,920,920,920,920,920,920,920,,920,920,920,,920,920,,,920,',
+',,,,,,,,,,,,,,,,,,920,,,920,,,920,920,,,920,,,,,,,,,,,,,,,,,,,,920,920',
+'920,920,,920,920,920,920,,,,,920,920,,,,29,29,29,920,29,920,920,920',
+'29,29,,,,29,,29,29,29,29,29,29,29,,,,,,29,29,29,29,29,29,29,,,29,,,',
+',,,29,,,29,29,29,29,29,29,29,29,29,29,29,29,,29,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,,,1028,,1028,1028,1028,1028,1028,,,,,,,,,1028,,35,35,35',
+'35,,35,35,35,35,,,,,35,35,,,,35,,1028,35,,35,35,35,869,869,869,,869',
+'1028,1028,,869,869,1028,,,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',
+',,,860,860,860,869,860,869,869,869,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,,,,42,42,42,860,42,860,860,860,42,42,,,,42,,42,42,42',
+'42,42,42,42,,,,,,42,42,42,42,42,42,42,,,42,,,,,,,42,,,42,42,42,42,42',
+'42,42,42,,42,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,,,,845,845,845,45,845,45,45,45,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,,,,844,844,844,845,844',
+'845,845,845,844,844,,,,844,,844,844,844,844,844,844,844,,,,,,844,844',
+'844,844,844,844,844,,,844,,,,,,,844,,,844,844,844,844,844,844,844,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,59,59,59,59,59,,,,59,59,',
+',,59,,59,59,59,59,59,59,59,,,,,,59,59,59,59,59,59,59,,,59,,,,,,59,59',
+',59,59,59,59,59,59,59,59,59,,59,59,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,,,915,,915,915,915',
+'915,915,,,,,,,,,915,,71,71,71,71,,71,71,71,71,,,,,71,71,,,,,,915,71',
+',71,71,71,116,116,116,116,116,915,915,,116,116,915,,,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,,,,122,,122,122,122,122,122,122,122,,,,,,122,122,122,122,122',
+'122,122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122,,122,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,,,,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,,,,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,,,,826,826,826',
+'125,826,125,125,125,826,826,,,,826,,826,826,826,826,826,826,826,,,,',
+',826,826,826,826,826,826,826,,,826,,,,,,,826,,,826,826,826,826,826,826',
+'826,826,,826,826,826,,826,826,826,826,826,,,,,,,,,,,,,,,,,,,,826,,,826',
+',,826,826,,,826,,826,,,,826,,,,,,,,,826,,,,,826,826,826,826,,826,826',
+'826,826,,,,,826,826,,,,823,823,823,826,823,826,826,826,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,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,,,,213,213,213',
+'823,213,823,823,823,213,213,,,,213,,213,213,213,213,213,213,213,,,,',
+',213,213,213,213,213,213,213,,,213,,,,,,,213,,,213,213,213,213,213,213',
+'213,213,,213,213,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,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,,,,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,218,218,,,,,218',
+'218,,,,810,810,810,218,810,218,218,218,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,,,,223,223,223,810,223,810,810',
+'810,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,223,224,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,,,,307,307,307,224,307,224,224,224',
+'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,,,992,,992',
+'992,992,992,992,,,,,,,,,992,,307,307,307,307,,307,307,307,307,,,,,307',
+'307,,,,307,,992,307,,307,307,307,689,689,689,,689,992,992,,689,689,992',
+',,689,,689,689,689,689,689,689,689,,,,,,689,689,689,689,689,689,689',
+',,689,,,,,,,689,,,689,689,689,689,689,689,689,689,,689,689,689,,689',
+'689,689,689,689,,,,,,,,,,,,,,,,,,,,689,,,689,,,689,689,,,689,,,,,,689',
+',,,,,,,,689,,,,,689,689,689,689,,689,689,689,689,,,,,689,689,,,,663',
+'663,663,689,663,689,689,689,663,663,,,,663,,663,663,663,663,663,663',
+'663,,,,,,663,663,663,663,663,663,663,,,663,,,,,,,663,,,663,663,663,663',
+'663,663,663,663,,663,663,663,,663,663,663,663,663,,,,,,,,,,,,,,,,,,',
+',663,,,663,,,663,663,,,663,,663,,,,663,,,,,,,,,663,,,,,663,663,663,663',
+',663,663,663,663,,,,,663,663,,,,658,658,658,663,658,663,663,663,658',
+'658,,,,658,,658,658,658,658,658,658,658,,,,,,658,658,658,658,658,658',
+'658,,,658,,,,,,,658,,,658,658,658,658,658,658,658,658,,658,658,658,',
+'658,658,,,658,,,,,,,,,,,,,,,,,,,,658,,,658,,,658,658,,,658,,,,,,,,,',
+',,,,,,,,,,658,658,658,658,,658,658,658,658,,,,,658,658,,,,647,647,647',
+'658,647,658,658,658,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,,,,324,324,324,647,324,647,647,647,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,,,,644,644,644,324,644,324,324,324,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,,,,641',
+'641,641,644,641,644,644,644,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,,,,331,331,331,641,331,641,641,641,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,',
+',,333,333,333,331,333,331,331,331,333,333,,,,333,,333,333,333,333,333',
+'333,333,,,,,,333,333,333,333,333,333,333,,,333,,,,,,,333,,,333,333,333',
+'333,333,333,333,333,,333,333,333,,333,333,333,333,333,,,,,,,,,,,,,,',
+',,,,,333,,,333,333,,333,333,,,333,,,,,,333,,,,,,,,,333,,,,,333,333,333',
+'333,,333,333,333,333,,,,,333,333,,,,617,617,617,333,617,333,333,333',
+'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,,,,612,612,612,616,612,616,616,616',
+'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',
+',,,611,611,611,612,611,612,612,612,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,,,,610,610,610,611,610,611,611,611',
+'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,,,,',
+'610,610,,,,609,609,609,610,609,610,610,610,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,,609,609,609,609,,,,,609,609,,,,606,606,606',
+'609,606,609,609,609,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,,,,,606,606,,,,,,,606,,606,606,606,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,,605,605,605,605,,,,,605,605',
+',,,602,602,602,605,602,605,605,605,602,602,,,,602,,602,602,602,602,602',
+'602,602,,,,,,602,602,602,602,602,602,602,,,602,,,,,,,602,,,602,602,602',
+'602,602,602,602,602,602,602,602,602,,602,602,602,602,602,,,,,,,,,,,',
+',,,,,,,,602,,,602,,,602,602,,,602,,602,,602,,602,,,602,,,,,,602,,,,',
+'602,602,602,602,,602,602,602,602,,,,,602,602,,,,349,349,349,602,349',
+'602,602,602,349,349,,,,349,,349,349,349,349,349,349,349,,,,,,349,349',
+'349,349,349,349,349,,,349,,,,,,,349,,,349,349,349,349,349,349,349,349',
+',349,349,349,,349,349,349,349,349,,,,,,,,,,,,,,,,,,,,349,,,349,,,349',
+'349,,,349,,,,,,349,,,,,,,,,349,,,,,349,349,349,349,,349,349,349,349',
+',,,,349,349,,,,601,601,601,349,601,349,349,349,601,601,,,,601,,601,601',
+'601,601,601,601,601,,,,,,601,601,601,601,601,601,601,,,601,,,,,,,601',
+',,601,601,601,601,601,601,601,601,,601,601,601,,601,601,601,601,601',
+',,,,,,,,,,,,,,,,,,,601,,,601,,,601,601,,,601,,,,,,601,,,,,,,,,601,,',
+',,601,601,601,601,,601,601,601,601,,,,,601,601,,,,600,600,600,601,600',
+'601,601,601,600,600,,,,600,,600,600,600,600,600,600,600,,,,,,600,600',
+'600,600,600,600,600,,,600,,,,,,,600,,,600,600,600,600,600,600,600,600',
+',600,600,600,,600,600,600,600,600,,,,,,,,,,,,,,,,,,,,600,,,600,,,600',
+'600,,,600,,600,,,,600,,,,,,,,,600,,,,,600,600,600,600,,600,600,600,600',
+',,,,600,600,,,,568,568,568,600,568,600,600,600,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,,,568,,',
+',,,568,,,,,568,568,568,568,,568,568,568,568,,,,,568,568,,,,558,558,558',
+'568,558,568,568,568,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,,,,370,370,370,558,370,558,558,558',
+'370,370,,,,370,,370,370,370,370,370,370,370,,,,,,370,370,370,370,370',
+'370,370,,,370,,,,,,,370,,,370,370,370,370,370,370,370,370,,370,370,370',
+',370,370,370,370,370,,,,,,,,,,,,,,,,,,,,370,,,370,,,370,370,,,370,,',
+',,,370,,,,,,,,,370,,,,,370,370,370,370,,370,370,370,370,,,,,370,370',
+',,,557,557,557,370,557,370,370,370,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,,,,,557,557,,,,539,539,539,557,539,557,557,557',
+'539,539,,,,539,,539,539,539,539,539,539,539,,,,,,539,539,539,539,539',
+'539,539,,,539,,,,,,,539,,,539,539,539,539,539,539,539,539,539,539,539',
+'539,,539,539,539,539,539,,,,,,,,,,,,,,,,,,,,539,,,539,,,539,539,,,539',
+',539,,,,539,,,539,,,,,,539,,,,,539,539,539,539,,539,539,539,539,,,,',
+'539,539,,,,533,533,533,539,533,539,539,539,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,,,,528,528,528,533,528,533',
+'533,533,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,,,,527,527,527,528,527,528,528,528,527,527,,,,527,,527,527,527',
+'527,527,527,527,,,,,,527,527,527,527,527,527,527,,,527,,,,,,,527,,,527',
+'527,527,527,527,527,527,527,,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,,,,524,524,524,527,524,527',
+'527,527,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,,,,386',
+'386,386,524,386,524,524,524,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,,,,518,518,518,386,518,386,386,386,518',
+'518,,,,518,,518,518,518,518,518,518,518,,,,,,518,518,518,518,518,518',
+'518,,,518,,,,,,,518,,,518,518,518,518,518,518,518,518,518,518,518,518',
+',518,518,518,518,518,,,,,,,,,,,,,,,,,,,,518,,,518,,,518,518,,,518,,518',
+',518,,518,,,518,,,,,,518,,,,,518,518,518,518,,518,518,518,518,,,,,518',
+'518,,,,516,516,516,518,516,518,518,518,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,,,994,,994,994,994,994,994,,,,,,,,,994',
+',516,516,516,516,,516,516,516,516,,,,,516,516,,,,,,994,516,,516,516',
+'516,508,508,508,508,508,994,994,,508,508,994,,,508,,508,508,508,508',
+'508,508,508,,,,,,508,508,508,508,508,508,508,,,508,,,,,,508,508,508',
+'508,508,508,508,508,508,508,508,508,,508,508,508,,508,508,508,508,508',
+',,,,,,,,,,,,,,,,,,,508,,,508,,,508,508,,,508,,508,,,,508,,,,,,,,,508',
+',,,,508,508,508,508,,508,508,508,508,,,,,508,508,,,,,,508,508,,508,508',
+'508,502,502,502,,502,,,,502,502,,,,502,,502,502,502,502,502,502,502',
+',,,,,502,502,502,502,502,502,502,,,502,,,,,,,502,,,502,502,502,502,502',
+'502,502,502,,502,502,502,,502,502,502,502,502,,,,,,,,,,,,,,,,,,,,502',
+',,502,,,502,502,,,502,,,,,,502,,,,,,,,,502,,,,,502,502,502,502,,502',
+'502,502,502,,,,,502,502,,,,500,500,500,502,500,502,502,502,500,500,',
+',,500,,500,500,500,500,500,500,500,,,,,,500,500,500,500,500,500,500',
+',,500,,,,,,,500,,,500,500,500,500,500,500,500,500,500,500,500,500,,500',
+'500,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500,,,500,500,,,500,,,,500',
+',500,,,500,,,,,,500,,,,,500,500,500,500,,500,500,500,500,,,,,500,500',
+',,,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,498,,,,461,461,461,498,461',
+'498,498,498,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',
+',,,,461,461,,,,460,460,460,461,460,461,461,461,460,460,,,,460,,460,460',
+'460,460,460,460,460,,,,,,460,460,460,460,460,460,460,,,460,,,,,,,460',
+',,460,460,460,460,460,460,460,460,,460,460,460,,460,460,460,460,460',
+',,,,,,,,,,,,,,,,,,,460,,,460,,,460,460,,,460,,,,,,460,,,,,,,,,460,,',
+',,460,460,460,460,,460,460,460,460,,,,,460,460,,,,459,459,459,460,459',
+'460,460,460,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,,,,457,457,457,459,457,459,459,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,,,,414,414,414',
+'457,414,457,457,457,414,414,,,,414,,414,414,414,414,414,414,414,,,,',
+',414,414,414,414,414,414,414,,,414,,,,,,,414,,,414,414,414,414,414,414',
+'414,414,,414,414,414,,414,414,414,414,414,,,,,,,,,,,,,,,,,,,,414,,,414',
+',,414,414,,,414,,,,,,414,,,,,,,,,414,,,,,414,414,414,414,,414,414,414',
+'414,,,,,414,414,,,,,,,414,,414,414,414,597,597,597,597,597,597,597,597',
+'597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,,,,597',
+'597,597,597,597,597,597,597,597,597,,,,,,597,597,597,597,597,597,597',
+'597,597,,,597,,,,,,,,597,597,,597,597,597,597,597,597,597,,,597,597',
+',,,597,597,597,597,,,,,,,,,,,,,,597,597,,597,597,597,597,597,597,597',
+'597,597,597,597,597,,,597,597,,,,,,,,,,,,,,597,405,405,405,405,405,405',
+'405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405',
+'405,,,,405,405,405,405,405,405,405,405,405,405,,,,,,405,405,405,405',
+'405,405,405,405,405,,,405,,,,,,,,405,405,,405,405,405,405,405,405,405',
+',,405,405,,,,405,405,405,405,,,,,,,,,,,,,,405,405,,405,405,405,405,405',
+'405,405,405,405,405,405,405,,,405,405,,,,,,,,,,,,,,405,9,9,9,9,9,9,9',
+'9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,,,,9,9,9,9,9,9,9,9,9,9,,,,,,9,9,9',
+'9,9,9,9,9,9,,,9,,,,,,,,9,9,,9,9,9,9,9,9,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,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,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',
+'729,,,729,729,,,,729,729,729,729,,,,,,,,,,,,,,729,729,,729,729,729,729',
+'729,729,729,729,729,729,729,729,529,529,729,,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,560,560,529',
+',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,604,604,560,,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,603,603,604,,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,219,219',
+'603,,219,,,,,,,,219,219,,219,219,219,219,219,219,219,,,219,219,,,,219',
+'219,219,219,,,,,,219,,,,,,,,219,219,,219,219,219,219,219,219,219,219',
+'219,219,219,219,268,268,219,,268,,,,,,,,268,268,,268,268,268,268,268',
+'268,268,,,268,268,,,,268,268,268,268,,,,,,,,,,,,,,268,268,,268,268,268',
+'268,268,268,268,268,268,268,268,268,220,220,268,,220,,,,,,,,220,220',
+',220,220,220,220,220,220,220,,,220,220,,,,220,220,220,220,,,,,,220,',
+',,,,,,220,220,,220,220,220,220,220,220,220,220,220,220,220,220,456,456',
+'220,,456,,,,,,,,456,456,,456,456,456,456,456,456,456,,,456,456,,,,456',
+'456,456,456,,,,,,456,,,,,,,,456,456,,456,456,456,456,456,456,456,456',
+'456,456,456,456,455,455,456,,455,,,,,,,,455,455,,455,455,455,455,455',
+'455,455,,,455,455,,,,455,455,455,455,,,,,,455,,,,,,,,455,455,,455,455',
+'455,455,455,455,455,455,455,455,455,455,975,975,455,,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,567',
+'567,975,,567,,,,,,,,567,567,,567,567,567,567,567,567,567,,,567,567,',
+',,567,567,567,567,,,,,,567,,,,,,,,567,567,,567,567,567,567,567,567,567',
+'567,567,567,567,567,566,566,567,,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,974,974,566,,974,,,,,,,',
+'974,974,,974,974,974,974,974,974,974,,,974,974,,,,974,974,974,974,,',
+',,,974,,,,,,,,974,974,,974,974,974,974,974,974,974,974,974,974,974,974',
+'970,970,974,,970,,,,,,,,970,970,,970,970,970,970,970,970,970,,,970,970',
+',,,970,970,970,970,,,,,,970,,,,,,,,970,970,,970,970,970,970,970,970',
+'970,970,970,970,970,970,519,519,970,,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,520,520,519,,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,559,559,520,,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,530,530,559,,530,,,,,,,,530,530,,530,530',
+'530,530,530,530,530,,,530,530,,,,530,530,530,530,,,,,,530,,,,,,,,530',
+'530,,530,530,530,530,530,530,530,530,530,530,530,530,,806,530,806,806',
+'806,806,806,,728,,728,728,728,728,728,806,,,,,,,,728,,990,,990,990,990',
+'990,990,,,,,,806,,,990,,,,,728,806,806,806,806,,,,806,728,728,728,728',
+',,,728,990,,911,,911,911,911,911,911,990,990,990,990,,,,990,911,,913',
+',913,913,913,913,913,,727,,727,727,727,727,727,913,,,,,911,,,727,,,',
+',,911,911,911,911,,,,911,913,,,,,,,,727,913,913,913,913,,,,913,727,727',
+'727,727,,,996,727,996,996,996,996,996,,935,,935,935,935,935,935,996',
+',,,,,,,935,,937,,937,937,937,937,937,,,,,,996,,,937,,,,,935,,,996,996',
+',,,996,935,935,935,935,,,,935,937,,939,,939,939,939,939,939,,,937,937',
+',,,937,939,,941,,941,941,941,941,941,1011,,1011,1011,1011,1011,1011',
+',941,,,,,939,,1011,,669,,669,669,669,669,669,939,939,,,,939,941,,669',
+',,,,1011,,,,941,941,,,,941,,1011,1011,,,,1011,669,,547,,547,547,547',
+'547,547,669,669,669,669,,,,669,547,,804,,804,804,804,804,804,808,,808',
+'808,808,808,808,,804,,,,,547,547,808,,,,,,,547,547,547,547,,,,547,804',
+',,,,,,808,,804,804,804,804,,,,804,,808,808,,,,808' ]
+ racc_action_check = arr = ::Array.new(24631, 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 = [
+ 1920, 101, nil, 270, nil, 11209, 1358, 1126, 22816, 22688,
+ 1121, nil, 1055, 1044, 567, 1074, 768, 416, nil, -79,
+ 11471, 2620, 1126, nil, 334, nil, 232, 1423, 1533, 11733,
+ 11864, 11995, nil, 4020, 12126, 12257, nil, 1001, 841, 837,
+ 1039, 171, 12658, 12789, 521, 12920, 927, 654, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 1208, nil, 13321,
+ 13452, 13583, -8, nil, 13714, 13845, nil, nil, 13976, 14115,
+ 14246, 14377, 22944, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, 602, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 574, nil, nil, 686, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 1035, nil, 14516, nil, nil, nil,
+ nil, 14655, 14786, 14917, 15048, 15187, nil, 4580, nil, 577,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 895, nil, 5000, 15580, 15711, 15842, 15973, 16104, 16235, 23362,
+ 23484, nil, nil, 16497, 16628, 5691, nil, nil, 582, 160,
+ 223, 927, 141, 823, 874, nil, 6346, 3740, 869, 6608,
+ 6739, 6870, 7001, 7132, 7263, 7394, 7525, 7656, 7787, 7918,
+ 8049, 8180, 8311, 8442, 8573, 8704, 8835, 8966, 9097, 9228,
+ 9359, nil, nil, nil, nil, 9490, nil, nil, 23423, nil,
+ nil, 859, 9752, 9883, nil, nil, nil, nil, nil, nil,
+ nil, 10014, nil, 2060, nil, 809, 805, nil, 10276, 847,
+ 10407, nil, nil, 10538, 10669, nil, nil, 268, nil, 10808,
+ 1412, 814, 778, 3040, 787, 825, 764, 16759, 2060, 977,
+ 940, 908, 805, 770, nil, 742, 697, 165, nil, nil,
+ nil, 720, 220, 657, 17422, nil, 365, 719, 658, nil,
+ 668, 17815, nil, 17946, 4440, 1349, 602, nil, 361, 360,
+ 625, 602, 349, 616, nil, nil, 250, 10, -1, 19264,
+ 4300, 2340, 121, 676, 554, 5, 40, 578, 610, 11,
+ 639, nil, nil, 467, 230, -21, nil, 436, nil, 530,
+ 19919, nil, nil, nil, 772, 771, 662, 660, 659, 607,
+ 555, 554, 442, nil, 118, nil, 20836, nil, 290, 498,
+ 501, 390, 495, -37, -27, 386, nil, nil, nil, nil,
+ nil, nil, nil, nil, 300, 22560, nil, nil, nil, nil,
+ 294, nil, nil, 268, 22293, 225, nil, nil, 208, nil,
+ 809, 105, 259, nil, nil, 1780, nil, nil, nil, nil,
+ nil, 1920, 148, nil, 64, 101, 804, 756, 1645, nil,
+ nil, nil, 464, 222, 258, nil, nil, 936, 1072, nil,
+ nil, nil, 18, nil, 290, 23606, 23545, 22162, 437, 22031,
+ 21900, 21769, 2900, 3880, -46, 1098, 353, 373, 375, 377,
+ 4300, 1485, 1596, 3460, 3040, 4160, 3180, 4020, 3320, 893,
+ 1025, 3740, 3600, 2340, 1311, nil, 1344, nil, nil, nil,
+ nil, 339, nil, nil, nil, 345, nil, nil, 21638, nil,
+ 21507, nil, 21376, nil, 215, nil, nil, nil, 21237, 1538,
+ nil, 369, 376, nil, nil, 389, 21098, 394, 20967, 23972,
+ 24033, 690, 439, nil, 20705, 412, nil, 20574, 20443, 23118,
+ 24155, 1159, 2760, 20312, 546, 554, 435, 478, nil, 20181,
+ nil, nil, 11070, nil, nil, nil, nil, 24502, 4160, 564,
+ nil, 1780, 90, 576, 599, 596, 609, 20050, 19788, 24094,
+ 23179, -19, nil, nil, 512, nil, 23789, 23728, 19657, nil,
+ nil, 213, 2200, 580, nil, -33, nil, nil, nil, 1269,
+ nil, nil, nil, 554, nil, nil, 258, nil, 324, nil,
+ nil, 544, nil, 554, nil, nil, nil, 22432, nil, 557,
+ 19526, 19395, 19133, 23301, 23240, 19002, 18863, 384, 614, 18732,
+ 18601, 18470, 18339, 625, nil, nil, 18208, 18077, 637, nil,
+ nil, nil, 382, 409, 0, 798, 611, 613, 739, nil,
+ 723, 130, nil, nil, 653, -50, 766, nil, 644, nil,
+ 694, 17684, nil, nil, 17553, nil, -112, 17291, 670, nil,
+ 678, 136, 312, 726, 256, 904, 731, 689, 17160, nil,
+ 764, 24, 819, 17029, nil, nil, nil, 388, nil, 24463,
+ nil, 711, 713, nil, 718, 720, 724, nil, nil, nil,
+ nil, nil, nil, nil, nil, 715, 1135, nil, nil, 16898,
+ nil, nil, nil, 811, nil, nil, nil, 827, nil, nil,
+ 828, 374, nil, 869, nil, nil, nil, nil, nil, 878,
+ nil, 6, 765, 41, -18, 68, 135, 2900, 292, 1040,
+ nil, 794, 3600, 10939, nil, 923, 3460, 24306, 24225, 23057,
+ nil, nil, nil, nil, nil, nil, 2760, nil, nil, nil,
+ nil, nil, nil, nil, 806, 10145, 824, -85, 331, 110,
+ 354, nil, 2200, 9621, nil, 824, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 6477, 6215, 6084, 5953,
+ 292, 5822, nil, -59, nil, nil, 870, nil, nil, 1308,
+ nil, 3180, nil, nil, nil, nil, 853, 183, nil, nil,
+ 979, nil, 2620, 867, 929, nil, nil, nil, -9, 891,
+ 890, nil, nil, 534, 24519, nil, 24217, nil, 24526, nil,
+ 16366, nil, 1005, nil, 889, 355, 895, nil, nil, nil,
+ nil, 1018, nil, 15449, 1022, nil, 15318, 3880, 39, 1028,
+ nil, 1031, 141, 3320, nil, 1042, 922, -50, nil, 926,
+ 922, 142, nil, nil, 13182, 13051, 2480, 5420, nil, 931,
+ 932, nil, 941, 942, 943, nil, 974, 959, 955, 949,
+ 12527, nil, nil, nil, nil, 4720, nil, nil, 76, 12396,
+ nil, nil, nil, nil, 1005, 963, nil, nil, nil, 973,
+ 977, nil, 983, 985, nil, 989, nil, nil, 996, 1140,
+ 999, 1201, nil, nil, -10, nil, nil, 256, nil, nil,
+ nil, 1126, nil, nil, nil, 1047, nil, nil, 1021, nil,
+ nil, 24281, nil, 24298, nil, 14424, nil, nil, 1028, 1050,
+ 11602, 694, 1097, nil, 2480, 79, 33, 766, 1102, 36,
+ nil, 5560, 5280, nil, nil, 24366, nil, 24383, nil, 24422,
+ nil, 24439, nil, nil, nil, nil, 320, 865, 1025, 5140,
+ nil, nil, nil, nil, 4860, 1028, nil, nil, 1030, 1034,
+ 1036, 1038, nil, 1040, nil, 353, nil, nil, nil, 190,
+ 23911, nil, 1169, 11340, 23850, 23667, 35, 1093, 1201, 1078,
+ 1079, 1080, 1085, 1086, 1389, 1093, 1427, 324, 1218, nil,
+ 24242, nil, 16806, nil, 21145, nil, 24358, nil, nil, nil,
+ 914, 1140, 1141, nil, 1101, 32, 34, 109, 69, nil,
+ nil, 24446, nil, nil, nil, nil, 1279, -101, nil, nil,
+ -84, -80, -71, -38, nil, 26, -11, 42, 12304, nil,
+ nil, nil, nil, nil, 72, nil ]
+
+racc_action_default = [
+ -3, -611, -1, -597, -4, -611, -7, -611, -611, -611,
+ -611, -30, -611, -611, -34, -611, -611, -289, -46, -599,
+ -611, -51, -55, -56, -57, -61, -266, -266, -266, -302,
+ -332, -333, -73, -12, -77, -85, -87, -611, -501, -502,
+ -611, -611, -611, -611, -225, -611, -599, -239, -280, -281,
+ -282, -283, -284, -285, -286, -287, -288, -585, -291, -295,
+ -610, -575, -310, -312, -611, -611, -53, -53, -597, -611,
+ -611, -611, -611, -334, -335, -337, -338, -339, -340, -442,
+ -443, -444, -445, -446, -467, -449, -450, -469, -471, -454,
+ -459, -463, -465, -481, -467, -483, -485, -486, -487, -488,
+ -583, -490, -491, -584, -493, -494, -495, -496, -497, -498,
+ -499, -500, -505, -506, -611, -2, -598, -606, -607, -608,
+ -6, -611, -611, -611, -611, -611, -8, -3, -18, -611,
+ -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, -611, -611, -611, -611, -611, -256, -611,
+ -611, -595, -596, -611, -611, -599, -600, -50, -611, -501,
+ -502, -611, -289, -611, -611, -231, -611, -12, -611, -210,
+ -211, -611, -611, -611, -611, -611, -611, -611, -611, -611,
+ -611, -611, -611, -611, -611, -611, -611, -611, -611, -611,
+ -611, -240, -241, -242, -243, -611, -406, -408, -611, -593,
+ -594, -62, -256, -611, -309, -412, -421, -423, -68, -418,
+ -69, -599, -70, -246, -261, -270, -270, -265, -611, -271,
+ -611, -467, -577, -611, -611, -71, -72, -597, -13, -611,
+ -16, -611, -75, -12, -599, -611, -78, -81, -12, -93,
+ -94, -611, -611, -101, -302, -305, -599, -611, -332, -333,
+ -336, -419, -611, -83, -611, -89, -299, -484, -611, -219,
+ -220, -611, -232, -611, -12, -293, -599, -247, -603, -603,
+ -611, -611, -603, -611, -311, -397, -52, -611, -611, -611,
+ -12, -12, -597, -611, -598, -501, -502, -611, -611, -289,
+ -611, -350, -351, -111, -112, -611, -114, -611, -289, -509,
+ -611, -501, -502, -325, -116, -117, -158, -159, -160, -176,
+ -181, -188, -191, -327, -611, -573, -611, -447, -611, -611,
+ -611, -611, -611, -611, -611, -611, 1036, -5, -609, -24,
+ -25, -26, -27, -28, -611, -611, -20, -21, -22, -126,
+ -611, -31, -33, -276, -611, -611, -275, -32, -611, -35,
+ -611, -289, -43, -45, -199, -251, -271, -47, -48, -36,
+ -200, -251, -599, -257, -270, -270, -586, -587, -266, -416,
+ -588, -589, -587, -586, -266, -415, -417, -588, -589, -42,
+ -207, -49, -599, -308, -611, -611, -611, -256, -299, -611,
+ -611, -611, -208, -209, -212, -213, -214, -215, -216, -217,
+ -221, -222, -223, -224, -226, -227, -228, -229, -230, -233,
+ -234, -235, -236, -599, -244, -427, -266, -586, -587, -59,
+ -63, -599, -267, -425, -427, -599, -304, -262, -611, -263,
+ -611, -268, -611, -272, -611, -580, -582, -11, -598, -15,
+ -17, -599, -74, -297, -90, -79, -611, -599, -256, -611,
+ -611, -100, -611, -484, -611, -86, -91, -611, -611, -611,
+ -611, -245, -237, -611, -434, -611, -599, -611, -248, -605,
+ -604, -250, -605, -300, -301, -576, -313, -533, -12, -341,
+ -342, -12, -611, -611, -611, -611, -611, -611, -256, -611,
+ -611, -299, -53, -111, -112, -113, -611, -611, -256, -321,
+ -507, -611, -12, -511, -329, -599, -448, -468, -473, -611,
+ -475, -451, -470, -611, -472, -453, -611, -456, -611, -458,
+ -461, -611, -462, -611, -482, -9, -19, -611, -29, -279,
+ -611, -611, -256, -611, -611, -611, -611, -420, -611, -258,
+ -260, -611, -611, -64, -255, -413, -611, -611, -66, -414,
+ -307, -601, -586, -587, -586, -587, -599, -611, -611, -428,
+ -58, -409, -425, -253, -611, -386, -611, -303, -270, -269,
+ -273, -611, -578, -579, -611, -14, -76, -611, -82, -88,
+ -599, -586, -587, -254, -590, -99, -611, -84, -611, -206,
+ -218, -599, -610, -610, -292, -294, -296, -603, -398, -533,
+ -401, -572, -572, -516, -518, -518, -518, -532, -534, -535,
+ -536, -537, -538, -539, -540, -541, -611, -543, -545, -547,
+ -552, -554, -555, -557, -562, -564, -565, -567, -568, -569,
+ -611, -610, -343, -610, -54, -344, -345, -316, -317, -611,
+ -319, -611, -599, -586, -587, -590, -298, -12, -111, -112,
+ -115, -599, -12, -611, -323, -611, -12, -533, -533, -611,
+ -574, -474, -477, -478, -479, -480, -12, -452, -455, -457,
+ -460, -464, -466, -127, -277, -611, -599, -586, -587, -587,
+ -586, -44, -252, -611, -602, -270, -38, -202, -39, -203,
+ -65, -40, -205, -41, -204, -67, -611, -611, -611, -611,
+ -420, -611, -407, -386, -411, -410, -611, -422, -387, -599,
+ -389, -12, -424, -264, -274, -581, -80, -420, -92, -306,
+ -610, -348, -12, -435, -610, -436, -437, -249, -611, -599,
+ -611, -514, -515, -611, -611, -525, -611, -528, -611, -530,
+ -611, -352, -611, -354, -356, -363, -599, -546, -556, -566,
+ -570, -611, -346, -611, -611, -318, -611, -12, -420, -611,
+ -420, -611, -611, -12, -326, -611, -599, -611, -330, -611,
+ -278, -420, -37, -201, -259, -611, -238, -12, -60, -572,
+ -572, -368, -370, -370, -370, -385, -611, -599, -391, -541,
+ -549, -550, -560, -426, -10, -12, -441, -349, -611, -611,
+ -439, -399, -402, -404, -611, -572, -553, -571, -517, -518,
+ -518, -544, -518, -518, -563, -518, -541, -558, -599, -611,
+ -361, -611, -542, -314, -611, -315, -273, -610, -320, -322,
+ -508, -611, -328, -510, -512, -511, -476, -429, -611, -366,
+ -367, -376, -378, -611, -381, -611, -383, -388, -611, -611,
+ -611, -548, -611, -440, -12, -501, -502, -611, -611, -289,
+ -438, -12, -12, -400, -513, -611, -521, -611, -523, -611,
+ -526, -611, -529, -531, -353, -355, -359, -611, -364, -12,
+ -430, -431, -432, -324, -12, -572, -551, -369, -370, -370,
+ -370, -370, -561, -370, -390, -599, -393, -395, -396, -559,
+ -611, -299, -434, -256, -611, -611, -299, -611, -611, -518,
+ -518, -518, -518, -357, -611, -362, -611, -610, -611, -365,
+ -611, -373, -611, -375, -611, -379, -611, -382, -384, -392,
+ -611, -298, -590, -433, -599, -586, -587, -590, -298, -403,
+ -405, -611, -519, -522, -524, -527, -611, -360, -347, -331,
+ -370, -370, -370, -370, -394, -420, -518, -358, -611, -371,
+ -374, -377, -380, -520, -370, -372 ]
+
+clist = [
+'224,383,662,29,267,275,279,344,29,556,284,284,284,320,320,337,432,268',
+'219,499,119,416,417,29,347,348,269,333,352,285,285,285,29,29,29,126',
+'29,429,133,133,327,346,346,449,306,346,6,726,320,320,320,6,138,138,128',
+'211,548,551,438,444,338,116,29,821,136,136,323,29,29,490,491,29,525',
+'639,227,639,350,351,115,884,642,399,400,401,402,119,565,304,968,286',
+'286,286,282,295,296,271,278,280,346,346,346,346,133,634,453,335,781',
+'486,790,853,2,948,538,541,607,945,545,816,302,29,339,342,642,430,29',
+'29,29,29,29,450,29,628,388,962,120,586,588,535,369,373,636,966,395,353',
+'1,856,336,536,334,824,855,582,584,587,587,384,569,360,546,857,496,341',
+'6,385,631,874,340,985,499,968,965,403,668,6,871,547,798,331,597,931',
+'932,485,493,512,639,639,494,773,950,794,642,868,427,428,387,389,390',
+'391,439,284,632,451,452,392,1017,881,393,394,884,731,962,709,945,415',
+'415,29,29,29,29,29,29,29,1024,918,670,736,29,29,29,723,455,704,405,879',
+'412,362,1027,404,210,876,29,958,776,888,847,397,956,645,345,864,448',
+'801,802,284,284,626,722,833,572,573,26,729,284,905,648,26,,411,422,',
+',422,657,285,,29,29,422,,,26,285,,,29,,320,720,685,26,26,26,,26,438',
+'444,275,522,,677,279,423,29,320,423,,29,,770,552,423,29,881,519,119',
+',650,537,,26,,523,,,26,26,346,305,26,510,529,620,787,286,526,,492,29',
+'515,504,,286,881,951,495,509,799,571,739,1018,739,,29,29,29,508,712',
+'511,653,559,,,517,575,,450,721,430,653,119,633,783,507,29,637,725,26',
+'574,,954,,26,26,26,26,26,269,26,302,29,646,,,302,828,786,649,881,653',
+',746,,,830,836,837,653,,,,685,760,,608,,665,765,614,,639,827,677,603',
+'619,642,,,555,841,909,910,756,758,659,439,133,761,763,284,,1003,797',
+'438,444,,,,,,138,,596,,,730,934,,,,,29,136,,,627,614,854,,685,685,,795',
+'26,26,26,26,26,26,26,677,677,,,26,26,26,448,811,783,,,880,,882,,320',
+',26,439,284,,,,320,,,410,613,439,,661,29,,618,,,,757,759,,859,29,762',
+'764,,831,526,,,835,,305,26,26,526,989,29,,439,284,789,26,,,,685,439',
+'685,,284,448,29,,952,29,630,,711,638,26,448,29,,26,,,,,26,705,,29,717',
+'842,,29,775,924,,,,,439,284,,,,,724,,448,,,,26,,448,305,959,667,960',
+',305,949,29,29,,608,29,26,26,26,774,811,29,29,890,,796,29,29,,979,,',
+',320,133,,,26,608,614,,448,619,901,320,,,860,138,,743,553,554,26,,,',
+'907,751,859,136,859,422,,526,838,843,,,,415,,422,422,,788,755,422,422',
+'757,759,764,762,685,1020,,,,,,832,,,1025,851,423,,811,,811,608,,892',
+',,423,423,346,,608,423,423,,,,877,,,877,805,807,809,903,,26,,,29,,,',
+',29,29,608,,29,,859,,,,978,,,,29,,,,,,866,,983,811,870,,843,,,,,29,988',
+',133,858,,,,,,,944,26,860,,1004,860,,860,,860,,26,,858,,,894,29,811',
+',811,,,,,,26,,29,,,,,346,,,,,,,422,26,,,26,,653,,,877,811,26,851,,851',
+',851,,,29,,26,,29,,26,,,,29,,858,320,423,,701,,,703,,,320,900,29,860',
+',860,904,860,852,860,,850,,26,26,,,26,,,29,,,26,26,,,,26,26,,,875,,',
+'883,,885,,,,860,,,,,,,,,851,320,851,,851,,851,,,,,,,,,,,,,936,938,,940',
+'942,,943,,,,29,,974,,,,,29,29,851,,16,,,,,16,,,999,,,343,,,29,439,284',
+',,29,228,,,,,,,,,228,228,228,,16,311,311,,,29,26,,,,,26,26,,608,26,',
+'955,,961,850,963,850,,850,26,16,,,448,,228,228,,448,228,357,367,367',
+',829,980,26,981,,982,1012,1013,1014,1015,,,,,,,,,,839,912,914,916,,',
+',,,,,26,,,,,,,,,,,26,,16,,,,,228,228,228,228,16,1033,16,,1021,,1022',
+'850,1023,850,,850,863,850,,,,,,,26,,,867,26,1026,,,,,26,,,,,,13,,413',
+'426,,13,1034,,26,850,,,,,,,,,,,,,897,,,,26,,,,,,,13,,,,,991,993,995',
+'997,,998,,,,,,,,16,228,420,228,228,420,228,,13,923,,420,228,228,,,,',
+'361,,,,,,,16,501,,503,,,505,506,,26,,,,,,,26,26,,,,,,,1029,1030,1031',
+'1032,,,,,,,26,228,228,,1035,26,13,,,972,228,,,,,13,977,13,,,,,,,26,',
+',,16,,,,16,,987,,311,16,,,,,,,,,,,,39,,,,311,39,,,,,,,,,16,,,,,,,,,',
+',,,,,228,16,16,,39,310,310,,,,,,,,,599,,,,,,228,,,13,,418,,,418,39,',
+',,,418,,228,,,356,372,372,372,,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,39,,,,,,,,,39,,39,640,,343,,643,,,,,228,,,13,,,,13,,,,,13,,,',
+',,,,,,,,,,,,,,,,640,,,343,,,13,,,,,,,,,,,,426,16,,,13,13,,,,311,,228',
+',,,,,311,,,,,,,,39,228,,,,,,,,,,,,,,,16,,744,16,,,,,,39,228,640,343',
+',,,,,,,228,,,,16,,,,,,,,,,,,,,,,,,,784,,,785,,,,,,,420,228,,,16,,,,',
+',420,420,793,,,420,420,,39,,,,39,,,,310,39,,,,,,,,,,,817,,,,,310,,,311',
+',,,,,,39,,,,311,,,,,,,,,,,13,39,39,,,,,,,,,,,,,,,,,,,,,,,,840,,,,,,',
+',,,,,,,13,,,13,,,38,,16,,,38,,16,228,,,16,,,,,,,13,,,16,,,,,,,,,,,,38',
+'309,309,,,420,,,,,,,887,,418,,,,13,,,,,,418,418,38,,896,418,418,,,16',
+',,355,371,371,371,,,,,16,,343,,,,,,,,,,,,,,,,,,,,,,,,,,,,,228,,,,16',
+'39,,,38,,16,,,310,,,,38,17,38,,310,,17,16,,,,,,,,,,,,,921,,,,,16,,,39',
+'927,,39,,,17,313,313,,13,,,,,13,,,,13,,,,,39,,,,,13,,,17,,,,,,,,,,359',
+'368,368,,418,,,,,,969,,,,16,39,,38,,,,16,16,,,,,,,,,,13,,,,,,,16,,,38',
+'13,16,,,17,,,,,,,,,17,310,17,,,,,228,,,,,310,,,,,,,,,,13,,,,,,13,,,',
+',,,15,,,,,15,,13,,,,,,38,,,,38,,,,309,38,,,13,,,,930,,,,15,,,39,,309',
+',,39,,,,39,,,38,,,,17,,421,39,,421,,15,,,,421,38,38,,,,,,,,,,,,17,,',
+',,,,13,,,,,,,13,13,,,,,,,,39,,,,,,,,,13,,39,,,13,,15,,,,,,,,,15,,15',
+',,,,,,,,,,,17,,,,17,,,39,313,17,,,,39,,,,,,,,,,,,313,,39,,,,,,,,17,',
+',,,372,,,,,39,,,,926,,17,17,,,,,,,,,,,,,,,,,,,,,15,,15,,,15,,,,,38,15',
+',,,,,,309,,,,,,,15,309,372,,,,39,,,,,,,39,39,,,,,,,,,,,38,,,38,,,39',
+',,,,39,,,,,,,,,,,,,38,,,,,,,,,,,,,15,,,,15,,,,,15,,,,,,,,,,,38,,,,,',
+',,,,,,,,,15,,,,,,,,,,,,,,17,,15,15,,,,,313,,,,,309,,,313,,,,,,,,309',
+',,,,,,,,,,,,,,,17,,,17,,,,,,,,,,,,,,,,,,,,,17,,,,,,,735,,,,,,,,,,,,38',
+',,,,38,,,,38,421,,,,17,,,,,38,421,421,,,,421,421,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,313,,,,,,,,38,,,313,,,,,,,,38,,15,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,38,,,,,,38,15,,,15,,,,,,17,,,,38,17,,,,17,,,,,,15,,371,,17,',
+',38,,,,925,,235,,,,,,,,421,283,283,283,,,,,15,,,,15,,329,330,,332,15',
+'15,,,,15,15,,,,17,,,,283,283,,,,,,17,,371,,,,38,,,,,,,38,38,,,,,,,,',
+',,,,,,,,38,,,,17,38,,,,,17,,,,,,,,,,,,,,17,,,,,,,,,,,,,368,,,,,17,,',
+',929,,,,,,,,15,,,,,15,,,,15,,,,,,,,,,15,,,,,,,,,,,,,,,,,15,,,,,,,368',
+',,,17,,,,,,,17,17,,,,,,283,425,,15,431,283,,,,,431,17,,,15,,17,,,,,',
+',235,,,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477',
+'478,479,480,481,482,483,,15,,,484,,,15,,,,283,283,,,,,,,,283,15,,,,',
+',283,,283,,,283,283,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,531,,532,',
+',,,,,,,,,,,,,,,,,,,,,,,,15,,,,,,,15,15,,,,,,,,,,,,,,,,,15,,,,,15,,,',
+',,,,,,,,,,,,,,,,,,,,,283,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,283',
+',431,431,431,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,283,,283,,283,,,,,',
+',,,,,,,,,,283,,,,,,,,,431,660,,,,,,,,,,,283,,,283,,,,,,,,,,,,,,,283',
+'283,,,,,,,,,,283,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,283,431,283,,,,752,',
+',283,283,431,431,,,,431,431,,,,,,,,,,,,,,,,,,,,,,,,283,,,283,,,,,,,',
+',,,,,,,,,,,283,,,,,,,,,,,,,,,,,,,,,,,,,,283,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,283,,,,,,,,431,,,,,,,,,,,,,431,431,431',
+'431,,846,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,283,,,,,,,,,,,,,,,,283',
+',,,,,,,,,,,,,,,,,283,431,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,283' ]
+ racc_goto_table = arr = ::Array.new(3478, 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,63,11,50,145,81,81,96,50,101,39,39,39,73,73,77,30,42,32,83,105,23',
+'23,50,18,18,32,34,18,78,78,78,50,50,50,8,50,27,64,64,71,25,25,27,56',
+'25,7,108,73,73,73,7,68,68,16,16,99,99,43,43,78,6,50,100,67,67,57,50',
+'50,45,30,50,58,84,21,84,36,36,4,185,189,18,18,18,18,105,61,53,139,80',
+'80,80,51,51,51,44,44,44,25,25,25,25,64,46,54,7,134,43,12,132,2,123,79',
+'79,31,120,79,122,52,50,80,80,189,70,50,50,50,50,50,70,50,148,162,186',
+'5,166,166,9,62,62,148,138,162,4,1,136,112,111,110,12,124,167,167,167',
+'167,109,104,102,98,130,54,95,7,94,82,136,76,123,83,139,137,7,140,7,141',
+'142,143,74,69,146,147,149,151,54,84,84,152,155,156,157,189,158,25,25',
+'161,163,164,165,81,39,48,25,25,168,123,180,169,170,185,171,186,101,120',
+'78,78,50,50,50,50,50,50,50,138,136,144,172,50,50,50,173,32,37,26,178',
+'24,20,123,2,17,182,50,132,46,122,134,5,183,15,113,13,64,127,127,39,39',
+'30,114,115,116,117,47,118,39,119,58,47,,21,21,,,21,58,78,,50,50,21,',
+',47,78,,,50,,73,61,179,47,47,47,,47,43,43,81,34,,174,81,19,50,73,19',
+',50,,31,18,19,50,180,32,105,,30,34,,47,,71,,,47,47,25,10,47,8,32,54',
+'31,80,56,,51,50,57,162,,80,180,12,51,7,144,25,167,100,167,,50,50,50',
+'6,30,53,43,32,,,53,25,,70,30,70,43,105,54,83,4,50,54,9,47,42,,108,,47',
+'47,47,47,47,32,47,52,50,54,,,52,31,58,54,180,43,,30,,,31,144,144,43',
+',,,179,45,,34,,54,45,81,,84,99,174,32,81,189,,,4,31,127,127,27,27,70',
+'81,64,27,27,39,,11,79,43,43,,,,,,68,,16,,,54,127,,,,,50,67,,,34,81,133',
+',179,179,,23,47,47,47,47,47,47,47,174,174,,,47,47,47,64,121,83,,,133',
+',133,,73,,47,81,39,,,,73,,,10,44,81,,25,50,,44,,,,70,70,,179,50,70,70',
+',9,56,,,9,,10,47,47,56,127,50,,81,39,54,47,,,,179,81,179,,39,64,50,',
+'101,50,44,,78,80,47,64,50,,47,,,,,47,105,,50,36,27,,50,96,99,,,,,81',
+'39,,,,,105,,64,,,,47,,64,10,133,80,133,,10,99,50,50,,34,50,47,47,47',
+'145,121,50,50,121,,77,50,50,,133,,,,73,64,,,47,34,81,,64,81,9,73,,,181',
+'68,,16,10,10,47,,,,9,7,179,67,179,21,,56,63,70,,,,78,,21,21,,56,80,21',
+'21,70,70,70,70,179,133,,,,,,18,,,31,128,19,,121,,121,34,,54,,,19,19',
+'25,,34,19,19,,,,128,,,128,177,177,177,54,,47,,,50,,,,,50,50,34,,50,',
+'179,,,,9,,,,50,,,,,,77,,121,121,77,,70,,,,,50,9,,64,34,,,,,,,54,47,181',
+',30,181,,181,,181,,47,,34,,,18,50,121,,121,,,,,,47,,50,,,,,25,,,,,,',
+'21,47,,,47,,43,,,128,121,47,128,,128,,128,,,50,,47,,50,,47,,,,50,,34',
+'73,19,,10,,,10,,,73,105,50,181,,181,105,181,131,181,,126,,47,47,,,47',
+',,50,,,47,47,,,,47,47,,,126,,,131,,131,,,,181,,,,,,,,,128,73,128,,128',
+',128,,,,,,,,,,,,,177,177,,177,177,,177,,,,50,,32,,,,,50,50,128,,29,',
+',,,29,,,34,,,75,,,50,81,39,,,50,29,,,,,,,,,29,29,29,,29,29,29,,,50,47',
+',,,,47,47,,34,47,,126,,131,126,131,126,,126,47,29,,,64,,29,29,,64,29',
+'29,29,29,,10,131,47,131,,131,177,177,177,177,,,,,,,,,,10,129,129,129',
+',,,,,,,47,,,,,,,,,,,47,,29,,,,,29,29,29,29,29,177,29,,131,,131,126,131',
+'126,,126,10,126,,,,,,,47,,,10,47,131,,,,,47,,,,,,22,,75,75,,22,131,',
+'47,126,,,,,,,,,,,,,10,,,,47,,,,,,,22,,,,,129,129,129,129,,129,,,,,,',
+',29,29,29,29,29,29,29,,22,10,,29,29,29,,,,,22,,,,,,,29,75,,75,,,75,75',
+',47,,,,,,,47,47,,,,,,,129,129,129,129,,,,,,,47,29,29,,129,47,22,,,10',
+'29,,,,,22,10,22,,,,,,,47,,,,29,,,,29,,10,,29,29,,,,,,,,,,,,60,,,,29',
+'60,,,,,,,,,29,,,,,,,,,,,,,,,29,29,29,,60,60,60,,,,,,,,,75,,,,,,29,,',
+'22,,22,,,22,60,,,,,22,,29,,,60,60,60,60,,,,,,22,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,60,,,,,,,,,60,,60,75,,75,,75,,,,,29,,,22,,,,22,,,,',
+'22,,,,,,,,,,,,,,,,,,,,75,,,75,,,22,,,,,,,,,,,,75,29,,,22,22,,,,29,,29',
+',,,,,29,,,,,,,,60,29,,,,,,,,,,,,,,,29,,75,29,,,,,,60,29,75,75,,,,,,',
+',29,,,,29,,,,,,,,,,,,,,,,,,,75,,,75,,,,,,,29,29,,,29,,,,,,29,29,75,',
+',29,29,,60,,,,60,,,,60,60,,,,,,,,,,,75,,,,,60,,,29,,,,,,,60,,,,29,,',
+',,,,,,,,22,60,60,,,,,,,,,,,,,,,,,,,,,,,,75,,,,,,,,,,,,,,22,,,22,,,59',
+',29,,,59,,29,29,,,29,,,,,,,22,,,29,,,,,,,,,,,,59,59,59,,,29,,,,,,,75',
+',22,,,,22,,,,,,22,22,59,,75,22,22,,,29,,,59,59,59,59,,,,,29,,75,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,29,,,,29,60,,,59,,29,,,60,,,,59,33,59,,60,,33',
+'29,,,,,,,,,,,,,29,,,,,29,,,60,29,,60,,,33,33,33,,22,,,,,22,,,,22,,,',
+',60,,,,,22,,,33,,,,,,,,,,33,33,33,,22,,,,,,29,,,,29,60,,59,,,,29,29',
+',,,,,,,,,22,,,,,,,29,,,59,22,29,,,33,,,,,,,,,33,60,33,,,,,29,,,,,60',
+',,,,,,,,,22,,,,,,22,,,,,,,28,,,,,28,,22,,,,,,59,,,,59,,,,59,59,,,22',
+',,,22,,,,28,,,60,,59,,,60,,,,60,,,59,,,,33,,33,60,,33,,28,,,,33,59,59',
+',,,,,,,,,,,33,,,,,,,22,,,,,,,22,22,,,,,,,,60,,,,,,,,,22,,60,,,22,,28',
+',,,,,,,,28,,28,,,,,,,,,,,,33,,,,33,,,60,33,33,,,,60,,,,,,,,,,,,33,,60',
+',,,,,,,33,,,,,60,,,,,60,,,,60,,33,33,,,,,,,,,,,,,,,,,,,,,28,,28,,,28',
+',,,,59,28,,,,,,,59,,,,,,,28,59,60,,,,60,,,,,,,60,60,,,,,,,,,,,59,,,59',
+',,60,,,,,60,,,,,,,,,,,,,59,,,,,,,,,,,,,28,,,,28,,,,,28,,,,,,,,,,,59',
+',,,,,,,,,,,,,,28,,,,,,,,,,,,,,33,,28,28,,,,,33,,,,,59,,,33,,,,,,,,59',
+',,,,,,,,,,,,,,,33,,,33,,,,,,,,,,,,,,,,,,,,,33,,,,,,,33,,,,,,,,,,,,59',
+',,,,59,,,,59,33,,,,33,,,,,59,33,33,,,,33,33,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,33,,,,,,,,59,,,33,,,,,,,,59,,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',59,,,,,,59,28,,,28,,,,,,33,,,,59,33,,,,33,,,,,,28,,59,,33,,,59,,,,59',
+',35,,,,,,,,33,35,35,35,,,,,28,,,,28,,35,35,,35,28,28,,,,28,28,,,,33',
+',,,35,35,,,,,,33,,59,,,,59,,,,,,,59,59,,,,,,,,,,,,,,,,,59,,,,33,59,',
+',,,33,,,,,,,,,,,,,,33,,,,,,,,,,,,,33,,,,,33,,,,33,,,,,,,,28,,,,,28,',
+',,28,,,,,,,,,,28,,,,,,,,,,,,,,,,,28,,,,,,,33,,,,33,,,,,,,33,33,,,,,',
+'35,35,,28,35,35,,,,,35,33,,,28,,33,,,,,,,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,,,28,,,,35,35,,,',
+',,,,35,28,,,,,,35,,35,,,35,35,,,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+'35,,35,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,28,28,,,,,,,,,,,,,,,,,28,,',
+',,28,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,35,,35,35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,,35,,',
+',,,,,,,,,,,,,35,,,,,,,,,35,35,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,35,35',
+',,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,35,,,,35,,,35,35,35',
+'35,,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,35,,,,',
+',,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,35,,,,,,,,35,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,35,35,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ]
+ racc_goto_check = arr = ::Array.new(3478, 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, 144, 110, nil, 75, 129, 58, 46, 28, -197,
+ 294, -532, -554, -541, nil, -261, 46, 229, -40, 87,
+ 166, 54, 1099, -192, 21, -23, 104, -180, 1939, 938,
+ -202, -318, 2, 1779, -19, 2504, 10, -321, nil, -19,
+ nil, nil, -7, -161, 69, -202, -390, 260, -289, nil,
+ 3, 63, 85, 54, -121, nil, 10, 31, -252, 1653,
+ 1258, -279, 68, -71, 30, nil, nil, 56, 44, -231,
+ -94, -1, nil, -21, 133, 888, 106, -45, 0, -226,
+ 60, -21, -322, -267, -425, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 91, 100, -55, nil, -187, -291,
+ -638, -344, 88, nil, -213, 17, nil, nil, -526, 83,
+ 90, -188, 87, 185, -313, -467, -115, -124, -313, -575,
+ -774, -199, -569, -780, -629, nil, 80, -420, -92, 179,
+ -620, 77, -670, -313, -529, nil, -634, -749, -778, -831,
+ -375, -624, -170, -492, -323, -18, -693, -693, -354, -85,
+ nil, -94, -91, nil, nil, -442, -709, -474, -603, nil,
+ nil, 112, 48, 108, 108, 108, -256, -238, 113, 115,
+ 115, -370, -355, -341, -248, nil, nil, 38, -571, -259,
+ -599, -139, -561, -662, nil, -727, -780, nil, nil, -420 ]
+
+racc_goto_default = [
+ nil, nil, nil, 3, nil, 4, 354, 300, nil, nil,
+ 534, nil, 822, nil, 297, 298, nil, nil, nil, 11,
+ 12, 18, 233, nil, nil, 14, nil, 419, 234, 328,
+ nil, nil, 567, 232, 454, 21, nil, nil, 349, 22,
+ 23, 24, nil, 656, nil, nil, nil, 317, nil, 25,
+ 314, 433, 32, nil, nil, 34, 37, 36, nil, 229,
+ 230, 366, nil, 135, 441, 134, 137, 80, 81, nil,
+ 424, 95, 44, 47, 265, 289, nil, 791, 434, nil,
+ 435, 446, 615, 497, 287, 273, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, nil, 274, 62, nil, nil,
+ nil, nil, nil, 70, nil, 549, 71, 72, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 813, 684, nil, 814, 957, 849, 672, nil, 673, nil,
+ nil, 674, nil, 676, nil, 778, nil, nil, nil, 682,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 445, nil, nil, 635, 629, nil, nil, nil, nil, 79,
+ 82, 83, nil, nil, nil, nil, nil, 577, nil, nil,
+ nil, nil, nil, nil, 878, 728, 671, nil, 675, 886,
+ 687, 689, 690, 861, 693, 694, 862, 697, 700, 292 ]
+
+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, 255, :_reduce_291,
+ 4, 218, :_reduce_292,
+ 0, 256, :_reduce_293,
+ 4, 218, :_reduce_294,
+ 0, 257, :_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,
+ 0, 258, :_reduce_312,
+ 3, 218, :_reduce_313,
+ 6, 218, :_reduce_314,
+ 6, 218, :_reduce_315,
+ 4, 218, :_reduce_316,
+ 4, 218, :_reduce_317,
+ 5, 218, :_reduce_318,
+ 4, 218, :_reduce_319,
+ 6, 218, :_reduce_320,
+ 0, 259, :_reduce_321,
+ 6, 218, :_reduce_322,
+ 0, 260, :_reduce_323,
+ 7, 218, :_reduce_324,
+ 0, 261, :_reduce_325,
+ 5, 218, :_reduce_326,
+ 0, 262, :_reduce_327,
+ 6, 218, :_reduce_328,
+ 0, 263, :_reduce_329,
+ 0, 264, :_reduce_330,
+ 9, 218, :_reduce_331,
+ 1, 218, :_reduce_332,
+ 1, 218, :_reduce_333,
+ 1, 218, :_reduce_334,
+ 1, 218, :_reduce_335,
+ 1, 174, :_reduce_none,
+ 1, 248, :_reduce_337,
+ 1, 251, :_reduce_338,
+ 1, 252, :_reduce_339,
+ 1, 195, :_reduce_340,
+ 1, 244, :_reduce_none,
+ 1, 244, :_reduce_none,
+ 2, 244, :_reduce_343,
+ 1, 182, :_reduce_none,
+ 1, 182, :_reduce_none,
+ 1, 245, :_reduce_none,
+ 5, 245, :_reduce_347,
+ 1, 157, :_reduce_none,
+ 2, 157, :_reduce_349,
+ 1, 247, :_reduce_none,
+ 1, 247, :_reduce_none,
+ 1, 265, :_reduce_352,
+ 3, 265, :_reduce_353,
+ 1, 268, :_reduce_354,
+ 3, 268, :_reduce_355,
+ 1, 267, :_reduce_none,
+ 4, 267, :_reduce_357,
+ 6, 267, :_reduce_358,
+ 3, 267, :_reduce_359,
+ 5, 267, :_reduce_360,
+ 2, 267, :_reduce_361,
+ 4, 267, :_reduce_362,
+ 1, 267, :_reduce_363,
+ 3, 267, :_reduce_364,
+ 4, 269, :_reduce_365,
+ 2, 269, :_reduce_366,
+ 2, 269, :_reduce_367,
+ 1, 269, :_reduce_368,
+ 2, 274, :_reduce_369,
+ 0, 274, :_reduce_370,
+ 6, 275, :_reduce_371,
+ 8, 275, :_reduce_372,
+ 4, 275, :_reduce_373,
+ 6, 275, :_reduce_374,
+ 4, 275, :_reduce_375,
+ 2, 275, :_reduce_none,
+ 6, 275, :_reduce_377,
+ 2, 275, :_reduce_378,
+ 4, 275, :_reduce_379,
+ 6, 275, :_reduce_380,
+ 2, 275, :_reduce_381,
+ 4, 275, :_reduce_382,
+ 2, 275, :_reduce_383,
+ 4, 275, :_reduce_384,
+ 1, 275, :_reduce_none,
+ 0, 279, :_reduce_386,
+ 1, 279, :_reduce_387,
+ 3, 280, :_reduce_388,
+ 1, 280, :_reduce_389,
+ 4, 280, :_reduce_390,
+ 1, 281, :_reduce_391,
+ 4, 281, :_reduce_392,
+ 1, 282, :_reduce_393,
+ 3, 282, :_reduce_394,
+ 1, 283, :_reduce_395,
+ 1, 283, :_reduce_none,
+ 0, 287, :_reduce_397,
+ 0, 288, :_reduce_398,
+ 4, 243, :_reduce_399,
+ 4, 285, :_reduce_400,
+ 1, 285, :_reduce_401,
+ 0, 291, :_reduce_402,
+ 4, 286, :_reduce_403,
+ 0, 292, :_reduce_404,
+ 4, 286, :_reduce_405,
+ 0, 294, :_reduce_406,
+ 4, 290, :_reduce_407,
+ 2, 186, :_reduce_408,
+ 4, 186, :_reduce_409,
+ 5, 186, :_reduce_410,
+ 5, 186, :_reduce_411,
+ 2, 242, :_reduce_412,
+ 4, 242, :_reduce_413,
+ 4, 242, :_reduce_414,
+ 3, 242, :_reduce_415,
+ 3, 242, :_reduce_416,
+ 3, 242, :_reduce_417,
+ 2, 242, :_reduce_418,
+ 1, 242, :_reduce_419,
+ 4, 242, :_reduce_420,
+ 0, 296, :_reduce_421,
+ 4, 241, :_reduce_422,
+ 0, 297, :_reduce_423,
+ 4, 241, :_reduce_424,
+ 0, 298, :_reduce_425,
+ 3, 191, :_reduce_426,
+ 0, 299, :_reduce_427,
+ 0, 300, :_reduce_428,
+ 4, 293, :_reduce_429,
+ 5, 246, :_reduce_430,
+ 1, 301, :_reduce_431,
+ 1, 301, :_reduce_none,
+ 6, 156, :_reduce_433,
+ 0, 156, :_reduce_434,
+ 1, 302, :_reduce_435,
+ 1, 302, :_reduce_none,
+ 1, 302, :_reduce_none,
+ 2, 303, :_reduce_438,
+ 1, 303, :_reduce_none,
+ 2, 158, :_reduce_440,
+ 1, 158, :_reduce_none,
+ 1, 231, :_reduce_none,
+ 1, 231, :_reduce_none,
+ 1, 231, :_reduce_none,
+ 1, 232, :_reduce_445,
+ 1, 305, :_reduce_446,
+ 2, 305, :_reduce_447,
+ 3, 306, :_reduce_448,
+ 1, 306, :_reduce_449,
+ 1, 306, :_reduce_450,
+ 3, 233, :_reduce_451,
+ 4, 234, :_reduce_452,
+ 3, 235, :_reduce_453,
+ 0, 310, :_reduce_454,
+ 3, 310, :_reduce_455,
+ 1, 311, :_reduce_456,
+ 2, 311, :_reduce_457,
+ 3, 237, :_reduce_458,
+ 0, 313, :_reduce_459,
+ 3, 313, :_reduce_460,
+ 3, 236, :_reduce_461,
+ 3, 238, :_reduce_462,
+ 0, 314, :_reduce_463,
+ 3, 314, :_reduce_464,
+ 0, 315, :_reduce_465,
+ 3, 315, :_reduce_466,
+ 0, 307, :_reduce_467,
+ 2, 307, :_reduce_468,
+ 0, 308, :_reduce_469,
+ 2, 308, :_reduce_470,
+ 0, 309, :_reduce_471,
+ 2, 309, :_reduce_472,
+ 1, 312, :_reduce_473,
+ 2, 312, :_reduce_474,
+ 0, 317, :_reduce_475,
+ 4, 312, :_reduce_476,
+ 1, 316, :_reduce_477,
+ 1, 316, :_reduce_478,
+ 1, 316, :_reduce_479,
+ 1, 316, :_reduce_none,
+ 1, 212, :_reduce_481,
+ 3, 213, :_reduce_482,
+ 1, 304, :_reduce_483,
+ 2, 304, :_reduce_484,
+ 1, 216, :_reduce_485,
+ 1, 216, :_reduce_486,
+ 1, 216, :_reduce_487,
+ 1, 216, :_reduce_488,
+ 1, 204, :_reduce_489,
+ 1, 204, :_reduce_490,
+ 1, 204, :_reduce_491,
+ 1, 204, :_reduce_492,
+ 1, 204, :_reduce_493,
+ 1, 205, :_reduce_494,
+ 1, 205, :_reduce_495,
+ 1, 205, :_reduce_496,
+ 1, 205, :_reduce_497,
+ 1, 205, :_reduce_498,
+ 1, 205, :_reduce_499,
+ 1, 205, :_reduce_500,
+ 1, 239, :_reduce_501,
+ 1, 239, :_reduce_502,
+ 1, 173, :_reduce_503,
+ 1, 173, :_reduce_504,
+ 1, 178, :_reduce_505,
+ 1, 178, :_reduce_506,
+ 0, 318, :_reduce_507,
+ 4, 249, :_reduce_508,
+ 0, 249, :_reduce_509,
+ 3, 253, :_reduce_510,
+ 0, 320, :_reduce_511,
+ 3, 253, :_reduce_512,
+ 4, 319, :_reduce_513,
+ 2, 319, :_reduce_514,
+ 2, 319, :_reduce_515,
+ 1, 319, :_reduce_516,
+ 2, 322, :_reduce_517,
+ 0, 322, :_reduce_518,
+ 6, 289, :_reduce_519,
+ 8, 289, :_reduce_520,
+ 4, 289, :_reduce_521,
+ 6, 289, :_reduce_522,
+ 4, 289, :_reduce_523,
+ 6, 289, :_reduce_524,
+ 2, 289, :_reduce_525,
+ 4, 289, :_reduce_526,
+ 6, 289, :_reduce_527,
+ 2, 289, :_reduce_528,
+ 4, 289, :_reduce_529,
+ 2, 289, :_reduce_530,
+ 4, 289, :_reduce_531,
+ 1, 289, :_reduce_532,
+ 0, 289, :_reduce_533,
+ 1, 284, :_reduce_534,
+ 1, 284, :_reduce_535,
+ 1, 284, :_reduce_536,
+ 1, 284, :_reduce_537,
+ 1, 266, :_reduce_none,
+ 1, 266, :_reduce_539,
+ 1, 324, :_reduce_540,
+ 1, 325, :_reduce_541,
+ 3, 325, :_reduce_542,
+ 1, 276, :_reduce_543,
+ 3, 276, :_reduce_544,
+ 1, 326, :_reduce_545,
+ 2, 327, :_reduce_546,
+ 1, 327, :_reduce_547,
+ 2, 328, :_reduce_548,
+ 1, 328, :_reduce_549,
+ 1, 270, :_reduce_550,
+ 3, 270, :_reduce_551,
+ 1, 321, :_reduce_552,
+ 3, 321, :_reduce_553,
+ 1, 329, :_reduce_none,
+ 1, 329, :_reduce_none,
+ 2, 271, :_reduce_556,
+ 1, 271, :_reduce_557,
+ 3, 330, :_reduce_558,
+ 3, 331, :_reduce_559,
+ 1, 277, :_reduce_560,
+ 3, 277, :_reduce_561,
+ 1, 323, :_reduce_562,
+ 3, 323, :_reduce_563,
+ 1, 332, :_reduce_none,
+ 1, 332, :_reduce_none,
+ 2, 278, :_reduce_566,
+ 1, 278, :_reduce_567,
+ 1, 333, :_reduce_none,
+ 1, 333, :_reduce_none,
+ 2, 273, :_reduce_570,
+ 2, 272, :_reduce_571,
+ 0, 272, :_reduce_572,
+ 1, 254, :_reduce_none,
+ 3, 254, :_reduce_574,
+ 0, 240, :_reduce_575,
+ 2, 240, :_reduce_none,
+ 1, 225, :_reduce_577,
+ 3, 225, :_reduce_578,
+ 3, 334, :_reduce_579,
+ 2, 334, :_reduce_580,
+ 4, 334, :_reduce_581,
+ 2, 334, :_reduce_582,
+ 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, 295, :_reduce_none,
+ 1, 295, :_reduce_none,
+ 1, 295, :_reduce_none,
+ 1, 187, :_reduce_none,
+ 1, 187, :_reduce_none,
+ 1, 177, :_reduce_595,
+ 1, 177, :_reduce_596,
+ 0, 149, :_reduce_none,
+ 1, 149, :_reduce_none,
+ 0, 179, :_reduce_none,
+ 1, 179, :_reduce_none,
+ 2, 199, :_reduce_601,
+ 2, 176, :_reduce_602,
+ 0, 224, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 250, :_reduce_606,
+ 1, 250, :_reduce_none,
+ 1, 151, :_reduce_none,
+ 2, 151, :_reduce_none,
+ 0, 222, :_reduce_610 ]
+
+racc_reduce_n = 611
+
+racc_shift_n = 1036
+
+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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "k_def",
+ "f_arglist",
+ "singleton",
+ "@6",
+ "@7",
+ "@8",
+ "@9",
+ "@10",
+ "@11",
+ "@12",
+ "@13",
+ "@14",
+ "@15",
+ "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",
+ "@16",
+ "@17",
+ "f_args",
+ "do_block",
+ "@18",
+ "@19",
+ "do_body",
+ "@20",
+ "operation3",
+ "@21",
+ "@22",
+ "@23",
+ "@24",
+ "@25",
+ "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",
+ "@26",
+ "@27",
+ "args_tail",
+ "@28",
+ "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)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_60(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ 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_internal(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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_313(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_314(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_315(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_316(val, _values, result)
+ result = @builder.loop(:while, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_317(val, _values, result)
+ result = @builder.loop(:until, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_318(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_319(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_320(val, _values, result)
+ result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5])
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_328(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_329(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_330(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_331(val, _values, result)
+ result = @builder.def_singleton(val[0], val[1], val[2],
+ val[4], val[6], val[7], val[8])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ result
+end
+
+def _reduce_332(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_333(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_334(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_335(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 336 omitted
+
+def _reduce_337(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_338(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_339(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_340(val, _values, result)
+ if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda)
+ diagnostic :error, :invalid_return, nil, val[0]
+ end
+
+ result
+end
+
+# reduce 341 omitted
+
+# reduce 342 omitted
+
+def _reduce_343(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 344 omitted
+
+# reduce 345 omitted
+
+# reduce 346 omitted
+
+def _reduce_347(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 348 omitted
+
+def _reduce_349(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 350 omitted
+
+# reduce 351 omitted
+
+def _reduce_352(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_353(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_354(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_355(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 356 omitted
+
+def _reduce_357(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2], val[3]))
+
+ result
+end
+
+def _reduce_358(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2], val[3])).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_359(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2]))
+
+ result
+end
+
+def _reduce_360(val, _values, result)
+ result = val[0].
+ push(@builder.restarg(val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_361(val, _values, result)
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_362(val, _values, result)
+ result = [ @builder.restarg(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_363(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+def _reduce_364(val, _values, result)
+ result = [ @builder.restarg(val[0]),
+ *val[2] ]
+
+ 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[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)
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = @builder.args(val[0], [], val[0])
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_391(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_392(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_393(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_394(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_395(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 396 omitted
+
+def _reduce_397(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ @lexer.cmdarg.pop
+
+ result = [ val[1], val[3] ]
+
+ @static_env.unextend
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_401(val, _values, result)
+ result = @builder.args(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_402(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_403(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_404(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_405(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_406(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_407(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_408(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_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]
+ 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_411(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_412(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_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)
+ 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_415(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ 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[2]
+ result = @builder.call_method(val[0], val[1], nil,
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_418(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_419(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_421(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_422(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_423(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_424(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_426(val, _values, result)
+ result = [ val[1], val[2] ]
+
+ @static_env.unextend
+
+ result
+end
+
+def _reduce_427(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_428(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_429(val, _values, result)
+ result = [ val[2], val[3] ]
+
+ @static_env.unextend
+ @lexer.cmdarg.pop
+
+ result
+end
+
+def _reduce_430(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_431(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 432 omitted
+
+def _reduce_433(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_434(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_435(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 436 omitted
+
+# reduce 437 omitted
+
+def _reduce_438(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 439 omitted
+
+def _reduce_440(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 441 omitted
+
+# reduce 442 omitted
+
+# reduce 443 omitted
+
+# reduce 444 omitted
+
+def _reduce_445(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_448(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_449(val, _values, result)
+ string = @builder.string(val[0])
+ result = @builder.dedent_string(string, @lexer.dedent_level)
+
+ result
+end
+
+def _reduce_450(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_451(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_452(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_453(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_454(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_455(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_457(val, _values, result)
+ result = val[0] << val[1]
+
+ 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.word(val[1])
+
+ result
+end
+
+def _reduce_461(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_462(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_463(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_464(val, _values, result)
+ result = val[0] << @builder.string_internal(val[1])
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ result = val[0] << @builder.symbol_internal(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 = []
+
+ result
+end
+
+def _reduce_470(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_471(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_472(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_473(val, _values, result)
+ result = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_474(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_475(val, _values, result)
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+
+ result
+end
+
+def _reduce_476(val, _values, result)
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_477(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_478(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_479(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 480 omitted
+
+def _reduce_481(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_482(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_483(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_484(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_485(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.rational(val[0])
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.complex(val[0])
+
+ result
+end
+
+def _reduce_489(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_490(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_491(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_492(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_493(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_497(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_498(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_499(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_500(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_501(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_502(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_503(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_504(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_505(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_507(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ result = [ val[0], val[2] ]
+
+ result
+end
+
+def _reduce_509(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_510(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_511(val, _values, result)
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_512(val, _values, result)
+ @context.in_kwarg = val[0]
+ result = @builder.args(nil, val[1], nil)
+
+ 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[1])
+
+ result
+end
+
+def _reduce_516(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_517(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_518(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_519(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_520(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_521(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_522(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ 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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_525(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_526(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_527(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_528(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_529(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_530(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_531(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_532(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_533(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_534(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_535(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_536(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_537(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 538 omitted
+
+def _reduce_539(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_540(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_541(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_542(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ 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)
+ check_kwarg_name(val[0])
+
+ @static_env.declare val[0][0]
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_546(val, _values, result)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_547(val, _values, result)
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_548(val, _values, result)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_549(val, _values, result)
+ result = @builder.kwarg(val[0])
+
+ 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
+
+def _reduce_552(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_553(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 554 omitted
+
+# reduce 555 omitted
+
+def _reduce_556(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_557(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ result
+end
+
+def _reduce_558(val, _values, result)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_559(val, _values, result)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_560(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_561(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_562(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_563(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 564 omitted
+
+# reduce 565 omitted
+
+def _reduce_566(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_567(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 568 omitted
+
+# reduce 569 omitted
+
+def _reduce_570(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_571(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_572(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 573 omitted
+
+def _reduce_574(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_575(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 576 omitted
+
+def _reduce_577(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_578(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_579(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_580(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_581(val, _values, result)
+ result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_582(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# reduce 583 omitted
+
+# reduce 584 omitted
+
+# reduce 585 omitted
+
+# reduce 586 omitted
+
+# reduce 587 omitted
+
+# reduce 588 omitted
+
+# reduce 589 omitted
+
+# reduce 590 omitted
+
+# reduce 591 omitted
+
+# reduce 592 omitted
+
+# reduce 593 omitted
+
+# reduce 594 omitted
+
+def _reduce_595(val, _values, result)
+ result = [:dot, val[0][1]]
+
+ result
+end
+
+def _reduce_596(val, _values, result)
+ result = [:anddot, val[0][1]]
+
+ result
+end
+
+# reduce 597 omitted
+
+# reduce 598 omitted
+
+# reduce 599 omitted
+
+# reduce 600 omitted
+
+def _reduce_601(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_602(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 603 omitted
+
+# reduce 604 omitted
+
+# reduce 605 omitted
+
+def _reduce_606(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 607 omitted
+
+# reduce 608 omitted
+
+# reduce 609 omitted
+
+def _reduce_610(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby26
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby27.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby27.rb
new file mode 100644
index 000000000..7177c184e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby27.rb
@@ -0,0 +1,7914 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ @max_numparam_stack.push(static: true)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ @max_numparam_stack.pop
+ end
+
+ def try_declare_numparam(node)
+ 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_max_numparam_stack = max_numparam_stack.stack.dup
+
+ # ignore current block scope
+ raw_max_numparam_stack.pop
+
+ raw_max_numparam_stack.reverse_each do |outer_scope|
+ if outer_scope[:static]
+ # found an outer scope that can't have numparams
+ # like def/class/etc
+ break
+ else
+ outer_scope_has_numparams = outer_scope[:value] > 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
+ end
+ end
+
+ static_env.declare(name)
+ max_numparam_stack.register(name[1].to_i)
+
+ true
+ else
+ false
+ end
+ end
+##### State transition tables begin ###
+
+clist = [
+'-304,559,-113,-112,536,-111,-106,-304,-304,-304,281,559,-304,-304,-304',
+'-703,-304,281,-108,228,-114,815,218,219,-304,887,-304,-304,-304,600',
+'1093,-107,1026,602,857,-107,-304,-304,559,-304,-304,-304,-304,-304,752',
+'-588,218,219,-114,917,-106,559,-588,-112,559,229,218,219,622,876,229',
+'978,-109,-113,229,559,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304',
+'-304,-304,-304,-304,-691,-110,-304,-304,-304,-111,813,-304,-108,-113',
+'-304,747,874,-304,-304,599,-304,280,-304,601,-304,-109,-304,-304,280',
+'-304,-304,-304,-304,-304,-588,-304,1094,-304,1027,-97,229,-111,-691',
+'123,-113,-112,896,-111,122,-113,-112,-304,-111,123,-304,-304,-304,-304',
+'122,-304,-108,-304,-114,-694,229,-108,-304,-114,-98,-112,-694,-694,-694',
+'-107,229,-694,-694,-694,-107,-694,123,-105,-690,872,-703,122,-103,-694',
+'-694,-694,-694,-694,-106,123,977,-100,123,-106,122,-694,-694,122,-694',
+'-694,-694,-694,-694,123,101,102,870,-99,122,-100,281,-102,281,566,-102',
+'123,229,-99,-104,-110,122,752,-110,815,-110,-694,-694,-694,-694,-694',
+'-694,-694,-694,-694,-694,-694,-694,-694,-694,-109,885,-694,-694,-694',
+'-109,812,-694,815,-703,-694,218,219,-694,-694,868,-694,-591,-694,886',
+'-694,797,-694,-694,-591,-694,-694,-694,-694,-694,1085,-694,-694,-694',
+'-99,276,-100,276,-102,587,101,102,-101,103,104,229,1032,-694,-690,587',
+'-694,-694,-694,-694,-489,-694,-598,-694,280,-591,280,661,-694,-598,1031',
+'-110,-591,-591,-591,218,219,-591,-591,-591,-99,-591,-100,-99,-102,-100',
+'-108,-102,-591,-591,572,-591,-591,-591,834,-99,868,-100,-101,-102,87',
+'-591,-591,865,-591,-591,-591,-591,-591,589,588,123,88,-690,-101,587',
+'122,572,857,589,588,834,89,-597,103,104,1101,-598,810,783,-597,-591',
+'-591,-591,-591,-591,-591,-591,-591,-591,-591,-591,-591,-591,-591,250',
+'224,-591,-591,-591,226,-591,-591,1122,-101,-591,-602,-101,-591,-591',
+'587,-591,1120,-591,587,-591,698,-591,-591,-101,-591,-591,-591,-591,-591',
+'-599,-591,-588,-591,589,588,598,-599,-603,-588,-588,-588,-109,-597,-588',
+'-588,-588,-591,-588,123,-591,-591,-591,-591,122,-591,-588,-591,-588',
+'-588,-588,464,-591,572,-114,-591,225,573,-588,-588,-106,-588,-588,-588',
+'-588,-588,276,-703,-92,589,588,585,587,589,588,587,549,123,587,551,-78',
+'587,122,781,229,-599,684,-107,-588,-588,-588,-588,-588,-588,-588,-588',
+'-588,-588,-588,-588,-588,-588,276,536,-588,-588,-588,587,-588,-588,-114',
+'857,-588,566,587,-588,-588,918,-588,-596,-588,229,-588,621,-588,-588',
+'-596,-588,-588,-588,-588,-588,811,-588,-602,-588,589,588,592,589,588',
+'585,589,588,590,589,588,585,944,-588,-104,-593,-588,-588,-588,-588,1101',
+'-588,-593,-588,-603,-694,-113,549,-588,698,548,-588,-694,-694,-694,589',
+'588,603,-694,-694,-108,-694,589,588,594,-97,-109,224,-596,-694,-694',
+'-594,-595,549,569,-111,551,-106,-594,-595,511,-694,-694,567,-694,-694',
+'-694,-694,-694,549,509,-98,551,724,224,721,720,719,729,722,-593,575',
+'224,-107,229,218,219,1154,732,274,577,-694,-694,-694,-694,-694,-694',
+'-694,-694,-694,-694,-694,-694,-694,-694,-694,621,-694,-694,-694,727',
+'627,225,828,829,-694,-594,-595,-694,737,736,740,739,-694,123,-694,733',
+'-694,-694,122,-694,-694,-694,-694,-694,-304,-694,-694,-694,225,1083',
+'1084,-304,-304,-304,267,268,225,-304,-304,847,-304,-694,-100,845,-694',
+'-694,-694,-101,-304,-694,224,891,857,-694,-109,909,-694,274,-690,-110',
+'-304,-304,-694,-304,-304,-304,-304,-304,951,622,266,265,724,224,721',
+'720,719,729,722,821,1117,-694,740,739,817,891,857,732,818,577,-304,-304',
+'-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-688,226',
+'-304,-304,-304,727,626,-694,229,845,-304,225,-102,-304,737,736,740,739',
+'-304,843,-304,733,-304,-304,-111,-304,-304,-304,-304,-304,-304,-304',
+'935,-304,225,411,698,-304,-304,-304,413,412,732,-304,-304,270,-304,-304',
+'-105,970,-304,-304,-591,-103,-304,-304,837,250,123,-591,-114,909,-304',
+'122,-688,-112,-304,-304,-591,-304,-304,-304,-304,-304,-277,224,123,974',
+'836,-305,733,122,614,229,833,816,-305,-688,815,247,229,612,943,249,248',
+'-305,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304,-304',
+'-304,495,935,-304,-304,-304,-304,626,-591,995,996,-304,732,-304,-304',
+'495,229,999,-691,-304,797,-304,-304,-304,-304,798,-304,-304,-304,-304',
+'-304,225,-304,-694,-304,-305,1001,-278,785,784,-694,-694,-694,729,780',
+'1009,-694,-694,-304,-694,733,-304,-304,732,-304,1010,-304,-694,-694',
+'770,250,753,943,-304,1013,229,-112,-99,1015,-694,-694,-304,-694,-694',
+'-694,-694,-694,229,224,-108,749,1019,-305,-280,748,223,740,739,743,-305',
+'706,733,247,229,221,229,249,248,-305,-694,-694,-694,-694,-694,-694,-694',
+'-694,-694,-694,-694,-694,-694,-694,229,704,-694,-694,-694,1025,627,703',
+'224,1028,-694,698,542,-694,229,461,229,229,-694,229,-694,229,-694,-694',
+'462,-694,-694,-694,-694,-694,225,-694,-694,-694,-305,1114,-304,721,720',
+'719,687,722,224,-304,-92,1040,868,-694,-691,1117,-694,-694,-304,-694',
+'868,-694,-343,1044,577,1046,1048,1050,-694,-343,229,-110,303,79,80,81',
+'11,62,-343,225,1052,68,69,1053,229,229,72,-687,70,71,73,32,33,77,78',
+'126,127,128,129,130,82,30,29,111,110,112,113,-304,724,21,721,720,719',
+'225,722,10,50,305,12,115,114,116,105,61,107,106,108,-343,109,117,118',
+'-600,101,102,46,47,45,-601,-600,-588,229,224,672,1066,-601,878,-588',
+'-600,529,868,886,-687,1068,-601,882,-588,42,527,1070,35,1072,1074,63',
+'64,-295,1074,65,229,37,229,250,-295,49,1114,-687,721,720,719,250,722',
+'-295,22,250,250,1089,631,99,87,90,91,770,92,94,93,95,815,-600,1092,276',
+'88,98,1095,-601,620,-588,619,225,67,815,89,103,104,229,615,43,44,303',
+'79,80,81,11,62,611,610,-277,68,69,608,1111,-295,72,607,70,71,73,32,33',
+'77,78,242,604,579,1118,571,82,30,29,111,110,112,113,775,776,21,570,777',
+'117,118,403,10,50,305,12,115,114,116,105,61,107,106,108,566,109,117',
+'118,1123,101,102,46,47,45,250,254,255,256,257,267,268,262,263,258,259',
+'224,243,244,511,553,260,261,538,42,552,3,35,729,229,63,64,462,250,65',
+'1130,37,247,732,253,49,249,248,1131,245,246,266,265,251,22,252,539,533',
+'276,99,87,90,91,229,92,94,93,95,229,285,1139,530,88,98,523,264,740,739',
+'1142,868,67,733,89,103,104,1144,225,43,44,303,79,80,81,11,62,1146,1148',
+'1150,68,69,1150,1150,522,72,229,70,71,73,32,33,77,78,126,127,128,129',
+'130,82,30,29,111,110,112,113,703,-77,21,132,511,509,1163,616,10,50,305',
+'12,115,114,116,105,61,107,106,108,1164,109,117,118,1165,101,102,46,47',
+'45,250,254,255,256,257,267,268,262,263,258,259,1074,243,244,1074,1074',
+'260,261,507,42,495,228,307,1173,466,63,64,1142,1142,65,465,37,247,463',
+'253,49,249,248,414,245,246,266,265,251,22,252,229,330,329,99,87,90,91',
+'-691,92,94,93,95,-690,229,270,220,88,98,217,264,216,-250,1131,215,67',
+'1142,89,103,104,1186,1150,43,44,303,79,80,81,11,62,1150,1150,132,68',
+'69,1074,119,229,72,904,70,71,73,32,33,77,78,126,127,128,129,130,82,30',
+'29,111,110,112,113,-279,229,21,229,894,893,857,616,10,50,305,12,115',
+'114,116,105,61,107,106,108,888,109,117,118,,101,102,46,47,45,250,254',
+'255,256,257,267,268,262,263,258,259,,243,244,,,260,261,,42,,,35,,,63',
+'64,,,65,,37,247,,253,49,249,248,,245,246,266,265,251,22,252,,,,99,87',
+'90,91,,92,94,93,95,,,,,88,98,,264,,,,,67,,89,103,104,,,43,44,303,79',
+'80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,126,127,128,129,130',
+'82,30,29,111,110,112,113,,724,21,721,720,719,,722,10,50,305,12,115,114',
+'116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,250,254,255,256',
+'257,267,268,262,263,258,259,,243,244,,,260,261,,42,,,35,,,63,64,,,65',
+',37,247,,253,49,249,248,,245,246,266,265,251,22,252,,,,99,87,90,91,',
+'92,94,93,95,,,,,88,98,229,264,,,,,67,,89,103,104,,,43,44,303,79,80,81',
+'11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112',
+'113,,,21,,,,,,10,50,305,12,115,114,116,105,61,107,106,108,,109,117,118',
+',101,102,46,47,45,250,254,255,256,257,267,268,262,263,258,259,,243,244',
+',,260,261,,42,,,35,,,63,64,,,65,,37,247,,253,49,249,248,,245,246,266',
+'265,251,22,252,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,264,,,,,67,,89',
+'103,104,,,43,44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77',
+'78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,10,50,305,12,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,250,254,255,256,257',
+'267,268,262,263,258,259,,243,244,,,260,261,,42,,,35,,,63,64,,,65,,37',
+'247,,253,49,249,248,,245,246,266,265,251,22,252,,,,99,87,90,91,,92,94',
+'93,95,,,,,88,98,,264,,,,,67,,89,103,104,,,43,44,303,79,80,81,11,62,',
+',,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,',
+'21,,,,,,10,50,305,12,115,114,116,105,61,107,106,108,,109,117,118,,101',
+'102,46,47,45,250,254,255,256,257,267,268,262,263,258,259,,243,244,,',
+'260,261,,42,,,35,,,63,64,,,65,,37,247,,253,49,249,248,,245,246,266,265',
+'251,22,252,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,264,,,,,67,,89,103',
+'104,,,43,44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78',
+',,,,,82,30,29,111,110,112,113,,,21,,,,,,10,50,305,12,115,114,116,105',
+'61,107,106,108,,109,117,118,,101,102,46,47,45,250,254,255,256,257,267',
+'268,262,263,258,259,,243,244,,,260,261,,42,,,35,,,63,64,,,65,,37,247',
+',253,49,249,248,,245,246,266,265,251,22,252,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,264,,,,,67,,89,103,104,,,43,44,7,79,80,81,11,62,,,,68',
+'69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,724,21',
+'721,720,719,,722,10,50,9,12,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,724,,721,720,719,,722,,878,,724,,721,720,719,',
+'722,882,,42,,,35,,,63,64,,250,65,,37,,,,49,,878,,724,,721,720,719,22',
+'722,882,878,,99,87,90,91,,92,94,93,95,,,247,,88,98,249,248,,245,246',
+',67,,89,103,104,,878,43,44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71',
+'73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,10,50,305,12',
+'115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,250,254',
+'255,256,257,267,268,262,263,258,259,,-716,-716,,,260,261,,42,,,35,,',
+'63,64,,250,65,,37,247,,253,49,249,248,,245,246,266,265,251,22,252,,',
+',99,87,90,91,,92,94,93,95,,,247,,88,98,249,248,,245,246,,67,,89,103',
+'104,,,43,44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78',
+',,,,,82,30,29,111,110,112,113,,,21,,,,,,10,50,305,12,115,114,116,105',
+'61,107,106,108,,109,117,118,,101,102,46,47,45,250,254,255,256,257,267',
+'268,262,263,258,259,,-716,-716,,,260,261,,42,,,35,,,63,64,,,65,,37,247',
+',253,49,249,248,,245,246,266,265,251,22,252,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,724,,721,720,719,67,722,89,103,104,,,43,44,7,79,80,81',
+'11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,878,,,,,82,30,29,111,110',
+'112,113,,,21,,,,,,10,50,9,12,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,250,254,255,256,257,267,268,262,,258,259,,,,,',
+'260,261,,42,,,35,,,63,64,,,65,,37,247,,253,49,249,248,,245,246,266,265',
+'251,22,252,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104',
+',,43,44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,',
+',82,30,29,111,110,112,113,,,21,,,,,,10,50,305,12,115,114,116,105,61',
+'107,106,108,,109,117,118,,101,102,46,47,45,250,254,255,256,257,267,268',
+'262,263,258,259,,-716,-716,,,260,261,,42,,,35,,,63,64,,,65,,37,247,',
+'253,49,249,248,,245,246,266,265,251,22,252,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,303,79,80,81,11,62,,,,68,69',
+',,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,',
+'10,50,305,12,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46',
+'47,45,250,254,255,256,257,267,268,,,258,259,,,,,,260,261,,42,,,35,,',
+'63,64,,,65,,37,247,,253,49,249,248,,245,246,266,265,251,22,252,,,,99',
+'87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,303,79',
+'80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110',
+'112,113,,,21,,,,,,10,50,305,12,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,250,,,,,,,,,,,,,,,,260,261,,42,,,35,,,63,64,,',
+'65,,37,247,,253,49,249,248,,245,246,,,251,22,252,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,303,79,80,81,11,62,',
+',,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,',
+'21,,,,,,10,50,305,12,115,114,116,105,61,107,106,108,,109,117,118,,101',
+'102,46,47,45,250,,,,,,,,,,,,,,,,260,261,,42,,,35,,,63,64,,,65,,37,247',
+',253,49,249,248,,245,246,,,251,22,252,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,,,,67,,89,103,104,,,43,44,303,79,80,81,11,62,,,,68,69,,,',
+'72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,10',
+'50,305,12,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47',
+'45,250,254,255,256,257,267,268,262,263,258,259,,-716,-716,,,260,261',
+',42,,,35,,,63,64,,,65,,37,247,,253,49,249,248,,245,246,266,265,251,22',
+'252,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43',
+'44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30',
+'29,111,110,112,113,,,21,,,,,,10,50,305,12,115,114,116,105,61,107,106',
+'108,,109,117,118,,101,102,46,47,45,250,-716,-716,-716,-716,267,268,',
+',-716,-716,,,,,,260,261,,42,,,35,,,63,64,,,65,,37,247,,253,49,249,248',
+',245,246,266,265,251,22,252,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,',
+',,,,67,,89,103,104,,,43,44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71',
+'73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,10,50,305,12',
+'115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,250,-716',
+'-716,-716,-716,267,268,,,-716,-716,,,,,,260,261,,42,,,307,,,63,64,,',
+'65,,37,247,,253,49,249,248,,245,246,266,265,251,22,252,,,,99,87,90,91',
+',92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,303,79,80,81,11',
+'62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113',
+',,21,,,,,,10,50,305,12,115,114,116,105,61,107,106,108,,109,117,118,',
+'101,102,46,47,45,250,-716,-716,-716,-716,267,268,,,-716,-716,,,,,,260',
+'261,,42,,,35,,,63,64,,,65,,37,247,,253,49,249,248,,245,246,266,265,251',
+'22,252,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,',
+'43,44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82',
+'30,29,111,110,112,113,,,21,,,,,,10,50,305,12,115,114,116,105,61,107',
+'106,108,,109,117,118,,101,102,46,47,45,250,-716,-716,-716,-716,267,268',
+',,-716,-716,,,,,,260,261,,42,,,35,,,63,64,,,65,,37,247,,253,49,249,248',
+',245,246,266,265,251,22,252,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,',
+',,,,67,,89,103,104,,,43,44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71',
+'73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,10,50,305,12',
+'115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,250,-716',
+'-716,-716,-716,267,268,,,-716,-716,,,,,,260,261,,42,,,35,,,63,64,,,65',
+',37,247,,253,49,249,248,,245,246,266,265,251,22,252,,,,99,87,90,91,',
+'92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,303,79,80,81,11,62',
+',,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,',
+',21,,,,,,10,50,305,12,115,114,116,105,61,107,106,108,,109,117,118,,101',
+'102,46,47,45,250,-716,-716,-716,-716,267,268,,,-716,-716,,,,,,260,261',
+',42,,,35,,,63,64,,,65,,37,247,,253,49,249,248,,245,246,266,265,251,22',
+'252,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43',
+'44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30',
+'29,111,110,112,113,,,21,,,,,,10,50,305,12,115,114,116,105,61,107,106',
+'108,,109,117,118,,101,102,46,47,45,250,,,,,,,,,,,,,,,,260,261,,42,,',
+'35,,,63,64,,,65,,37,247,,253,49,249,248,,245,246,,,,22,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,303,79,80,81',
+'11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112',
+'113,,,21,,,,,,10,50,305,12,115,114,116,105,61,107,106,108,,109,117,118',
+',101,102,46,47,45,250,,,,,,,,,,,,,,,,260,261,,42,,,35,,,63,64,,,65,',
+'37,247,,253,49,249,248,,245,246,,,,22,,,,,99,87,90,91,,92,94,93,95,',
+',,,88,98,,,,,,,67,,89,103,104,,,43,44,303,79,80,81,11,62,,,,68,69,,',
+',72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,10',
+'50,305,12,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47',
+'45,250,,,,,,,,,,,,,,,,260,261,,42,,,307,,,63,64,,,65,,37,247,,,49,249',
+'248,,245,246,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,',
+'89,103,104,,,43,44,303,79,80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33',
+'77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,10,50,305,12,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',42,,,35,,,63,64,,,65,,37,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,303,79,80,81,11,62,,,,68,69',
+',,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,',
+'10,50,305,12,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46',
+'47,45,,,,,,,,,,,,,,,,,,,,42,,,35,,,63,64,,,65,,37,,,,49,,,,,,,,,22,',
+',,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68',
+'69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21',
+',,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47',
+'45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,22,,,,',
+'99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,79,80',
+'81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110',
+'112,113,,,21,,,,,,10,50,9,12,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,42,,,35,,,63,64,,,65,,37,,',
+',49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67',
+'62,89,103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111',
+'110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,',
+',49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,,89',
+'103,104,-424,,43,44,,,,-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,,276,-424,,,-424,-424,,-424',
+',-424,,-424,,-424,-424,,-424,-424,-424,-424,-424,-311,-424,-424,-424',
+',,,-311,-311,-311,,,-311,-311,-311,,-311,-424,,,-424,-424,,-424,-311',
+'-424,-311,-311,,,,,-424,,,,-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,,285,-311,,,-311,-311,,-311,',
+'-311,,-311,,-311,-311,,-311,-311,-311,-311,-311,,-311,,-311,,,,,,,,',
+',,,,,-311,,,-311,-311,,-311,,-311,79,80,81,,62,,-311,,68,69,,,,72,,70',
+'71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115',
+'114,116,105,61,107,106,108,297,109,117,118,,101,102,46,47,45,,,,,,,',
+',,,,,,,,,,,,234,,,240,,,63,64,,,65,,294,,292,,49,,,298,,,,,,239,,,,',
+'99,295,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68',
+'69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241',
+',,,,,,50,,,115,114,116,105,61,107,106,108,297,109,117,118,,101,102,46',
+'47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,294,,292,,49,,,298',
+',,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89',
+'103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110',
+'112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,297,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,294',
+',292,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98,,,,79',
+'80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,',
+'82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106',
+'108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63',
+'64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78',
+',,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61',
+'107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,',
+'240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323',
+'77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105',
+'61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322',
+'323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114',
+'116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,',
+',,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,,,,67,,89,103,104,-296,,43,44,,,,-296,-296,-296',
+',,-296,-296,-296,,-296,,,,,,,,-296,,-296,-296,-296,,,,111,110,112,113',
+'-296,-296,,-296,-296,-296,-296,-296,,,,,115,114,116,,,,,,,,,,,101,102',
+',,326,-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,,99,87,90,91,,92,94,93,95',
+',,,-296,88,98,-296,-296,-296,-296,,-296,660,-296,89,103,104,,-296,79',
+'80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110',
+'112,113,,,21,,,,,,10,50,,12,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,42,,,35,,,63,64,,,65,,37,,',
+',49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67',
+'62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325',
+'111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,297',
+'109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,',
+',65,,294,,,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98',
+',,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78',
+',,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61',
+'107,106,108,297,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,,,,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,123,,,,,122,67,,89,103,104,,,43,44,79,80,81,11,62,,,,68',
+'69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,',
+',,,10,50,9,12,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46',
+'47,45,,,,,,,,,,,,,,,,,,,,42,,,35,,,63,64,,,65,,37,,,,49,,,,,,,,,22,',
+',,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,403,67,,89,103,104,,,43,44',
+'79,80,81,,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111',
+'110,112,113,,,21,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,',
+',49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67',
+'62,89,103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111',
+'110,112,113,,,21,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,',
+',49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67',
+'62,89,103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111',
+'110,112,113,,,21,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,',
+',49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67',
+'62,89,103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111',
+'110,112,113,,,21,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,',
+',49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103',
+'104,,,43,44,79,80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,',
+',82,30,29,111,110,112,113,,,21,,,,,,10,50,,12,115,114,116,105,61,107',
+'106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,42,,,35,,',
+'63,64,,,65,,37,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88',
+'98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,32,33,77,78',
+',,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107',
+'106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240',
+',,63,64,,,65,,419,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,',
+',88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,32,33',
+'77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105',
+'61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,419,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,297,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,',
+',,,,234,,,240,,,63,64,,,65,,294,,292,,49,,,298,,,,,,239,,,,,99,295,90',
+'91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,',
+'72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50',
+',,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,',
+',,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87',
+'90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44',
+',72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,,50',
+',,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,',
+',,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,22,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,',
+'72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,,50',
+',,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,',
+',,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,22,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,229,,,79,80,81,67,62,89,103,104,68,69,43,44',
+',72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,',
+',,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47',
+'45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68',
+'69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113',
+',,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102',
+'46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104',
+'68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112',
+'113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101',
+'102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,',
+',,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103',
+'104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110',
+'112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118',
+',101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49',
+',,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62',
+'89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111',
+'110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,',
+',49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67',
+'62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325',
+'111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109',
+'117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65',
+',,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80',
+'81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82',
+'319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106',
+'108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63',
+'64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78',
+',,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61',
+'107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,',
+'240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323',
+'77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105',
+'61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322',
+'323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114',
+'116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,',
+',,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70',
+'71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,',
+',115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,',
+',,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,',
+'72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,',
+',,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45',
+',,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99',
+'87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43',
+'44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241',
+',,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47',
+'45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68',
+'69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113',
+',,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102',
+'46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104',
+'68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112',
+'113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101',
+'102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,',
+',,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103',
+'104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110',
+'112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118',
+',101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49',
+',,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62',
+'89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111',
+'110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,',
+',49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67',
+'62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325',
+'111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109',
+'117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65',
+',,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80',
+'81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82',
+'319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106',
+'108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63',
+'64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78',
+',,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61',
+'107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,',
+'240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323',
+'77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105',
+'61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322',
+'323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114',
+'116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,',
+',,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70',
+'71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115',
+'114,116,105,61,107,106,108,297,109,117,118,,101,102,46,47,45,,,,,,,',
+',,,,,,,,,,,,234,,,240,,,63,64,,,65,,294,,292,,49,,,298,,,,,,239,,,,',
+'99,295,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68',
+'69,43,497,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,',
+'241,,,,,,,50,,,115,114,116,105,61,107,106,108,297,109,117,118,,101,102',
+'46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,294,,292,,49,,,298',
+',,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89',
+'103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110',
+'112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,297,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,294',
+',292,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98,229',
+',,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78',
+',,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61',
+'107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,',
+'240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323',
+'77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105',
+'61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322',
+'323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114',
+'116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,',
+',,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,79,80,81,11,62,,,,68',
+'69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,',
+',,,10,50,,12,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46',
+'47,45,,,,,,,,,,,,,,,,,,,,42,,,35,,,63,64,,,65,,37,,,,49,,,,,,,,,22,',
+',,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68',
+'69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241',
+',,,,,,50,,,115,114,116,105,61,107,106,108,297,109,117,118,,101,102,46',
+'47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,294,,292,,49,,,298',
+',,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89',
+'103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110',
+'112,113,,,21,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118',
+',101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49',
+',,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62',
+'89,103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110',
+'112,113,,,21,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118',
+',101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49',
+',,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62',
+'89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111',
+'110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117',
+'118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,',
+',49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67',
+'62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325',
+'111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109',
+'117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,542,,63,64,,',
+'65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79',
+'80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82',
+'30,29,111,110,112,113,,,21,,,,,,,50,,,115,114,116,105,61,107,106,108',
+',109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64',
+',,65,,,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79',
+'80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82',
+'30,29,111,110,112,113,,,21,,,,,,,50,,,115,114,116,105,61,107,106,108',
+',109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64',
+',,65,,,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79',
+'80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82',
+'30,29,111,110,112,113,,,21,,,,,,,50,,,115,114,116,105,61,107,106,108',
+',109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64',
+',,65,,,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79',
+'80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,',
+'82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106',
+'108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63',
+'64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,,,,67,,89,103,104,-260,,43,44,,,,-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,,276,-260,,,-260,-260',
+',-260,,-260,,-260,,-260,-260,,-260,-260,-260,-260,-260,,-260,-260,-260',
+'724,,721,720,719,729,722,,,,,,,-260,,732,-260,-260,-695,-260,,-260,',
+',,-695,-695,-695,-260,,-695,-695,-695,,-695,,,727,,,,,-695,-695,-695',
+'-695,-695,,740,739,,,,733,-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,-696,-695,,,,,-695,-696,-696,-696',
+',,-696,-696,-696,,-696,,,,,,,,-696,-696,-696,-696,-696,,,,,,,,-696,-696',
+',-696,-696,-696,-696,-696,,,,,,,,,,,,,,,,,,,,,,,-696,-696,-696,-696',
+'-696,-696,-696,-696,-696,-696,-696,-696,-696,-696,,,-696,-696,-696,',
+',-696,,,-696,,,-696,-696,,-696,,-696,,-696,,-696,-696,,-696,-696,-696',
+'-696,-696,,-696,-696,-696,,,,,,,,,,,,,,-696,,,-696,-696,-696,-696,,-696',
+',-696,,79,80,81,-696,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82',
+'30,29,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108',
+'297,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63',
+'64,,,65,,294,,292,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94,93,95,',
+',,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322',
+'323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114',
+'116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,',
+',,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70',
+'71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,',
+',115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,',
+',,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,-260,,43,44,,,,-260,-260',
+'-260,,,-260,-260,-260,724,-260,721,720,719,729,722,,,-260,-260,-260',
+',,,732,,,,,,-260,-260,,-260,-260,-260,-260,-260,,,,,,,,724,727,721,720',
+'719,729,722,,,,737,736,740,739,,732,,733,,724,,721,720,719,729,722,-260',
+',,,,,,-260,732,,,727,276,-260,,,,229,,,737,736,740,739,,,,733,,,727',
+',,,,-260,-260,,,737,736,740,739,,,,733,,,,-260,,,-260,,79,80,81,-260',
+'62,,,,68,69,-260,,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110',
+'112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118',
+',101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49',
+',,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62',
+'89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111',
+'110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,297,109',
+'117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65',
+',681,,292,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98',
+',,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78',
+',,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61',
+'107,106,108,297,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,,,292,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94',
+'93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71',
+'73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115',
+'114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,',
+',,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91',
+',92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,79,80,81,11,62,',
+',,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,',
+'21,,,,,,10,50,305,12,115,114,116,105,61,107,106,108,,109,117,118,,101',
+'102,46,47,45,,,,,,,,,,,,,,,,,,,,42,,,35,,,63,64,,,65,,37,,,,49,,,,,',
+',,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,403,67,,89,103,104',
+',,43,44,79,80,81,,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30',
+'29,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,297',
+'109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,',
+',65,,294,,292,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88',
+'98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77',
+'78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105',
+'61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322',
+'323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'32,33,77,78,,,,,,82,30,29,111,110,112,113,,,21,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,',
+',234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114',
+'116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,',
+',,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70',
+'71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,',
+',115,114,116,105,61,107,106,108,297,109,117,118,,101,102,46,47,45,,',
+',,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,681,,,,49,,,298,,,,,,239,,',
+',,99,295,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68',
+'69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113',
+',,241,,,,,,,50,,,115,114,116,105,61,107,106,108,297,109,117,118,,101',
+'102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,298',
+',,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89',
+'103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111',
+'110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,297,109',
+'117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65',
+',,,292,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98,,',
+',79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,',
+',,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107',
+'106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240',
+',,63,64,,,65,,294,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,',
+',88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,32,33',
+'77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105',
+'61,107,106,108,297,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,',
+'234,,,240,,,63,64,,,65,,294,,292,,49,,,298,,,,,,239,,,,,99,295,90,91',
+',92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72',
+',70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,',
+',115,114,116,105,61,107,106,108,297,109,117,118,,101,102,46,47,45,,',
+',,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,294,,292,,49,,,298,,,,,,239',
+',,,,99,295,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104',
+'68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112',
+'113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101',
+'102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,681,,,,49,,',
+',,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104',
+',,43,44,79,80,81,11,62,,,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82',
+'30,29,111,110,112,113,,,21,,,,,,10,50,,12,115,114,116,105,61,107,106',
+'108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,42,,,35,,,63,64',
+',,65,,37,,,,49,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,',
+'79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,',
+',,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107',
+'106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240',
+',,63,64,,,65,,789,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,',
+',88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,32,33',
+'77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105',
+'61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,32',
+'33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115,114,116',
+'105,61,107,106,108,297,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,',
+',,,,234,,,240,,,63,64,,,65,,294,,292,,49,,,298,,,,,,239,,,,,99,295,90',
+'91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103,104,,,43,44,79,80,81,11,62',
+',,,68,69,,,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,',
+',21,,,,,,10,50,,12,115,114,116,105,61,107,106,108,,109,117,118,,101',
+'102,46,47,45,,,,,,,,,,,,,,,,,,,,42,,,35,,,63,64,,,65,,37,,,,49,,,,,',
+',,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103',
+'104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110',
+'112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118',
+',101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49',
+',,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62',
+'89,103,104,68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110',
+'112,113,,,21,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118',
+',101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49',
+',,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62',
+'89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111',
+'110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,297,109',
+'117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65',
+',681,,292,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98',
+',,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78',
+',,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61',
+'107,106,108,297,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,,,292,,49,,,298,,,,,,239,,,,,99,295,90,91,,92,94',
+'93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71',
+'73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115,114',
+'116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,',
+',,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70',
+'71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,,,115',
+'114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,',
+',,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91',
+',92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72',
+',70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50,',
+',115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,',
+',,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,',
+'72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113,,,241,,,,,,,50',
+',,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,',
+',,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87',
+'90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44',
+',72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,',
+',,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47',
+'45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68',
+'69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113',
+',,241,,,,,,,50,,,115,114,116,105,61,107,106,108,297,109,117,118,,101',
+'102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,681,,292,,49',
+',,298,,,,,,239,,,,,99,295,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67',
+'62,89,103,104,68,69,43,497,,72,,70,71,73,322,323,77,78,,,,,,82,319,325',
+'111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109',
+'117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65',
+',,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80',
+'81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82',
+'319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61,107,106',
+'108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63',
+'64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323,77,78',
+',,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105,61',
+'107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,',
+'240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73,322,323',
+'77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114,116,105',
+'61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,,,,,,,234',
+',,240,,,63,64,,,65,,419,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70,71,73',
+'322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,,,115,114',
+'116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,,,,,,,,,,',
+',,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,,72,,70',
+'71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,50,',
+',115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45,,,,,',
+',,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43,44,',
+'72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,',
+',,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47,45',
+',,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,,,99',
+'87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,43',
+'44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241',
+',,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102,46,47',
+'45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239,,,',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68',
+'69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113',
+',,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102',
+'46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104',
+'68,69,43,44,,72,,70,71,73,32,33,77,78,,,,,,82,30,29,111,110,112,113',
+',,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102',
+'46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,,,,,239',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104',
+'68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112',
+'113,,,241,,,,,,,50,,,115,114,116,105,61,107,106,108,,109,117,118,,101',
+'102,46,47,45,,,,,,,,,,,,,,,,,,,,234,,,240,,,63,64,,,65,,,,,,49,,,,,',
+',,,239,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103',
+'104,68,69,43,44,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110',
+'112,113,,,241,,,,,,,320,,,115,114,116,369,61,107,106,370,,109,117,118',
+',101,102,,,326,,,,,,,,,,,,,,,,,376,,,371,,,240,,,63,64,,,65,,,,,,,,',
+',,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103',
+'104,68,69,,,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112',
+'113,,,241,,,,,,,320,,,115,114,116,105,61,107,106,108,,109,117,118,,101',
+'102,,,326,,,,,,,,,,,,,,,,,,,,364,,,35,,,63,64,,,65,,37,,,,,,,,,,,,,',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104',
+'68,69,,,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113',
+',,241,,,,,,,320,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102',
+',,326,,,,,,,,,,,,,,,,,,,,316,,,312,,,63,64,,,65,,,,,,,,,,,,,,,,,,,,99',
+'87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,',
+',,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,',
+',,,,,320,,,115,114,116,105,61,107,106,108,,109,117,118,,101,102,,,326',
+',,,,,,,,,,,,,,,,,,,316,,,312,,,63,64,,,65,,,,,,,,,,,,,,,,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,,,,72,',
+'70,71,73,322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,320',
+',,115,114,116,105,61,107,106,108,,109,117,118,,101,102,,,326,,,,,,,',
+',,,,,,,,,,,,316,,,312,,,63,64,,,65,,,,,,,,,,,,,,,,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,,,,72,,70,71,73',
+'322,323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,320,,,115',
+'114,116,105,61,107,106,108,,109,117,118,,101,102,,,326,,,,,,,,,,,,,',
+',,,,,,316,,,240,,,63,64,,,65,,,724,,721,720,719,729,722,,,,,,,,,732',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,525,,727,67,,89,103,104,79,80',
+'81,,62,740,739,,68,69,733,,,72,,70,71,73,322,323,77,78,,,,,,82,319,325',
+'111,110,112,113,,,241,,,,,,,320,,,115,114,116,369,61,107,106,370,,109',
+'117,118,,101,102,,,326,,,,,,,,,,,,,,,,,,,,371,,,240,,,63,64,,,65,,,',
+',,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81,67,62',
+'89,103,104,68,69,,,,72,,70,71,73,322,323,77,78,,,,,,82,319,325,111,110',
+'112,113,,,241,,,,,,,320,,,115,114,116,105,61,107,106,108,,109,117,118',
+',101,102,,,326,,,,,,,,,,,,,,,,,,,,316,,,240,,,63,64,,,65,,,724,,721',
+'720,719,729,722,,,,,,,,,732,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,328',
+',727,67,,89,103,104,79,80,81,,62,740,739,,68,69,733,,,72,,70,71,73,322',
+'323,77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,320,,,115,114',
+'116,105,61,107,106,108,,109,117,118,,101,102,,,326,,,,,,,,,,,,,,,,,',
+',,1061,,,240,,,63,64,,,65,,,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,79,80,81,67,62,89,103,104,68,69,,,,72,,70,71,73,322,323',
+'77,78,,,,,,82,319,325,111,110,112,113,,,241,,,,,,,320,,,115,114,116',
+'105,61,107,106,108,,109,117,118,,101,102,,,326,,,,,,,,,,,,,,,,,,,,1055',
+',,240,,,63,64,,,65,,,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88',
+'98,,,,79,80,81,67,62,89,103,104,68,69,,,,72,,70,71,73,322,323,77,78',
+',,,,,82,319,325,111,110,112,113,,,241,,,,,,,320,,,115,114,116,105,61',
+'107,106,108,,109,117,118,,101,102,,,326,,,,,,,,,,,,,,,,,,,,316,,,312',
+',,63,64,,,65,,311,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98',
+',,,79,80,81,67,62,89,103,104,68,69,,,,72,,70,71,73,322,323,77,78,,,',
+',,82,319,325,111,110,112,113,,,241,,,,,,,320,,,115,114,116,105,61,107',
+'106,108,,109,117,118,,101,102,,,326,,,,,,,,,,,,,,,,,,,,316,,,312,,,63',
+'64,,,65,,,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79',
+'80,81,67,62,89,103,104,68,69,,,,72,,70,71,73,322,323,77,78,,,,,,82,319',
+'325,111,110,112,113,,,241,,,,,,,320,,,115,114,116,105,61,107,106,108',
+',109,117,118,,101,102,,,326,,,,,,,,,,,,,,,,,,,,1055,,,240,,,63,64,,',
+'65,,,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,79,80,81',
+'67,62,89,103,104,68,69,,,,72,,70,71,73,322,323,77,78,,,,,,82,319,325',
+'111,110,112,113,,,241,,,,,,,320,,,115,114,116,105,61,107,106,108,,109',
+'117,118,,101,102,,,326,,,,,,,,,,,,,,,,,,,,316,,,312,,,63,64,,,65,,,',
+',,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,67,,89,103',
+'104,182,193,183,206,179,199,189,188,209,210,204,187,186,181,207,211',
+'212,191,180,194,198,200,192,185,,,,201,208,203,202,195,205,190,178,197',
+'196,,,,,,177,184,175,176,172,173,174,135,137,,,136,,,,,,,,166,167,,163',
+'145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,,,,,,,,,160',
+'159,,144,165,162,161,170,157,158,152,150,142,164,143,,,171,99,,,,,,',
+',,,,,,,98,182,193,183,206,179,199,189,188,209,210,204,187,186,181,207',
+'211,212,191,180,194,198,200,192,185,,,,201,208,203,202,195,205,190,178',
+'197,196,,,,,,177,184,175,176,172,173,174,135,137,,,136,,,,,,,,166,167',
+',163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,,,,,',
+',,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143,,,171,99',
+',,,,,,,,,,,,,98,182,193,183,206,179,199,189,188,209,210,204,187,186',
+'181,207,211,212,191,180,194,198,200,192,185,,,,201,208,203,202,195,205',
+'190,178,197,196,,,,,,177,184,175,176,172,173,174,135,137,,,136,,,,,',
+',,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156',
+',,,,,,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143',
+',,171,99,,,,,,,,,,,,,,98,182,193,183,206,179,199,189,188,209,210,204',
+'187,186,181,207,211,212,191,180,194,198,200,192,185,,,,201,208,203,202',
+'195,205,190,178,197,196,,,,,,177,184,175,176,172,173,174,135,137,134',
+',136,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169',
+'155,156,,,,,,,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142',
+'164,143,,,171,99,111,110,112,113,,,,,,,,,,98,,,115,114,116,661,,,724',
+'664,721,720,719,729,722,101,102,,,326,,,,732,,,,,,,,,,,,,,,,663,,,645',
+',,727,643,,,644,,,,,737,736,740,739,,,,733,,,,662,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,111,110,112,113,,,660,,89,103,104,,,649,650,,115',
+'114,116,661,,,,664,935,,,,,101,102,,,326,732,,,,,,,,,,,,,,,,,,,663,',
+',645,,,,643,,,644,,929,,,,,,,733,,,,,,,662,,,,99,936,90,91,,92,94,93',
+'95,,,,,88,98,,,,,,,660,,89,103,104,,,649,650,182,193,183,206,179,199',
+'189,188,209,210,204,187,186,181,207,211,212,191,180,194,198,200,192',
+'185,,,,201,208,203,202,195,205,190,178,197,196,,,,,,177,184,175,176',
+'172,173,174,135,137,,,136,,,,,,,,166,167,,163,145,146,147,154,151,153',
+',,148,149,,,,168,169,155,156,,,,,,,,,,,,,,160,159,,144,165,162,161,170',
+'157,158,152,150,142,164,143,,,171,111,110,112,113,,,724,,721,720,719',
+'729,722,,,,115,114,116,661,,732,,664,,,,,,101,102,,,326,,,,,,,,,,727',
+',,,,,,,,,663,740,739,645,,,733,643,,,644,,,,,,,,,,,,,,,,662,,,,99,87',
+'90,91,,92,94,93,95,,,,,88,98,111,110,112,113,,,660,,89,103,104,,,649',
+'650,,115,114,116,661,,,,664,935,,,,,101,102,,,326,732,,,,,,,,,,,,,,',
+',,,,663,,,645,,,,643,,,644,,929,,,,,,,733,,,,,,,662,,,,99,936,90,91',
+',92,94,93,95,,,,,88,98,111,110,112,113,,,660,,89,103,104,,,649,650,',
+'115,114,116,661,,,724,664,721,720,719,729,722,101,102,,,326,,,,732,',
+',,,,,,,,,,,,,,663,,,645,,,727,643,,,644,,,,,737,736,740,739,,,,733,',
+',,662,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111,110,112,113,,,660,,89',
+'103,104,,,649,650,,115,114,116,661,,,724,664,721,720,719,729,722,101',
+'102,,,326,,,,732,,,,,,,,,,,,,,,,663,,,645,,,727,643,,,644,,929,,,737',
+'736,740,739,,,,733,,,,662,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111',
+'110,112,113,,,660,,89,103,104,,,649,650,,115,114,116,661,,,724,664,721',
+'720,719,729,722,101,102,,,326,,,,732,,,,,,,,,,,,,,,,663,,,645,,,727',
+'643,,,644,,,,,737,736,740,739,,,,733,,,,662,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,111,110,112,113,,,660,,89,103,104,,,649,650,,115,114,116',
+'661,,,724,664,721,720,719,729,722,101,102,,,326,,,,732,,,,,,,,,,,,,',
+',,663,,,645,,,727,643,,,644,,,,,,,740,739,,,,733,,,,662,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,111,110,112,113,,,660,,89,103,104,,,649,650',
+',115,114,116,661,,,724,664,721,720,719,729,722,101,102,,,326,,,,732',
+',,,,,,,,,,,,,,,663,,,645,,,727,643,,,644,,929,,,,,740,739,,,,733,,,',
+'662,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,660,,89,103,104,,,649',
+'650,182,193,183,206,179,199,189,188,209,210,204,187,186,181,207,211',
+'212,191,180,194,198,200,192,185,,,,201,208,203,387,386,388,385,178,197',
+'196,,,,,,177,184,175,176,382,383,384,380,137,107,106,381,,109,,,,,,166',
+'167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,392',
+',,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143,,,171',
+'111,110,112,113,,,724,,721,720,719,729,722,,,,115,114,116,661,,732,',
+'664,,,,,,101,102,,,326,,,,,,,,,,727,,,,,,,,,,663,740,739,645,,,733,643',
+',,644,,,,,,,,,,,,,,,,662,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111,110',
+'112,113,,,660,,89,103,104,,,649,650,,115,114,116,661,,,,664,935,,,,',
+'101,102,,,326,732,,,,,,,,,,,,,,,,,,,663,,,645,,,,643,,,644,,929,,,,',
+',,733,,,,,,,662,,,,99,936,90,91,,92,94,93,95,,,,,88,98,111,110,112,113',
+',,660,,89,103,104,,,649,650,,115,114,116,661,,,724,664,721,720,719,729',
+'722,101,102,,,326,,,,732,,,,,,,,,,,,,,,,663,,,645,,,727,643,,,644,,',
+',,,,740,739,,,,733,,,,662,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111',
+'110,112,113,,,660,,89,103,104,,,649,650,,115,114,116,661,,,724,664,721',
+'720,719,729,722,101,102,,,326,,,,732,,,,,,,,,,,,,,,,663,,,645,,,727',
+'643,,,644,,,,,737,736,740,739,,,,733,,,,662,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,111,110,112,113,,,660,,89,103,104,,,649,650,,115,114,116',
+'661,,,724,664,721,720,719,729,722,101,102,,,326,,,,732,,,,,,,,,,,,,',
+',,663,,,645,,,727,643,,,644,,,,,,,740,739,,,,733,,,,662,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,111,110,112,113,,,660,,89,103,104,,,649,650',
+',115,114,116,661,,,,664,,,,,,101,102,,,326,,,,,,,,111,110,112,113,,',
+',,,,,,663,,,645,115,114,116,643,,,644,,1024,,,,,101,102,,,326,,,,,662',
+',,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,660,,89,103,104,,,649,650',
+'724,,721,720,719,729,722,,,,,99,87,90,91,732,92,94,93,95,,,,,88,98,111',
+'110,112,113,,,660,,89,103,104,727,709,,,,115,114,116,,737,736,740,739',
+',,,733,,101,102,,,326,111,110,112,113,,,,,,,,,,,,,115,114,116,,,,,,',
+',,,,101,102,,,326,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98',
+',,,,,,660,,89,103,104,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,1161',
+'452,,,1162,,660,,89,103,104,,166,167,,163,145,146,147,154,151,153,,',
+'148,149,,,,168,169,155,156,,,,,,276,,,,,,,,160,159,,144,165,162,161',
+'170,157,158,152,150,142,164,143,1159,445,171,,1160,,,,,,,,166,167,,163',
+'145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,276,,,,,,',
+',160,159,,144,165,162,161,170,157,158,152,150,142,164,143,694,452,171',
+',695,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169',
+'155,156,,,,,,276,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150',
+'142,164,143,1156,452,171,,1155,,,,,,,,166,167,,163,145,146,147,154,151',
+'153,,,148,149,,,,168,169,155,156,,,,,,276,,,,,,,,160,159,,144,165,162',
+'161,170,157,158,152,150,142,164,143,634,452,171,,635,,,,,,,,166,167',
+',163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,276,',
+',,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143,632,445',
+'171,,633,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168',
+'169,155,156,,,,,,276,,,,,,,,160,159,,144,165,162,161,170,157,158,152',
+'150,142,164,143,448,452,171,,447,,,,,,,,166,167,,163,145,146,147,154',
+'151,153,,,148,149,,,,168,169,155,156,,,,,,276,,,,,,,,160,159,,144,165',
+'162,161,170,157,158,152,150,142,164,143,441,445,171,,442,,,,,,,,166',
+'167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,276',
+',,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143,634',
+'452,171,,635,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,',
+',,168,169,155,156,,,,,,276,,,,,,,,160,159,,144,165,162,161,170,157,158',
+'152,150,142,164,143,756,445,171,,757,,,,,,,,166,167,,163,145,146,147',
+'154,151,153,,,148,149,,,,168,169,155,156,,,,,,276,,,,,,,,160,159,,144',
+'165,162,161,170,157,158,152,150,142,164,143,758,452,171,,759,,,,,,,',
+'166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,',
+',,,276,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143',
+'632,445,171,,633,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149',
+',,,168,169,155,156,,,,,,276,,,,,,,,160,159,,144,165,162,161,170,157',
+'158,152,150,142,164,143,794,452,171,,793,,,,,,,,166,167,,163,145,146',
+'147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,276,,,,,,,,160,159',
+',144,165,162,161,170,157,158,152,150,142,164,143,493,445,171,,494,,',
+',,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156',
+',,,,,,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143',
+'761,452,171,,762,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149',
+',,,168,169,155,156,,,,,,276,,,,,,,,160,159,,144,165,162,161,170,157',
+'158,152,150,142,164,143,493,445,171,,494,,,,,,,,166,167,,163,145,146',
+'147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,276,,,,,,,,160,159',
+',144,165,162,161,170,157,158,152,150,142,164,143,791,445,171,,792,,',
+',,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156',
+',,,,,276,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164',
+'143,691,445,171,,692,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148',
+'149,,,,168,169,155,156,,,,,,276,,,,,,,,160,159,,144,165,162,161,170',
+'157,158,152,150,142,164,143,,724,171,721,720,719,729,722,,724,,721,720',
+'719,729,722,732,,,,,,,,732,,,,,,,,,,,,,,727,,,,,,,,727,,,740,739,,,',
+'733,737,736,740,739,,,,733' ]
+ racc_action_table = arr = ::Array.new(27375, 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,754,1123,1162,463,1160,361,635,635,635,66,354,635,635,635,817,635',
+'669,1181,21,1062,945,457,457,635,738,635,635,635,399,1024,1059,929,400',
+'1172,362,635,635,353,635,635,635,635,635,1172,380,701,701,365,799,1058',
+'1000,380,759,973,817,584,584,792,726,21,863,756,463,945,1002,635,635',
+'635,635,635,635,635,635,635,635,635,635,635,635,1162,1161,635,635,635',
+'757,635,635,898,570,635,561,717,635,635,399,635,66,635,400,635,1159',
+'635,635,669,635,635,635,635,635,380,635,1024,635,929,361,457,792,759',
+'754,1123,1162,754,1160,754,1123,1162,635,1160,354,635,635,635,635,354',
+'635,1181,635,1062,634,701,1181,635,1062,362,635,634,634,634,1059,584',
+'634,634,634,1059,634,353,365,1161,716,643,353,759,634,634,634,634,634',
+'1058,1000,863,756,973,1058,1000,634,634,973,634,634,634,634,634,1002',
+'45,45,715,852,1002,691,28,692,321,564,757,561,643,898,570,1161,561,564',
+'758,1004,1161,634,634,634,634,634,634,634,634,634,634,634,634,634,634',
+'1159,734,634,634,634,1159,634,634,923,818,634,580,580,634,634,713,634',
+'381,634,734,634,914,634,634,381,634,634,634,634,634,1004,634,634,634',
+'852,28,691,321,692,1037,326,326,694,45,45,818,937,634,758,597,634,634',
+'634,634,923,634,382,634,28,108,321,815,634,382,937,634,108,108,108,352',
+'352,108,108,108,852,108,691,852,692,691,914,692,381,108,663,108,108',
+'108,663,852,712,691,758,692,85,108,108,711,108,108,108,108,108,1037',
+'1037,580,85,694,694,398,580,821,702,597,597,821,85,383,326,326,1037',
+'382,632,597,383,108,108,108,108,108,108,108,108,108,108,108,108,108',
+'108,700,1060,108,108,108,426,108,108,1060,694,108,232,694,108,108,513',
+'108,1060,108,595,108,697,108,108,694,108,108,108,108,108,384,108,105',
+'108,398,398,398,384,233,105,105,105,632,383,105,105,105,108,105,5,108',
+'108,108,108,5,108,105,108,105,105,105,235,108,371,426,108,1060,371,105',
+'105,232,105,105,105,105,105,696,644,686,513,513,513,396,595,595,1030',
+'345,301,395,345,686,394,301,595,644,384,513,233,105,105,105,105,105',
+'105,105,105,105,105,105,105,105,105,693,330,105,105,105,401,105,105',
+'235,1008,105,1008,397,105,105,814,105,385,105,690,105,791,105,105,385',
+'105,105,105,105,105,633,105,40,105,396,396,396,1030,1030,1030,395,395',
+'395,394,394,394,826,105,330,386,105,105,105,105,1030,105,386,105,41',
+'448,330,344,105,688,344,105,448,448,448,401,401,401,448,448,814,448',
+'397,397,397,40,791,363,385,448,448,387,388,348,363,633,348,40,387,388',
+'680,448,448,363,448,448,448,448,448,707,678,41,707,770,373,770,770,770',
+'770,770,386,373,390,41,1112,16,16,1112,770,390,373,448,448,448,448,448',
+'448,448,448,448,448,448,448,448,448,761,441,448,448,448,770,448,363',
+'646,646,448,387,388,448,770,770,770,770,448,902,448,770,448,448,902',
+'448,448,448,448,448,447,448,448,448,373,1003,1003,447,447,447,48,48',
+'390,447,447,676,447,448,441,838,448,448,761,448,447,448,26,742,742,761',
+'441,770,448,26,761,448,447,447,761,447,447,447,447,447,841,442,48,48',
+'1015,1054,1015,1015,1015,1015,1015,642,1054,761,868,868,642,1132,1132',
+'1015,642,1054,447,447,447,447,447,447,447,447,447,447,447,447,447,447',
+'370,19,447,447,447,1015,447,761,842,675,447,26,442,447,1015,1015,1015',
+'1015,447,674,447,1015,447,447,442,447,447,447,447,447,793,447,1028,447',
+'1054,134,851,793,793,793,134,134,1028,793,793,668,793,447,19,855,447',
+'447,370,447,793,447,666,471,910,370,19,1015,447,910,370,447,793,793',
+'370,793,793,793,793,793,858,425,358,859,665,530,1028,358,425,864,662',
+'639,530,370,637,471,636,425,1028,471,471,530,793,793,793,793,793,793',
+'793,793,793,793,793,793,793,793,628,824,793,793,793,695,793,370,880',
+'881,793,824,695,793,623,883,889,695,793,617,793,695,793,793,618,793',
+'793,793,793,793,425,793,794,793,530,892,609,602,600,794,794,794,865',
+'592,899,794,794,793,794,824,793,793,865,793,901,793,794,794,582,470',
+'565,824,793,905,906,793,617,907,794,794,695,794,794,794,794,794,908',
+'18,617,563,912,573,913,562,18,865,865,558,573,546,865,470,545,18,924',
+'470,470,573,794,794,794,794,794,794,794,794,794,794,794,794,794,794',
+'925,544,794,794,794,928,794,543,231,930,794,534,531,794,938,231,939',
+'941,794,942,794,526,794,794,231,794,794,794,794,794,18,794,794,794,573',
+'1052,762,1052,1052,1052,524,1052,1116,762,521,953,954,794,762,1116,794',
+'794,762,794,955,794,51,957,1116,958,959,961,794,51,962,794,903,903,903',
+'903,903,903,51,231,963,903,903,964,520,504,903,369,903,903,903,903,903',
+'903,903,341,341,341,341,341,903,903,903,903,903,903,903,762,995,903',
+'995,995,995,1116,995,903,903,903,903,903,903,903,903,903,903,903,903',
+'51,903,903,903,313,903,903,903,903,903,314,313,369,500,315,499,979,314',
+'995,369,313,315,980,982,369,985,314,995,369,903,315,986,903,988,989',
+'903,903,317,991,903,994,903,498,475,317,903,1154,369,1154,1154,1154',
+'474,1154,317,903,473,472,1012,459,903,903,903,903,1018,903,903,903,903',
+'1022,313,1023,449,903,903,1026,314,440,369,439,315,903,1029,903,903',
+'903,437,427,903,903,557,557,557,557,557,557,423,420,418,557,557,417',
+'1051,317,557,415,557,557,557,557,557,557,557,23,409,375,1055,366,557',
+'557,557,557,557,557,557,588,588,557,364,588,588,588,360,557,557,557',
+'557,557,557,557,557,557,557,557,557,359,557,557,557,1061,557,557,557',
+'557,557,23,23,23,23,23,23,23,23,23,23,23,331,23,23,349,347,23,23,331',
+'557,346,1,557,1040,342,557,557,331,336,557,1079,557,23,1040,23,557,23',
+'23,1080,23,23,23,23,23,557,23,334,327,325,557,557,557,557,320,557,557',
+'557,557,1090,319,1093,316,557,557,310,23,1040,1040,1096,1102,557,1040',
+'557,557,557,1105,331,557,557,307,307,307,307,307,307,1106,1107,1108',
+'307,307,1110,1192,309,307,308,307,307,307,307,307,307,307,304,304,304',
+'304,304,307,307,307,307,307,307,307,1119,306,307,305,293,290,1124,430',
+'307,307,307,307,307,307,307,307,307,307,307,307,1125,307,307,307,1126',
+'307,307,307,307,307,430,430,430,430,430,430,430,430,430,430,430,1127',
+'430,430,1128,1129,430,430,289,307,275,241,307,1138,237,307,307,1140',
+'1141,307,236,307,430,234,430,307,430,430,213,430,430,430,430,430,307',
+'430,50,42,39,307,307,307,307,1155,307,307,307,307,1156,1158,24,17,307',
+'307,15,430,14,430,1170,12,307,1174,307,307,307,1176,1177,307,307,765',
+'765,765,765,765,765,1178,1179,9,765,765,1182,3,764,765,768,765,765,765',
+'765,765,765,765,8,8,8,8,8,765,765,765,765,765,765,765,788,755,765,790',
+'751,750,744,436,765,765,765,765,765,765,765,765,765,765,765,765,741',
+'765,765,765,,765,765,765,765,765,436,436,436,436,436,436,436,436,436',
+'436,436,,436,436,,,436,436,,765,,,765,,,765,765,,,765,,765,436,,436',
+'765,436,436,,436,436,436,436,436,765,436,,,,765,765,765,765,,765,765',
+'765,765,,,,,765,765,,436,,,,,765,,765,765,765,,,765,765,950,950,950',
+'950,950,950,,,,950,950,,,,950,,950,950,950,950,950,950,950,518,518,518',
+'518,518,950,950,950,950,950,950,950,,882,950,882,882,882,,882,950,950',
+'950,950,950,950,950,950,950,950,950,950,,950,950,950,,950,950,950,950',
+'950,489,489,489,489,489,489,489,489,489,489,489,,489,489,,,489,489,',
+'950,,,950,,,950,950,,,950,,950,489,,489,950,489,489,,489,489,489,489',
+'489,950,489,,,,950,950,950,950,,950,950,950,950,,,,,950,950,489,489',
+',,,,950,,950,950,950,,,950,950,970,970,970,970,970,970,,,,970,970,,',
+',970,,970,970,970,970,970,970,970,,,,,,970,970,970,970,970,970,970,',
+',970,,,,,,970,970,970,970,970,970,970,970,970,970,970,970,,970,970,970',
+',970,970,970,970,970,949,949,949,949,949,949,949,949,949,949,949,,949',
+'949,,,949,949,,970,,,970,,,970,970,,,970,,970,949,,949,970,949,949,',
+'949,949,949,949,949,970,949,,,,970,970,970,970,,970,970,970,970,,,,',
+'970,970,,949,,,,,970,,970,970,970,,,970,970,1133,1133,1133,1133,1133',
+'1133,,,,1133,1133,,,,1133,,1133,1133,1133,1133,1133,1133,1133,,,,,,1133',
+'1133,1133,1133,1133,1133,1133,,,1133,,,,,,1133,1133,1133,1133,1133,1133',
+'1133,1133,1133,1133,1133,1133,,1133,1133,1133,,1133,1133,1133,1133,1133',
+'541,541,541,541,541,541,541,541,541,541,541,,541,541,,,541,541,,1133',
+',,1133,,,1133,1133,,,1133,,1133,541,,541,1133,541,541,,541,541,541,541',
+'541,1133,541,,,,1133,1133,1133,1133,,1133,1133,1133,1133,,,,,1133,1133',
+',541,,,,,1133,,1133,1133,1133,,,1133,1133,240,240,240,240,240,240,,',
+',240,240,,,,240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240',
+'240,240,,,240,,,,,,240,240,240,240,240,240,240,240,240,240,240,240,',
+'240,240,240,,240,240,240,240,240,796,796,796,796,796,796,796,796,796',
+'796,796,,796,796,,,796,796,,240,,,240,,,240,240,,,240,,240,796,,796',
+'240,796,796,,796,796,796,796,796,240,796,,,,240,240,240,240,,240,240',
+'240,240,,,,,240,240,,796,,,,,240,,240,240,240,,,240,240,215,215,215',
+'215,215,215,,,,215,215,,,,215,,215,215,215,215,215,215,215,,,,,,215',
+'215,215,215,215,215,215,,,215,,,,,,215,215,215,215,215,215,215,215,215',
+'215,215,215,,215,215,215,,215,215,215,215,215,287,287,287,287,287,287',
+'287,287,287,287,287,,287,287,,,287,287,,215,,,215,,,215,215,,,215,,215',
+'287,,287,215,287,287,,287,287,287,287,287,215,287,,,,215,215,215,215',
+',215,215,215,215,,,,,215,215,,287,,,,,215,,215,215,215,,,215,215,132',
+'132,132,132,132,132,,,,132,132,,,,132,,132,132,132,132,132,132,132,',
+',,,,132,132,132,132,132,132,132,,727,132,727,727,727,,727,132,132,132',
+'132,132,132,132,132,132,132,132,132,,132,132,132,,132,132,132,132,132',
+'878,,878,878,878,,878,,727,,996,,996,996,996,,996,727,,132,,,132,,,132',
+'132,,485,132,,132,,,,132,,878,,1131,,1131,1131,1131,132,1131,878,996',
+',132,132,132,132,,132,132,132,132,,,485,,132,132,485,485,,485,485,,132',
+',132,132,132,,1131,132,132,1064,1064,1064,1064,1064,1064,,,,1064,1064',
+',,,1064,,1064,1064,1064,1064,1064,1064,1064,,,,,,1064,1064,1064,1064',
+'1064,1064,1064,,,1064,,,,,,1064,1064,1064,1064,1064,1064,1064,1064,1064',
+'1064,1064,1064,,1064,1064,1064,,1064,1064,1064,1064,1064,333,333,333',
+'333,333,333,333,333,333,333,333,,333,333,,,333,333,,1064,,,1064,,,1064',
+'1064,,486,1064,,1064,333,,333,1064,333,333,,333,333,333,333,333,1064',
+'333,,,,1064,1064,1064,1064,,1064,1064,1064,1064,,,486,,1064,1064,486',
+'486,,486,486,,1064,,1064,1064,1064,,,1064,1064,1065,1065,1065,1065,1065',
+'1065,,,,1065,1065,,,,1065,,1065,1065,1065,1065,1065,1065,1065,,,,,,1065',
+'1065,1065,1065,1065,1065,1065,,,1065,,,,,,1065,1065,1065,1065,1065,1065',
+'1065,1065,1065,1065,1065,1065,,1065,1065,1065,,1065,1065,1065,1065,1065',
+'468,468,468,468,468,468,468,468,468,468,468,,468,468,,,468,468,,1065',
+',,1065,,,1065,1065,,,1065,,1065,468,,468,1065,468,468,,468,468,468,468',
+'468,1065,468,,,,1065,1065,1065,1065,,1065,1065,1065,1065,,,,,1065,1065',
+',1130,,1130,1130,1130,1065,1130,1065,1065,1065,,,1065,1065,2,2,2,2,2',
+'2,,,,2,2,,,,2,,2,2,2,2,2,2,2,1130,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2',
+'2,2,2,2,2,2,2,2,,2,2,2,,2,2,2,2,2,488,488,488,488,488,488,488,488,,488',
+'488,,,,,,488,488,,2,,,2,,,2,2,,,2,,2,488,,488,2,488,488,,488,488,488',
+'488,488,2,488,,,,2,2,2,2,,2,2,2,2,,,,,2,2,,,,,,,2,,2,2,2,,,2,2,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,469,469,469,469,469',
+'469,469,469,469,469,469,,469,469,,,469,469,,846,,,846,,,846,846,,,846',
+',846,469,,469,846,469,469,,469,469,469,469,469,846,469,,,,846,846,846',
+'846,,846,846,846,846,,,,,846,846,,,,,,,846,,846,846,846,,,846,846,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,487,487,487,487',
+'487,487,487,,,487,487,,,,,,487,487,,779,,,779,,,779,779,,,779,,779,487',
+',487,779,487,487,,487,487,487,487,487,779,487,,,,779,779,779,779,,779',
+'779,779,779,,,,,779,779,,,,,,,779,,779,779,779,,,779,779,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,490,,,,,,,,,,,,,,,,490',
+'490,,769,,,769,,,769,769,,,769,,769,490,,490,769,490,490,,490,490,,',
+'490,769,490,,,,769,769,769,769,,769,769,769,769,,,,,769,769,,,,,,,769',
+',769,769,769,,,769,769,760,760,760,760,760,760,,,,760,760,,,,760,,760',
+'760,760,760,760,760,760,,,,,,760,760,760,760,760,760,760,,,760,,,,,',
+'760,760,760,760,760,760,760,760,760,760,760,760,,760,760,760,,760,760',
+'760,760,760,540,,,,,,,,,,,,,,,,540,540,,760,,,760,,,760,760,,,760,,760',
+'540,,540,760,540,540,,540,540,,,540,760,540,,,,760,760,760,760,,760',
+'760,760,760,,,,,760,760,,,,,,,760,,760,760,760,,,760,760,857,857,857',
+'857,857,857,,,,857,857,,,,857,,857,857,857,857,857,857,857,,,,,,857',
+'857,857,857,857,857,857,,,857,,,,,,857,857,857,857,857,857,857,857,857',
+'857,857,857,,857,857,857,,857,857,857,857,857,332,332,332,332,332,332',
+'332,332,332,332,332,,332,332,,,332,332,,857,,,857,,,857,857,,,857,,857',
+'332,,332,857,332,332,,332,332,332,332,332,857,332,,,,857,857,857,857',
+',857,857,857,857,,,,,857,857,,,,,,,857,,857,857,857,,,857,857,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,484,484,484,484,484',
+'484,484,,,484,484,,,,,,484,484,,340,,,340,,,340,340,,,340,,340,484,',
+'484,340,484,484,,484,484,484,484,484,340,484,,,,340,340,340,340,,340',
+'340,340,340,,,,,340,340,,,,,,,340,,340,340,340,,,340,340,35,35,35,35',
+'35,35,,,,35,35,,,,35,,35,35,35,35,35,35,35,,,,,,35,35,35,35,35,35,35',
+',,35,,,,,,35,35,35,35,35,35,35,35,35,35,35,35,,35,35,35,,35,35,35,35',
+'35,483,483,483,483,483,483,483,,,483,483,,,,,,483,483,,35,,,35,,,35',
+'35,,,35,,35,483,,483,35,483,483,,483,483,483,483,483,35,483,,,,35,35',
+'35,35,,35,35,35,35,,,,,35,35,,,,,,,35,,35,35,35,,,35,35,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,1057,1057',
+'1057,1057,1057,1057,1057,1057,1057,1057,,1057,1057,1057,,1057,1057,1057',
+'1057,1057,482,482,482,482,482,482,482,,,482,482,,,,,,482,482,,1057,',
+',1057,,,1057,1057,,,1057,,1057,482,,482,1057,482,482,,482,482,482,482',
+'482,1057,482,,,,1057,1057,1057,1057,,1057,1057,1057,1057,,,,,1057,1057',
+',,,,,,1057,,1057,1057,1057,,,1057,1057,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,481,481,481,481,481,481,481,,,481,481,',
+',,,,481,481,,357,,,357,,,357,357,,,357,,357,481,,481,357,481,481,,481',
+'481,481,481,481,357,481,,,,357,357,357,357,,357,357,357,357,,,,,357',
+'357,,,,,,,357,,357,357,357,,,357,357,356,356,356,356,356,356,,,,356',
+'356,,,,356,,356,356,356,356,356,356,356,,,,,,356,356,356,356,356,356',
+'356,,,356,,,,,,356,356,356,356,356,356,356,356,356,356,356,356,,356',
+'356,356,,356,356,356,356,356,480,480,480,480,480,480,480,,,480,480,',
+',,,,480,480,,356,,,356,,,356,356,,,356,,356,480,,480,356,480,480,,480',
+'480,480,480,480,356,480,,,,356,356,356,356,,356,356,356,356,,,,,356',
+'356,,,,,,,356,,356,356,356,,,356,356,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,479',
+'479,479,479,479,479,479,,,479,479,,,,,,479,479,,1081,,,1081,,,1081,1081',
+',,1081,,1081,479,,479,1081,479,479,,479,479,479,479,479,1081,479,,,',
+'1081,1081,1081,1081,,1081,1081,1081,1081,,,,,1081,1081,,,,,,,1081,,1081',
+'1081,1081,,,1081,1081,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,476,,,,,,,,,,,,,,,,476,476,,897,,,897,,,897,897,,,897,,897',
+'476,,476,897,476,476,,476,476,,,,897,,,,,897,897,897,897,,897,897,897',
+'897,,,,,897,897,,,,,,,897,,897,897,897,,,897,897,1091,1091,1091,1091',
+'1091,1091,,,,1091,1091,,,,1091,,1091,1091,1091,1091,1091,1091,1091,',
+',,,,1091,1091,1091,1091,1091,1091,1091,,,1091,,,,,,1091,1091,1091,1091',
+'1091,1091,1091,1091,1091,1091,1091,1091,,1091,1091,1091,,1091,1091,1091',
+'1091,1091,477,,,,,,,,,,,,,,,,477,477,,1091,,,1091,,,1091,1091,,,1091',
+',1091,477,,477,1091,477,477,,477,477,,,,1091,,,,,1091,1091,1091,1091',
+',1091,1091,1091,1091,,,,,1091,1091,,,,,,,1091,,1091,1091,1091,,,1091',
+'1091,312,312,312,312,312,312,,,,312,312,,,,312,,312,312,312,312,312',
+'312,312,,,,,,312,312,312,312,312,312,312,,,312,,,,,,312,312,312,312',
+'312,312,312,312,312,312,312,312,,312,312,312,,312,312,312,312,312,478',
+',,,,,,,,,,,,,,,478,478,,312,,,312,,,312,312,,,312,,312,478,,,312,478',
+'478,,478,478,,,,312,,,,,312,312,312,312,,312,312,312,312,,,,,312,312',
+',,,,,,312,,312,312,312,,,312,312,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,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,,,,,560,560,560,560,,560,560,560,560,',
+',,,560,560,,,,766,766,766,560,766,560,560,560,766,766,560,560,,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',
+'766,766,,,766,766,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,,,,22,22,22,7,22,7,7,7,22,22,7,7,,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,29',
+',22,22,,,,29,29,29,,,29,29,29,,29,,,,,,,,29,29,29,29,,,,,,,,,29,29,',
+'29,29,29,29,29,,,,,,,,,,,,,,,,,,,,,,,29,29,29,29,29,29,29,29,29,29,29',
+'29,29,29,,,29,29,29,,,29,,29,29,,,29,29,,29,,29,,29,,29,29,,29,29,29',
+'29,29,30,29,29,29,,,,30,30,30,,,30,30,30,,30,29,,,29,29,,29,30,29,30',
+'30,,,,,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,31',
+'31,31,,31,,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,,,,32,32,32,31,32,31,31,31',
+'32,32,31,31,,32,,32,32,32,32,32,32,32,,,,,,32,32,32,32,32,32,32,,,32',
+',,,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,,32,32,32,32,32,,,,,',
+',,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32,,,32,,,,,,32,,,,,32,32',
+'32,32,,32,32,32,32,,,,,32,32,,,,33,33,33,32,33,32,32,32,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,33,,,,,,,,,,,,,,,,',
+',,,33,,,33,,,33,33,,,33,,33,,33,,33,,,33,,,,,,33,,,,,33,33,33,33,,33',
+'33,33,33,,,,,33,33,,,,43,43,43,33,43,33,33,33,43,43,33,33,,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,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,,,,46,46,46,44,46,44',
+'44,44,46,46,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,46,46,,46,46,46,46,46,,',
+',,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,,,46,,,,,46,46,46',
+'46,,46,46,46,46,,,,,46,46,,,,47,47,47,46,47,46,46,46,47,47,46,46,,47',
+',47,47,47,47,47,47,47,,,,,,47,47,47,47,47,47,47,,,47,,,,,,,47,,,47,47',
+'47,47,47,47,47,47,,47,47,47,,47,47,47,47,47,,,,,,,,,,,,,,,,,,,,47,,',
+'47,,,47,47,,,47,,,,,,47,,,,,,,,,47,,,,,47,47,47,47,,47,47,47,47,,,,',
+'47,47,,,,49,49,49,47,49,47,47,47,49,49,47,47,,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,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',
+'49,49,61,,49,49,,,,61,61,61,,,61,61,61,,61,,,,,,,,61,,61,61,61,,,,828',
+'828,828,828,61,61,,61,61,61,61,61,,,,,828,828,828,,,,,,,,,,,828,828',
+',,828,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,,828,828,828,828',
+',828,828,828,828,,,,61,828,828,61,61,61,61,,61,828,61,828,828,828,,61',
+'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,63,63,,63,63,63,63,,,,,63,63,,,,64,64,64,63,64,63,63,63,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,64,,,,65,65,65,64,65,64,64,64,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,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,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,,,,69,69,69',
+'68,69,68,68,68,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,69,,,,72,72,72,69,72,69,69,69,72,72',
+'69,69,,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,121,121,121,121,121,',
+',,121,121,,,,121,,121,121,121,121,121,121,121,,,,,,121,121,121,121,121',
+'121,121,,,121,,,,,,121,121,121,121,121,121,121,121,121,121,121,121,',
+'121,121,121,,121,121,121,121,121,,,,,,,,,,,,,,,,,,,,121,,,121,,,121',
+'121,,,121,,121,,,,121,,,,,,,,,121,,,,,121,121,121,121,,121,121,121,121',
+',,,,121,121,,,,,,121,121,,121,121,121,,,121,121,126,126,126,,126,,,',
+'126,126,,,,126,,126,126,126,126,126,126,126,,,,,,126,126,126,126,126',
+'126,126,,,126,,,,,,,126,,,126,126,126,126,126,126,126,126,,126,126,126',
+',126,126,126,126,126,,,,,,,,,,,,,,,,,,,,126,,,126,,,126,126,,,126,,',
+',,,126,,,,,,,,,126,,,,,126,126,126,126,,126,126,126,126,,,,,126,126',
+',,,127,127,127,126,127,126,126,126,127,127,126,126,,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,,127,127,127,127,,,,,127,127,,,,128,128,128,127,128,127',
+'127,127,128,128,127,127,,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,,,,129,129,129,128,129,128,128,128,129,129,128,128,,129',
+',129,129,129,129,129,129,129,,,,,,129,129,129,129,129,129,129,,,129',
+',,,,,,129,,,129,129,129,129,129,129,129,129,,129,129,129,,129,129,129',
+'129,129,,,,,,,,,,,,,,,,,,,,129,,,129,,,129,129,,,129,,,,,,129,,,,,,',
+',,129,,,,,129,129,129,129,,129,129,129,129,,,,,129,129,,,,,,,129,,129',
+'129,129,,,129,129,130,130,130,130,130,,,,130,130,,,,130,,130,130,130',
+'130,130,130,130,,,,,,130,130,130,130,130,130,130,,,130,,,,,,130,130',
+',130,130,130,130,130,130,130,130,130,,130,130,130,,130,130,130,130,130',
+',,,,,,,,,,,,,,,,,,,130,,,130,,,130,130,,,130,,130,,,,130,,,,,,,,,130',
+',,,,130,130,130,130,,130,130,130,130,,,,,130,130,,,,216,216,216,130',
+'216,130,130,130,216,216,130,130,,216,,216,216,216,216,216,216,216,,',
+',,,216,216,216,216,216,216,216,,,216,,,,,,,216,,,216,216,216,216,216',
+'216,216,216,,216,216,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,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,,',
+',218,218,218,217,218,217,217,217,218,218,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,,,,219,219,219,218,219,218,218',
+'218,219,219,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,,,,220,220,220,219,220,219,219,219,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,220',
+'221,220,220,220,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,221,221,,,,,221,221,,,,226,226,226,221,226,221,221',
+'221,226,226,221,221,,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,226,227,226,226,226,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,227',
+'228,227,227,227,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,228,,,239,239,239,228,239,228,228,228,239,239',
+'228,228,,239,,239,239,239,239,239,239,239,,,,,,239,239,239,239,239,239',
+'239,,,239,,,,,,,239,,,239,239,239,239,239,239,239,239,,239,239,239,',
+'239,239,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239,,,239,239,,,239,,,',
+',,239,,,,,,,,,239,,,,,239,239,239,239,,239,239,239,239,,,,,239,239,',
+',,243,243,243,239,243,239,239,239,243,243,239,239,,243,,243,243,243',
+'243,243,243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,,,243,,,243',
+'243,243,243,243,243,243,243,,243,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',
+',,,250,250,250,249,250,249,249,249,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,,,,251,251,251,250,251,250',
+'250,250,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,,,,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,,,,260,260,260',
+'259,260,259,259,259,260,260,259,259,,260,,260,260,260,260,260,260,260',
+',,,,,260,260,260,260,260,260,260,,,260,,,,,,,260,,,260,260,260,260,260',
+'260,260,260,,260,260,260,,260,260,260,260,260,,,,,,,,,,,,,,,,,,,,260',
+',,260,,,260,260,,,260,,,,,,260,,,,,,,,,260,,,,,260,260,260,260,,260',
+'260,260,260,,,,,260,260,,,,261,261,261,260,261,260,260,260,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,,,,262',
+'262,262,261,262,261,261,261,262,262,261,261,,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,,,,263,263,263,262,263,262,262,262',
+'263,263,262,262,,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,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,,,,269,269,269,264,269,264',
+'264,264,269,269,264,264,,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,269,276,269,269,269,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,,,,,276,276',
+',,,277,277,277,276,277,276,276,276,277,277,276,276,,277,,277,277,277',
+'277,277,277,277,,,,,,277,277,277,277,277,277,277,,,277,,,,,,,277,,,277',
+'277,277,277,277,277,277,277,277,277,277,277,,277,277,277,277,277,,,',
+',,,,,,,,,,,,,,,,277,,,277,,,277,277,,,277,,277,,277,,277,,,277,,,,,',
+'277,,,,,277,277,277,277,,277,277,277,277,,,,,277,277,,,,285,285,285',
+'277,285,277,277,277,285,285,277,277,,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,,,292,292,292,285,292,285,285',
+'285,292,292,285,285,,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,,,,294,294,294,292,294,292,292,292,294,294,292,292,,294,,294',
+'294,294,294,294,294,294,,,,,,294,294,294,294,294,294,294,,,294,,,,,',
+',294,,,294,294,294,294,294,294,294,294,,294,294,294,,294,294,294,294',
+'294,,,,,,,,,,,,,,,,,,,,294,,,294,,,294,294,,,294,,,,,,294,,,,,,,,,294',
+',,,,294,294,294,294,,294,294,294,294,,,,,294,294,,,,297,297,297,294',
+'297,294,294,294,297,297,294,294,,297,,297,297,297,297,297,297,297,,',
+',,,297,297,297,297,297,297,297,,,297,,,,,,,297,,,297,297,297,297,297',
+'297,297,297,,297,297,297,,297,297,297,297,297,,,,,,,,,,,,,,,,,,,,297',
+',,297,,,297,297,,,297,,,,,,297,,,,,,,,,297,,,,,297,297,297,297,,297',
+'297,297,297,,,,,297,297,,,,298,298,298,297,298,297,297,297,298,298,297',
+'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,,,,,298,298,,,,,,,298',
+',298,298,298,,,298,298,303,303,303,303,303,,,,303,303,,,,303,,303,303',
+'303,303,303,303,303,,,,,,303,303,303,303,303,303,303,,,303,,,,,,303',
+'303,,303,303,303,303,303,303,303,303,303,,303,303,303,,303,303,303,303',
+'303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303,,,303,,303,,,,303,,,,,,,',
+',303,,,,,303,303,303,303,,303,303,303,303,,,,,303,303,,,,1120,1120,1120',
+'303,1120,303,303,303,1120,1120,303,303,,1120,,1120,1120,1120,1120,1120',
+'1120,1120,,,,,,1120,1120,1120,1120,1120,1120,1120,,,1120,,,,,,,1120',
+',,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,,1120',
+'1120,1120,1120,1120,,,,,,,,,,,,,,,,,,,,1120,,,1120,,,1120,1120,,,1120',
+',1120,,1120,,1120,,,1120,,,,,,1120,,,,,1120,1120,1120,1120,,1120,1120',
+'1120,1120,,,,,1120,1120,,,,1084,1084,1084,1120,1084,1120,1120,1120,1084',
+'1084,1120,1120,,1084,,1084,1084,1084,1084,1084,1084,1084,,,,,,1084,1084',
+'1084,1084,1084,1084,1084,,,1084,,,,,,,1084,,,1084,1084,1084,1084,1084',
+'1084,1084,1084,,1084,1084,1084,,1084,1084,1084,1084,1084,,,,,,,,,,,',
+',,,,,,,,1084,,,1084,,,1084,1084,,,1084,,,,,,1084,,,,,,,,,1084,,,,,1084',
+'1084,1084,1084,,1084,1084,1084,1084,,,,,1084,1084,,,,1083,1083,1083',
+'1084,1083,1084,1084,1084,1083,1083,1084,1084,,1083,,1083,1083,1083,1083',
+'1083,1083,1083,,,,,,1083,1083,1083,1083,1083,1083,1083,,,1083,,,,,,',
+'1083,,,1083,1083,1083,1083,1083,1083,1083,1083,,1083,1083,1083,,1083',
+'1083,1083,1083,1083,,,,,,,,,,,,,,,,,,,,1083,,,1083,,,1083,1083,,,1083',
+',,,,,1083,,,,,,,,,1083,,,,,1083,1083,1083,1083,,1083,1083,1083,1083',
+',,,,1083,1083,,,,337,337,337,1083,337,1083,1083,1083,337,337,1083,1083',
+',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,,,,339,339',
+'339,337,339,337,337,337,339,339,337,337,,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,,,,355,355,355,339,355,339,339,339,355',
+'355,339,339,,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',
+',,,376,376,376,355,376,355,355,355,376,376,355,355,,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,,,,392,392,392,376,392,376',
+'376,376,392,392,376,376,,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,,,,419,419,419,392,419,392,392,392,419,419,392,392,,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,,,,,,,419,,419',
+'419,419,443,,419,419,,,,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,443,1165,,1165,1165,1165,1165,1165,,,,,,,443,,1165,443,443',
+'452,443,,443,,,,452,452,452,443,,452,452,452,,452,,,1165,,,,,452,452',
+'452,452,452,,1165,1165,,,,1165,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',
+'452,,,,,452,453,453,453,,,453,453,453,,453,,,,,,,,453,453,453,453,453',
+',,,,,,,453,453,,453,453,453,453,453,,,,,,,,,,,,,,,,,,,,,,,453,453,453',
+'453,453,453,453,453,453,453,453,453,453,453,,,453,453,453,,,453,,,453',
+',,453,453,,453,,453,,453,,453,453,,453,453,453,453,453,,453,453,453',
+',,,,,,,,,,,,,453,,,453,453,453,453,,453,,453,,462,462,462,453,462,,',
+',462,462,,,,462,,462,462,462,462,462,462,462,,,,,,462,462,462,462,462',
+'462,462,,,462,,,,,,,462,,,462,462,462,462,462,462,462,462,462,462,462',
+'462,,462,462,462,462,462,,,,,,,,,,,,,,,,,,,,462,,,462,,,462,462,,,462',
+',462,,462,,462,,,462,,,,,,462,,,,,462,462,462,462,,462,462,462,462,',
+',,,462,462,,,,464,464,464,462,464,462,462,462,464,464,462,462,,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',
+'464,465,464,464,464,465,465,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,,,,466,466,466,465,466,465,465,465,466,466,465',
+'465,,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,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,466,466,492,,466,466,,,,492,492,492,,,492,492,492,845,492,845,845',
+'845,845,845,,,492,492,492,,,,845,,,,,,492,492,,492,492,492,492,492,',
+',,,,,,1144,845,1144,1144,1144,1144,1144,,,,845,845,845,845,,1144,,845',
+',709,,709,709,709,709,709,492,,,,,,,492,709,,,1144,492,492,,,,845,,',
+'1144,1144,1144,1144,,,,1144,,,709,,,,,492,492,,,709,709,709,709,,,,709',
+',,,492,,,492,,497,497,497,492,497,,,,497,497,492,,,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,,,,507,507,507,497,507,497',
+'497,497,507,507,497,497,,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,,,,509,509,509,507,509,507,507,507,509,509,507',
+'507,,509,,509,509,509,509,509,509,509,,,,,,509,509,509,509,509,509,509',
+',,509,,,,,,,509,,,509,509,509,509,509,509,509,509,509,509,509,509,,509',
+'509,509,509,509,,,,,,,,,,,,,,,,,,,,509,,,509,,,509,509,,,509,,,,509',
+',509,,,509,,,,,,509,,,,,509,509,509,509,,509,509,509,509,,,,,509,509',
+',,,511,511,511,509,511,509,509,509,511,511,509,509,,511,,511,511,511',
+'511,511,511,511,,,,,,511,511,511,511,511,511,511,,,511,,,,,,,511,,,511',
+'511,511,511,511,511,511,511,,511,511,511,,511,511,511,511,511,,,,,,',
+',,,,,,,,,,,,,511,,,511,,,511,511,,,511,,,,,,511,,,,,,,,,511,,,,,511',
+'511,511,511,,511,511,511,511,,,,,511,511,,,,,,,511,,511,511,511,,,511',
+'511,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,517',
+'517,517,,517,517,517,517,,,,,517,517,,,,,,517,517,,517,517,517,,,517',
+'517,527,527,527,,527,,,,527,527,,,,527,,527,527,527,527,527,527,527',
+',,,,,527,527,527,527,527,527,527,,,527,,,,,,,527,,,527,527,527,527,527',
+'527,527,527,527,527,527,527,,527,527,527,527,527,,,,,,,,,,,,,,,,,,,',
+'527,,,527,,,527,527,,,527,,527,,527,,527,,,527,,,,,,527,,,,,527,527',
+'527,527,,527,527,527,527,,,,,527,527,,,,536,536,536,527,536,527,527',
+'527,536,536,527,527,,536,,536,536,536,536,536,536,536,,,,,,536,536,536',
+'536,536,536,536,,,536,,,,,,,536,,,536,536,536,536,536,536,536,536,,536',
+'536,536,,536,536,536,536,536,,,,,,,,,,,,,,,,,,,,536,,,536,,,536,536',
+',,536,,,,,,536,,,,,,,,,536,,,,,536,536,536,536,,536,536,536,536,,,,',
+'536,536,,,,539,539,539,536,539,536,536,536,539,539,536,536,,539,,539',
+'539,539,539,539,539,539,,,,,,539,539,539,539,539,539,539,,,539,,,,,',
+',539,,,539,539,539,539,539,539,539,539,,539,539,539,,539,539,539,539',
+'539,,,,,,,,,,,,,,,,,,,,539,,,539,,,539,539,,,539,,,,,,539,,,,,,,,,539',
+',,,,539,539,539,539,,539,539,539,539,,,,,539,539,,,,542,542,542,539',
+'542,539,539,539,542,542,539,539,,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,,,,918,918,918,542,918,542,542,542,918,918,542',
+'542,,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,,918,918,918,918,,,,,918,918,,,,548',
+'548,548,918,548,918,918,918,548,548,918,918,,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,,,,,548,548,,,,551,551,551,548,551,548',
+'548,548,551,551,548,548,,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,,,,917,917,917,551,917,551,551,551,917,917,551,551,',
+'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',
+',,,566,566,566,917,566,917,917,917,566,566,917,917,,566,,566,566,566',
+'566,566,566,566,,,,,,566,566,566,566,566,566,566,,,566,,,,,,,566,,,566',
+'566,566,566,566,566,566,566,,566,566,566,,566,566,566,566,566,,,,,,',
+',,,,,,,,,,,,,566,,,566,,,566,566,,,566,,566,,,,566,,,,,,,,,566,,,,,566',
+'566,566,566,,566,566,566,566,,,,,566,566,,,,567,567,567,566,567,566',
+'566,566,567,567,566,566,,567,,567,567,567,567,567,567,567,,,,,,567,567',
+'567,567,567,567,567,,,567,,,,,,,567,,,567,567,567,567,567,567,567,567',
+'567,567,567,567,,567,567,567,567,567,,,,,,,,,,,,,,,,,,,,567,,,567,,',
+'567,567,,,567,,567,,567,,567,,,567,,,,,,567,,,,,567,567,567,567,,567',
+'567,567,567,,,,,567,567,,,,577,577,577,567,577,567,567,567,577,577,567',
+'567,,577,,577,577,577,577,577,577,577,,,,,,577,577,577,577,577,577,577',
+',,577,,,,,,,577,,,577,577,577,577,577,577,577,577,577,577,577,577,,577',
+'577,577,577,577,,,,,,,,,,,,,,,,,,,,577,,,577,,,577,577,,,577,,577,,577',
+',577,,,577,,,,,,577,,,,,577,577,577,577,,577,577,577,577,,,,,577,577',
+',,,896,896,896,577,896,577,577,577,896,896,577,577,,896,,896,896,896',
+'896,896,896,896,,,,,,896,896,896,896,896,896,896,,,896,,,,,,,896,,,896',
+'896,896,896,896,896,896,896,,896,896,896,,896,896,896,896,896,,,,,,',
+',,,,,,,,,,,,,896,,,896,,,896,896,,,896,,896,,,,896,,,,,,,,,896,,,,,896',
+'896,896,896,,896,896,896,896,,,,,896,896,,,,,,,896,,896,896,896,,,896',
+'896,608,608,608,608,608,,,,608,608,,,,608,,608,608,608,608,608,608,608',
+',,,,,608,608,608,608,608,608,608,,,608,,,,,,608,608,,608,608,608,608',
+'608,608,608,608,608,,608,608,608,,608,608,608,608,608,,,,,,,,,,,,,,',
+',,,,,608,,,608,,,608,608,,,608,,608,,,,608,,,,,,,,,608,,,,,608,608,608',
+'608,,608,608,608,608,,,,,608,608,,,,610,610,610,608,610,608,608,608',
+'610,610,608,608,,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,,,,611,611,611,610,611,610,610,610,611,611,610,610,,611,,611,611',
+'611,611,611,611,611,,,,,,611,611,611,611,611,611,611,,,611,,,,,,,611',
+',,611,611,611,611,611,611,611,611,,611,611,611,,611,611,611,611,611',
+',,,,,,,,,,,,,,,,,,,611,,,611,,,611,611,,,611,,,,,,611,,,,,,,,,611,,',
+',,611,611,611,611,,611,611,611,611,,,,,611,611,,,,612,612,612,611,612',
+'611,611,611,612,612,611,611,,612,,612,612,612,612,612,612,612,,,,,,612',
+'612,612,612,612,612,612,,,612,,,,,,,612,,,612,612,612,612,612,612,612',
+'612,612,612,612,612,,612,612,612,612,612,,,,,,,,,,,,,,,,,,,,612,,,612',
+',,612,612,,,612,,612,,612,,612,,,612,,,,,,612,,,,,612,612,612,612,,612',
+'612,612,612,,,,,612,612,,,,,,,612,,612,612,612,,,612,612,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,615,615,,615,615',
+'615,615,,,,,615,615,,,,616,616,616,615,616,615,615,615,616,616,615,615',
+',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,,,,891,891',
+'891,616,891,616,616,616,891,891,616,616,,891,,891,891,891,891,891,891',
+'891,,,,,,891,891,891,891,891,891,891,,,891,,,,,,,891,,,891,891,891,891',
+'891,891,891,891,,891,891,891,,891,891,891,891,891,,,,,,,,,,,,,,,,,,',
+',891,,,891,,,891,891,,,891,,,,,,891,,,,,,,,,891,,,,,891,891,891,891',
+',891,891,891,891,,,,,891,891,,,,619,619,619,891,619,891,891,891,619',
+'619,891,891,,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,619,620,619,619,619,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,620,,,,621',
+'621,621,620,621,620,620,620,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,,,,622,622,622,621,622,621,621,621',
+'622,622,621,621,,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',
+',,,626,626,626,622,626,622,622,622,626,626,622,622,,626,,626,626,626',
+'626,626,626,626,,,,,,626,626,626,626,626,626,626,,,626,,,,,,,626,,,626',
+'626,626,626,626,626,626,626,,626,626,626,,626,626,626,626,626,,,,,,',
+',,,,,,,,,,,,,626,,,626,,,626,626,,,626,,,,,,626,,,,,,,,,626,,,,,626',
+'626,626,626,,626,626,626,626,,,,,626,626,,,,627,627,627,626,627,626',
+'626,626,627,627,626,626,,627,,627,627,627,627,627,627,627,,,,,,627,627',
+'627,627,627,627,627,,,627,,,,,,,627,,,627,627,627,627,627,627,627,627',
+',627,627,627,,627,627,627,627,627,,,,,,,,,,,,,,,,,,,,627,,,627,,,627',
+'627,,,627,,,,,,627,,,,,,,,,627,,,,,627,627,627,627,,627,627,627,627',
+',,,,627,627,,,,876,876,876,627,876,627,627,627,876,876,627,627,,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,,,,,876,876,,,,672,672,672',
+'876,672,876,876,876,672,672,876,876,,672,,672,672,672,672,672,672,672',
+',,,,,672,672,672,672,672,672,672,,,672,,,,,,,672,,,672,672,672,672,672',
+'672,672,672,672,672,672,672,,672,672,672,672,672,,,,,,,,,,,,,,,,,,,',
+'672,,,672,,,672,672,,,672,,672,,672,,672,,,672,,,,,,672,,,,,672,672',
+'672,672,,672,672,672,672,,,,,672,672,,,,836,836,836,672,836,672,672',
+'672,836,836,672,672,,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,,,,681,681,681,836,681,836,836,836,681,681,836,836,,681,,681',
+'681,681,681,681,681,681,,,,,,681,681,681,681,681,681,681,,,681,,,,,',
+',681,,,681,681,681,681,681,681,681,681,,681,681,681,,681,681,681,681',
+'681,,,,,,,,,,,,,,,,,,,,681,,,681,,,681,681,,,681,,,,,,681,,,,,,,,,681',
+',,,,681,681,681,681,,681,681,681,681,,,,,681,681,,,,684,684,684,681',
+'684,681,681,681,684,684,681,681,,684,,684,684,684,684,684,684,684,,',
+',,,684,684,684,684,684,684,684,,,684,,,,,,,684,,,684,684,684,684,684',
+'684,684,684,,684,684,684,,684,684,684,684,684,,,,,,,,,,,,,,,,,,,,684',
+',,684,,,684,684,,,684,,,,,,684,,,,,,,,,684,,,,,684,684,684,684,,684',
+'684,684,684,,,,,684,684,,,,703,703,703,684,703,684,684,684,703,703,684',
+'684,,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,,,703,,703,,',
+',703,,,,,,,,,703,,,,,703,703,703,703,,703,703,703,703,,,,,703,703,,',
+',813,813,813,703,813,703,703,703,813,813,703,703,,813,,813,813,813,813',
+'813,813,813,,,,,,813,813,813,813,813,813,813,,,813,,,,,,,813,,,813,813',
+'813,813,813,813,813,813,,813,813,813,,813,813,813,813,813,,,,,,,,,,',
+',,,,,,,,,813,,,813,,,813,813,,,813,,,,,,813,,,,,,,,,813,,,,,813,813',
+'813,813,,813,813,813,813,,,,,813,813,,,,812,812,812,813,812,813,813',
+'813,812,812,813,813,,812,,812,812,812,812,812,812,812,,,,,,812,812,812',
+'812,812,812,812,,,812,,,,,,,812,,,812,812,812,812,812,812,812,812,,812',
+'812,812,,812,812,812,812,812,,,,,,,,,,,,,,,,,,,,812,,,812,,,812,812',
+',,812,,,,,,812,,,,,,,,,812,,,,,812,812,812,812,,812,812,812,812,,,,',
+'812,812,,,,811,811,811,812,811,812,812,812,811,811,812,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,,,,,,,,,,,,,,,,,,,,811,,,811,,,811,811,,,811,,,,,,811,,,,,,,,,811',
+',,,,811,811,811,811,,811,811,811,811,,,,,811,811,,,,810,810,810,811',
+'810,811,811,811,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,,,,730,730,730,810,730,810,810,810,730,730,810',
+'810,,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,,,,797',
+'797,797,730,797,730,730,730,797,797,730,730,,797,,797,797,797,797,797',
+'797,797,,,,,,797,797,797,797,797,797,797,,,797,,,,,,,797,,,797,797,797',
+'797,797,797,797,797,,797,797,797,,797,797,797,797,797,,,,,,,,,,,,,,',
+',,,,,797,,,797,,,797,797,,,797,,,,,,797,,,,,,,,,797,,,,,797,797,797',
+'797,,797,797,797,797,,,,,797,797,,,,789,789,789,797,789,797,797,797',
+'789,789,797,797,,789,,789,789,789,789,789,789,789,,,,,,789,789,789,789',
+'789,789,789,,,789,,,,,,,789,,,789,789,789,789,789,789,789,789,,789,789',
+'789,,789,789,789,789,789,,,,,,,,,,,,,,,,,,,,789,,,789,,,789,789,,,789',
+',,,,,789,,,,,,,,,789,,,,,789,789,789,789,,789,789,789,789,,,,,789,789',
+',,,74,74,74,789,74,789,789,789,74,74,789,789,,74,,74,74,74,74,74,74',
+'74,,,,,,74,74,74,74,74,74,74,,,74,,,,,,,74,,,74,74,74,74,74,74,74,74',
+',74,74,74,,74,74,,,74,,,,,,,,,,,,,,,,,74,,,74,,,74,,,74,74,,,74,,,,',
+',,,,,,,,,,,,,,,74,74,74,74,,74,74,74,74,,,,,74,74,,,,73,73,73,74,73',
+'74,74,74,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,73,,,,687,687,687,73,687,73,73,73,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,,,,698,698,698,687,698',
+'687,687,687,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',
+',,,533,533,533,698,533,698,698,698,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,,,,311,311,311,533,311,533,533,533,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,,,1146,,1146,1146,1146,1146',
+'1146,,,,,,,,,1146,,311,311,311,311,,311,311,311,311,,,,,311,311,,,,311',
+',1146,311,,311,311,311,75,75,75,,75,1146,1146,,75,75,1146,,,75,,75,75',
+'75,75,75,75,75,,,,,,75,75,75,75,75,75,75,,,75,,,,,,,75,,,75,75,75,75',
+'75,75,75,75,,75,75,75,,75,75,,,75,,,,,,,,,,,,,,,,,,,,75,,,75,,,75,75',
+',,75,,,,,,,,,,,,,,,,,,,,75,75,75,75,,75,75,75,75,,,,,75,75,,,,37,37',
+'37,75,37,75,75,75,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37',
+'37,37,37,,,37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,',
+'37,,,,,,,,,,,,,,,,,,,,37,,,37,,,37,37,,,37,,,874,,874,874,874,874,874',
+',,,,,,,,874,,37,37,37,37,,37,37,37,37,,,,,37,37,,,,37,,874,37,,37,37',
+'37,974,974,974,,974,874,874,,974,974,874,,,974,,974,974,974,974,974',
+'974,974,,,,,,974,974,974,974,974,974,974,,,974,,,,,,,974,,,974,974,974',
+'974,974,974,974,974,,974,974,974,,974,974,,,974,,,,,,,,,,,,,,,,,,,,974',
+',,974,,,974,974,,,974,,,,,,,,,,,,,,,,,,,,974,974,974,974,,974,974,974',
+'974,,,,,974,974,,,,965,965,965,974,965,974,974,974,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,,,,36,36,36,965,36,965,965,965',
+'36,36,,,,36,,36,36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,',
+',,,36,,,36,36,36,36,36,36,36,36,,36,36,36,,36,36,,,36,,,,,,,,,,,,,,',
+',,,,,36,,,36,,,36,36,,,36,,36,,,,,,,,,,,,,,,,,,36,36,36,36,,36,36,36',
+'36,,,,,36,36,,,,525,525,525,36,525,36,36,36,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,,,,1053,1053,1053,525,1053,525,525',
+'525,1053,1053,,,,1053,,1053,1053,1053,1053,1053,1053,1053,,,,,,1053',
+'1053,1053,1053,1053,1053,1053,,,1053,,,,,,,1053,,,1053,1053,1053,1053',
+'1053,1053,1053,1053,,1053,1053,1053,,1053,1053,,,1053,,,,,,,,,,,,,,',
+',,,,,1053,,,1053,,,1053,1053,,,1053,,,,,,,,,,,,,,,,,,,,1053,1053,1053',
+'1053,,1053,1053,1053,1053,,,,,1053,1053,,,,328,328,328,1053,328,1053',
+'1053,1053,328,328,,,,328,,328,328,328,328,328,328,328,,,,,,328,328,328',
+'328,328,328,328,,,328,,,,,,,328,,,328,328,328,328,328,328,328,328,,328',
+'328,328,,328,328,,,328,,,,,,,,,,,,,,,,,,,,328,,,328,,,328,328,,,328',
+',,,,,,,,,,,,,,,,,,,328,328,328,328,,328,328,328,328,,,,,328,328,,,,',
+',,328,,328,328,328,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,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,11,11,11,11,11,11,11,11,11,11,11,11,11,11',
+'11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11,11,,,,,',
+'11,11,11,11,11,11,11,11,11,,,11,,,,,,,,11,11,,11,11,11,11,11,11,11,',
+',11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11',
+'11,11,11,,,11,11,,,,,,,,,,,,,,11,410,410,410,410,410,410,410,410,410',
+'410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,,,,410,410',
+'410,410,410,410,410,410,410,410,,,,,,410,410,410,410,410,410,410,410',
+'410,,,410,,,,,,,,410,410,,410,410,410,410,410,410,410,,,410,410,,,,410',
+'410,410,410,,,,,,,,,,,,,,410,410,,410,410,410,410,410,410,410,410,410',
+'410,410,410,,,410,410,,,,,,,,,,,,,,410,10,10,10,10,10,10,10,10,10,10',
+'10,10,10,10,10,10,10,10,10,10,10,10,10,10,,,,10,10,10,10,10,10,10,10',
+'10,10,,,,,,10,10,10,10,10,10,10,10,10,10,,10,,,,,,,,10,10,,10,10,10',
+'10,10,10,10,,,10,10,,,,10,10,10,10,,,,,,,,,,,,,,10,10,,10,10,10,10,10',
+'10,10,10,10,10,10,10,,,10,10,467,467,467,467,,,,,,,,,,10,,,467,467,467',
+'467,,,771,467,771,771,771,771,771,467,467,,,467,,,,771,,,,,,,,,,,,,',
+',,467,,,467,,,771,467,,,467,,,,,771,771,771,771,,,,771,,,,467,,,,467',
+'467,467,467,,467,467,467,467,,,,,467,467,819,819,819,819,,,467,,467',
+'467,467,,,467,467,,819,819,819,819,,,,819,819,,,,,819,819,,,819,819',
+',,,,,,,,,,,,,,,,,,819,,,819,,,,819,,,819,,819,,,,,,,819,,,,,,,819,,',
+',819,819,819,819,,819,819,819,819,,,,,819,819,,,,,,,819,,819,819,819',
+',,819,819,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,772,,,772,772,,,,772,772,772,772,,,,,,,,,,',
+',,,772,772,,772,772,772,772,772,772,772,772,772,772,772,772,,,772,1095',
+'1095,1095,1095,,,1148,,1148,1148,1148,1148,1148,,,,1095,1095,1095,1095',
+',1148,,1095,,,,,,1095,1095,,,1095,,,,,,,,,,1148,,,,,,,,,,1095,1148,1148',
+'1095,,,1148,1095,,,1095,,,,,,,,,,,,,,,,1095,,,,1095,1095,1095,1095,',
+'1095,1095,1095,1095,,,,,1095,1095,895,895,895,895,,,1095,,1095,1095',
+'1095,,,1095,1095,,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,1027,1027,1027,1027,,,895',
+',895,895,895,,,895,895,,1027,1027,1027,1027,,,870,1027,870,870,870,870',
+'870,1027,1027,,,1027,,,,870,,,,,,,,,,,,,,,,1027,,,1027,,,870,1027,,',
+'1027,,,,,870,870,870,870,,,,870,,,,1027,,,,1027,1027,1027,1027,,1027',
+'1027,1027,1027,,,,,1027,1027,1085,1085,1085,1085,,,1027,,1027,1027,1027',
+',,1027,1027,,1085,1085,1085,1085,,,1044,1085,1044,1044,1044,1044,1044',
+'1085,1085,,,1085,,,,1044,,,,,,,,,,,,,,,,1085,,,1085,,,1044,1085,,,1085',
+',1085,,,1044,1044,1044,1044,,,,1044,,,,1085,,,,1085,1085,1085,1085,',
+'1085,1085,1085,1085,,,,,1085,1085,1094,1094,1094,1094,,,1085,,1085,1085',
+'1085,,,1085,1085,,1094,1094,1094,1094,,,1046,1094,1046,1046,1046,1046',
+'1046,1094,1094,,,1094,,,,1046,,,,,,,,,,,,,,,,1094,,,1094,,,1046,1094',
+',,1094,,,,,1046,1046,1046,1046,,,,1046,,,,1094,,,,1094,1094,1094,1094',
+',1094,1094,1094,1094,,,,,1094,1094,827,827,827,827,,,1094,,1094,1094',
+'1094,,,1094,1094,,827,827,827,827,,,1072,827,1072,1072,1072,1072,1072',
+'827,827,,,827,,,,1072,,,,,,,,,,,,,,,,827,,,827,,,1072,827,,,827,,,,',
+',,1072,1072,,,,1072,,,,827,,,,827,827,827,827,,827,827,827,827,,,,,827',
+'827,822,822,822,822,,,827,,827,827,827,,,827,827,,822,822,822,822,,',
+'1048,822,1048,1048,1048,1048,1048,822,822,,,822,,,,1048,,,,,,,,,,,,',
+',,,822,,,822,,,1048,822,,,822,,822,,,,,1048,1048,,,,1048,,,,822,,,,822',
+'822,822,822,,822,822,822,822,,,,,822,822,,,,,,,822,,822,822,822,,,822',
+'822,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,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,816',
+'816,816,816,,,1150,,1150,1150,1150,1150,1150,,,,816,816,816,816,,1150',
+',816,,,,,,816,816,,,816,,,,,,,,,,1150,,,,,,,,,,816,1150,1150,816,,,1150',
+'816,,,816,,,,,,,,,,,,,,,,816,,,,816,816,816,816,,816,816,816,816,,,',
+',816,816,820,820,820,820,,,816,,816,816,816,,,816,816,,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,1142,1142,1142,1142,,,820,,820,820,820,,,820,820,,1142,1142',
+'1142,1142,,,1070,1142,1070,1070,1070,1070,1070,1142,1142,,,1142,,,,1070',
+',,,,,,,,,,,,,,,1142,,,1142,,,1070,1142,,,1142,,,,,,,1070,1070,,,,1070',
+',,,1142,,,,1142,1142,1142,1142,,1142,1142,1142,1142,,,,,1142,1142,1139',
+'1139,1139,1139,,,1142,,1142,1142,1142,,,1142,1142,,1139,1139,1139,1139',
+',,1068,1139,1068,1068,1068,1068,1068,1139,1139,,,1139,,,,1068,,,,,,',
+',,,,,,,,,1139,,,1139,,,1068,1139,,,1139,,,,,1068,1068,1068,1068,,,,1068',
+',,,1139,,,,1139,1139,1139,1139,,1139,1139,1139,1139,,,,,1139,1139,934',
+'934,934,934,,,1139,,1139,1139,1139,,,1139,1139,,934,934,934,934,,,1186',
+'934,1186,1186,1186,1186,1186,934,934,,,934,,,,1186,,,,,,,,,,,,,,,,934',
+',,934,,,1186,934,,,934,,,,,,,1186,1186,,,,1186,,,,934,,,,934,934,934',
+'934,,934,934,934,934,,,,,934,934,926,926,926,926,,,934,,934,934,934',
+',,934,934,,926,926,926,926,,,,926,,,,,,926,926,,,926,,,,,,,,829,829',
+'829,829,,,,,,,,,926,,,926,829,829,829,926,,,926,,926,,,,,829,829,,,829',
+',,,,926,,,,926,926,926,926,,926,926,926,926,,,,,926,926,,,,,,,926,,926',
+'926,926,,,926,926,556,,556,556,556,556,556,,,,,829,829,829,829,556,829',
+'829,829,829,,,,,829,829,650,650,650,650,,,829,,829,829,829,556,556,',
+',,650,650,650,,556,556,556,556,,,,556,,650,650,,,650,649,649,649,649',
+',,,,,,,,,,,,649,649,649,,,,,,,,,,,649,649,,,649,,,,,,,,,,,,,,,,650,650',
+'650,650,,650,650,650,650,,,,,650,650,,,,,,,650,,650,650,650,,,,,,,,',
+'649,649,649,649,,649,649,649,649,,,,,649,649,1122,1122,,,1122,,649,',
+'649,649,649,,1122,1122,,1122,1122,1122,1122,1122,1122,1122,,,1122,1122',
+',,,1122,1122,1122,1122,,,,,,1122,,,,,,,,1122,1122,,1122,1122,1122,1122',
+'1122,1122,1122,1122,1122,1122,1122,1122,1121,1121,1122,,1121,,,,,,,',
+'1121,1121,,1121,1121,1121,1121,1121,1121,1121,,,1121,1121,,,,1121,1121',
+'1121,1121,,,,,,1121,,,,,,,,1121,1121,,1121,1121,1121,1121,1121,1121',
+'1121,1121,1121,1121,1121,1121,529,529,1121,,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,1117,1117',
+'529,,1117,,,,,,,,1117,1117,,1117,1117,1117,1117,1117,1117,1117,,,1117',
+'1117,,,,1117,1117,1117,1117,,,,,,1117,,,,,,,,1117,1117,,1117,1117,1117',
+'1117,1117,1117,1117,1117,1117,1117,1117,1117,461,461,1117,,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,460,460,461,,460,,,,,,,,460,460,,460,460,460,460,460,460,460,,,460',
+'460,,,,460,460,460,460,,,,,,460,,,,,,,,460,460,,460,460,460,460,460',
+'460,460,460,460,460,460,460,223,223,460,,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,222,222,223,,222',
+',,,,,,,222,222,,222,222,222,222,222,222,222,,,222,222,,,,222,222,222',
+'222,,,,,,222,,,,,,,,222,222,,222,222,222,222,222,222,222,222,222,222',
+'222,222,538,538,222,,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,568,568,538,,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,569,569,568',
+',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,537,537,569,,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,614,614,537,,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,272,272',
+'614,,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,575,575,272,,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,576,576,575,,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,613,613',
+'576,,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,528,528,613,,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,,1074,528,1074,1074,1074,1074',
+'1074,,872,,872,872,872,872,872,1074,,,,,,,,872,,,,,,,,,,,,,,1074,,,',
+',,,,872,,,1074,1074,,,,1074,872,872,872,872,,,,872' ]
+ racc_action_check = arr = ::Array.new(27375, nil)
+ idx = 0
+ clist.each do |str|
+ str.split(',', -1).each do |i|
+ arr[idx] = i.to_i unless i.empty?
+ idx += 1
+ end
+ end
+
+racc_action_pointer = [
+ nil, 1237, 2734, 1451, nil, 277, nil, 5312, 1423, 1335,
+ 24199, 23943, 1317, nil, 1281, 1279, 553, 1335, 829, 634,
+ nil, -70, 5443, 1150, 1393, nil, 588, nil, 165, 5584,
+ 5694, 5828, 5959, 6090, nil, 3742, 23283, 22882, nil, 1275,
+ 416, 442, 1352, 6221, 6352, 123, 6483, 6614, 578, 6745,
+ 1276, 920, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 6886, nil, 7027, 7158, 7289, -15, nil, 7420, 7551,
+ nil, nil, 7682, 22088, 21957, 22751, 25338, nil, nil, nil,
+ nil, nil, nil, nil, nil, 197, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 390, nil, nil, 278, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 7825, nil, nil, nil, nil, 7968, 8099, 8230, 8361,
+ 8504, nil, 2302, nil, 701, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 1265, nil, 2158, 8635, 8766, 8897, 9028,
+ 9159, 9290, 26590, 26529, nil, nil, 9421, 9552, 9683, nil,
+ nil, 872, 283, 310, 1338, 333, 1245, 1298, nil, 9814,
+ 2014, 1292, nil, 9945, 10076, 10207, 10338, 10469, 10600, 10731,
+ 10862, 10993, 11124, 11255, 11386, 11517, 11648, 11779, 11910, 12041,
+ 12172, 12303, 12434, 12565, 12696, nil, nil, nil, nil, 12827,
+ nil, nil, 26956, nil, nil, 1284, 12958, 13089, nil, nil,
+ nil, nil, nil, nil, nil, 13220, nil, 2158, nil, 1245,
+ 1202, nil, 13351, 1247, 13482, nil, nil, 13613, 13744, nil,
+ nil, 315, nil, 13887, 1279, 1221, 1186, 1294, 1180, 1218,
+ 1147, 22612, 4750, 989, 995, 999, 1222, 1022, nil, 1186,
+ 1139, 167, nil, nil, nil, 1175, 198, 1130, 23676, nil,
+ 385, 1150, 3454, 2446, 1196, nil, 1178, 14411, nil, 14542,
+ 3598, 991, 1110, nil, 401, 314, 1142, 1118, 427, 1143,
+ nil, nil, 252, 26, -1, 14673, 4174, 4030, 665, 1190,
+ 1058, -18, 11, 474, 1134, 24, 1154, nil, nil, 997,
+ 694, 370, nil, 501, nil, 1069, 14804, nil, nil, nil,
+ -32, 159, 198, 259, 311, 410, 442, 478, 479, nil,
+ 509, nil, 14935, nil, 389, 386, 380, 422, 268, -31,
+ -27, 415, nil, nil, nil, nil, nil, nil, nil, 1062,
+ 24071, nil, nil, nil, nil, 1053, nil, 1119, 1026, 15066,
+ 1025, nil, nil, 1012, nil, 717, 277, 1105, nil, nil,
+ 1294, nil, nil, nil, nil, nil, 1438, 1017, nil, 1007,
+ 1005, 524, 598, 15207, nil, nil, nil, 639, 529, 1044,
+ nil, nil, 15339, 15475, nil, nil, nil, -14, nil, 1030,
+ 26468, 26407, 15612, -82, 15743, 15874, 16005, 24283, 2590, 2878,
+ 822, 710, 1052, 1051, 1047, 1039, 4462, 4606, 4750, 4318,
+ 4174, 4030, 3886, 3742, 3598, 2330, 2474, 3022, 2734, 1582,
+ 3166, nil, 16146, nil, nil, nil, nil, 16276, 974, 944,
+ 945, nil, nil, nil, 890, nil, nil, 16407, nil, 16538,
+ nil, 16669, nil, 313, nil, nil, nil, 16812, 1567, nil,
+ 889, 852, nil, nil, 848, 23414, 832, 16955, 27200, 26285,
+ 721, 864, nil, 22481, 819, nil, 17086, 26834, 26651, 17217,
+ 3310, 1870, 17348, 941, 933, 791, 828, nil, 17610, nil,
+ nil, 17741, nil, nil, nil, nil, 26005, 1150, 904, nil,
+ 5038, 65, 903, 899, 177, 880, 18003, 18134, 26712, 26773,
+ 65, nil, nil, 833, nil, 27017, 27078, 18265, nil, nil,
+ 194, 4894, 798, nil, 20, nil, nil, nil, 1133, nil,
+ nil, nil, 753, nil, nil, 317, nil, 208, nil, nil,
+ 733, nil, 732, nil, nil, nil, 23815, nil, 18539, 732,
+ 18670, 18801, 18932, 27139, 26895, 19075, 19206, 762, 759, 19468,
+ 19599, 19730, 19861, 747, nil, nil, 19992, 20123, 733, nil,
+ nil, nil, 255, 414, 139, 0, 679, 720, nil, 695,
+ nil, nil, 610, 66, 322, nil, 539, nil, nil, 26084,
+ 26050, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, 752, 252, nil, 665, 766, nil, 737, -8,
+ nil, nil, 20385, nil, 625, 619, 645, nil, 441, nil,
+ 477, 20647, nil, nil, 20778, nil, 303, 22219, 400, nil,
+ 359, 165, 167, 381, 237, 757, 345, 246, 22350, nil,
+ 292, 10, 317, 20909, nil, nil, nil, 443, nil, 16165,
+ nil, 183, 176, 101, nil, 53, 26, -41, nil, nil,
+ nil, nil, nil, nil, nil, nil, -86, 2288, nil, nil,
+ 21564, nil, nil, nil, 187, nil, nil, nil, -26, nil,
+ nil, 1443, 653, nil, 1466, nil, nil, nil, nil, nil,
+ 1470, 1469, nil, nil, -11, 1345, 38, 61, 178, 29,
+ 3310, 584, 900, nil, 1322, 1438, 5169, nil, 1445, 3166,
+ 526, 24286, 24524, nil, nil, nil, nil, nil, nil, 3022,
+ nil, nil, nil, nil, nil, nil, nil, nil, 1341, 21826,
+ 1347, 405, -28, 749, 861, nil, 2014, 21695, nil, -84,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 21433, 21302, 21171, 21040, 399, 229, 25421, -75, 134, 24381,
+ 25519, 279, 25195, nil, 774, nil, 403, 25097, 6886, 25952,
+ nil, nil, nil, nil, nil, nil, 20516, nil, 549, nil,
+ nil, 570, 597, nil, nil, 16110, 2878, nil, nil, nil,
+ nil, 622, 163, nil, nil, 760, nil, 3454, 660, 709,
+ nil, nil, nil, 33, 672, 815, nil, nil, 598, nil,
+ 24806, nil, 27270, nil, 22929, nil, 20254, nil, 2317, nil,
+ 704, 705, 1568, 714, nil, nil, nil, nil, nil, 836,
+ nil, 19337, 855, nil, nil, 24705, 18396, 4462, 64, 864,
+ nil, 874, 498, 1006, nil, 883, 763, 763, 775, nil,
+ 647, nil, 782, 778, 154, nil, nil, 17872, 17479, nil,
+ nil, nil, nil, 140, 793, 811, 25911, nil, 813, -19,
+ 817, nil, nil, nil, 25813, nil, nil, 232, 825, 827,
+ nil, 828, 830, nil, nil, -66, nil, nil, nil, 1726,
+ 1582, nil, nil, 853, 854, 862, nil, 865, 867, 868,
+ nil, 893, 875, 880, 873, 23152, nil, nil, nil, nil,
+ 1726, nil, nil, 42, 23021, nil, nil, nil, nil, 988,
+ 951, nil, 1034, nil, nil, 954, 960, nil, 962, 963,
+ nil, 967, nil, nil, 972, 992, 2327, nil, nil, nil,
+ 39, nil, 53, 605, 116, nil, nil, nil, 465, nil,
+ nil, nil, 1110, nil, nil, 636, nil, nil, 1036, nil,
+ nil, nil, 1043, 999, -21, nil, 1003, 24803, 695, 1056,
+ 383, nil, nil, nil, nil, nil, nil, 198, nil, nil,
+ 1183, nil, nil, nil, 24904, nil, 25002, nil, 25198, nil,
+ nil, 1054, 925, 23545, 611, 1122, nil, 3886, 38, 19,
+ 282, 1155, 8, nil, 2446, 2590, nil, nil, 25718, nil,
+ 25620, nil, 25100, nil, 27262, nil, nil, nil, nil, 1113,
+ 1121, 4318, nil, 14280, 14149, 24901, nil, nil, nil, nil,
+ 1144, 4606, nil, 1143, 24999, 24607, 1151, nil, nil, nil,
+ nil, nil, 1152, nil, nil, 1158, 1168, 1169, 1170, nil,
+ 1173, nil, 458, nil, nil, nil, 906, 26346, nil, 1323,
+ 14018, 26224, 26163, -10, 1223, 1341, 1221, 1238, 1241, 1242,
+ 2670, 2356, 687, 1870, nil, nil, nil, nil, 1374, 25715,
+ 1254, 1255, 25617, nil, 16146, nil, 22659, nil, 24594, nil,
+ 25408, nil, nil, nil, 1057, 1324, 1329, nil, 1289, 89,
+ -7, 69, -9, nil, nil, 15270, nil, nil, nil, nil,
+ 1295, nil, 20, nil, 1298, nil, 1302, 1303, 1312, 1313,
+ nil, 6, 1317, nil, nil, nil, 25816, nil, nil, nil,
+ nil, nil, 1174, nil ]
+
+racc_action_default = [
+ -1, -716, -4, -716, -2, -701, -5, -716, -8, -716,
+ -716, -716, -716, -31, -716, -716, -36, -716, -716, -295,
+ -48, -703, -716, -55, -59, -60, -61, -65, -272, -272,
+ -272, -308, -339, -340, -77, -13, -81, -89, -91, -716,
+ -600, -601, -716, -716, -716, -716, -716, -716, -229, -716,
+ -703, -243, -286, -287, -288, -289, -290, -291, -292, -293,
+ -294, -689, -297, -301, -715, -679, -316, -318, -716, -716,
+ -57, -57, -701, -716, -716, -716, -716, -341, -342, -344,
+ -345, -346, -347, -540, -541, -542, -543, -564, -546, -547,
+ -566, -568, -551, -556, -560, -562, -578, -579, -580, -564,
+ -582, -584, -585, -586, -587, -687, -589, -590, -688, -592,
+ -593, -594, -595, -596, -597, -598, -599, -604, -605, 1194,
+ -3, -702, -711, -712, -713, -7, -716, -716, -716, -716,
+ -716, -9, -4, -19, -716, -120, -121, -122, -123, -124,
+ -125, -126, -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, -200, -24, -127, -13, -716, -716, -716, -716,
+ -716, -262, -716, -716, -699, -700, -716, -716, -703, -704,
+ -52, -716, -600, -601, -716, -295, -716, -716, -235, -716,
+ -13, -716, -53, -212, -213, -716, -716, -716, -716, -716,
+ -716, -716, -716, -716, -716, -716, -716, -716, -716, -716,
+ -716, -716, -716, -716, -716, -244, -245, -246, -247, -716,
+ -411, -413, -716, -697, -698, -66, -262, -716, -315, -417,
+ -426, -428, -72, -423, -73, -703, -74, -250, -267, -276,
+ -276, -271, -716, -277, -716, -564, -681, -716, -716, -75,
+ -76, -701, -14, -716, -17, -716, -79, -13, -703, -716,
+ -82, -85, -13, -97, -98, -716, -716, -105, -308, -311,
+ -703, -716, -339, -340, -343, -424, -716, -87, -716, -93,
+ -305, -716, -214, -215, -583, -223, -224, -716, -236, -716,
+ -13, -299, -703, -251, -708, -708, -716, -716, -708, -716,
+ -317, -402, -56, -716, -716, -716, -13, -13, -701, -716,
+ -702, -600, -601, -716, -716, -295, -716, -357, -358, -115,
+ -116, -716, -118, -716, -295, -608, -716, -600, -601, -332,
+ -120, -121, -160, -161, -162, -178, -183, -190, -193, -334,
+ -716, -677, -716, -544, -716, -716, -716, -716, -716, -716,
+ -716, -716, -6, -714, -25, -26, -27, -28, -29, -716,
+ -716, -21, -22, -23, -128, -716, -32, -35, -282, -716,
+ -716, -281, -33, -716, -37, -716, -295, -45, -47, -201,
+ -255, -277, -49, -50, -38, -202, -255, -703, -263, -276,
+ -276, -690, -691, -272, -421, -692, -693, -691, -690, -272,
+ -420, -422, -692, -693, -44, -209, -51, -703, -314, -716,
+ -716, -716, -262, -305, -716, -716, -716, -716, -210, -211,
+ -216, -217, -218, -219, -220, -221, -225, -226, -227, -228,
+ -230, -231, -232, -233, -234, -237, -238, -239, -240, -703,
+ -248, -432, -272, -690, -691, -63, -67, -636, -703, -276,
+ -703, -273, -430, -432, -703, -310, -268, -716, -269, -716,
+ -274, -716, -278, -716, -684, -686, -12, -702, -16, -18,
+ -703, -78, -303, -94, -83, -716, -703, -262, -716, -716,
+ -104, -716, -583, -716, -90, -95, -716, -716, -716, -716,
+ -249, -241, -716, -532, -716, -703, -716, -252, -710, -709,
+ -254, -710, -306, -307, -680, -319, -635, -13, -348, -349,
+ -13, -716, -716, -716, -716, -716, -716, -262, -716, -716,
+ -305, -57, -115, -116, -117, -716, -716, -262, -328, -606,
+ -716, -13, -612, -336, -703, -545, -565, -570, -716, -572,
+ -548, -567, -716, -569, -550, -716, -553, -716, -555, -558,
+ -716, -559, -716, -581, -10, -20, -716, -30, -716, -285,
+ -716, -716, -262, -716, -716, -716, -716, -425, -716, -264,
+ -266, -716, -716, -68, -261, -418, -716, -716, -70, -419,
+ -313, -705, -690, -691, -690, -691, -703, -54, -451, -453,
+ -455, -458, -512, -465, -468, -471, -505, -510, -511, -716,
+ -716, -515, -516, -517, -518, -519, -520, -521, -522, -523,
+ -524, -526, -716, -716, -530, -716, -716, -433, -62, -414,
+ -430, -257, -264, -259, -716, -392, -716, -309, -276, -275,
+ -279, -716, -682, -683, -716, -15, -80, -716, -86, -92,
+ -703, -690, -691, -260, -694, -103, -716, -88, -716, -208,
+ -222, -703, -715, -715, -298, -300, -302, -708, -403, -635,
+ -406, -676, -676, -676, -618, -620, -620, -620, -634, -637,
+ -638, -639, -640, -641, -642, -643, -644, -716, -646, -648,
+ -650, -655, -657, -658, -661, -666, -668, -669, -671, -672,
+ -673, -716, -715, -350, -715, -58, -351, -352, -322, -323,
+ -716, -716, -438, -325, -716, -703, -690, -691, -694, -304,
+ -13, -115, -116, -119, -703, -13, -716, -330, -716, -13,
+ -635, -635, -716, -678, -571, -574, -575, -576, -577, -13,
+ -549, -552, -554, -557, -561, -563, -129, -34, -283, -716,
+ -703, -690, -691, -691, -690, -46, -256, -716, -706, -276,
+ -40, -204, -41, -205, -69, -42, -207, -43, -206, -71,
+ -716, -716, -716, -716, -425, -716, -716, -456, -457, -716,
+ -716, -716, -716, -467, -716, -470, -716, -716, -508, -509,
+ -513, -514, -402, -527, -116, -528, -716, -412, -392, -416,
+ -415, -716, -703, -427, -393, -703, -13, -429, -270, -280,
+ -685, -84, -425, -96, -312, -715, -355, -13, -533, -715,
+ -534, -535, -253, -716, -703, -716, -615, -616, -716, -617,
+ -716, -627, -716, -630, -716, -632, -716, -359, -716, -361,
+ -363, -366, -369, -703, -649, -659, -660, -670, -674, -716,
+ -353, -716, -716, -324, -326, -716, -716, -13, -425, -716,
+ -425, -716, -716, -13, -333, -716, -703, -620, -703, -636,
+ -716, -337, -716, -284, -425, -39, -203, -265, -716, -452,
+ -454, -461, -464, -473, -703, -703, -474, -480, -716, -485,
+ -491, -493, -495, -496, -499, -500, -564, -503, -703, -703,
+ -529, -703, -703, -564, -707, -703, -506, -507, -525, -242,
+ -13, -64, -258, -676, -676, -676, -374, -376, -376, -376,
+ -391, -716, -703, -396, -644, -652, -653, -664, -431, -11,
+ -13, -539, -356, -716, -716, -537, -404, -407, -409, -716,
+ -676, -656, -661, -675, -619, -620, -620, -647, -620, -620,
+ -667, -620, -644, -662, -703, -716, -716, -368, -645, -320,
+ -716, -321, -716, -443, -446, -449, -450, -279, -715, -327,
+ -329, -607, -716, -335, -609, -716, -611, -613, -612, -573,
+ -459, -460, -489, -475, -478, -481, -483, -716, -492, -498,
+ -716, -502, -504, -462, -463, -466, -469, -716, -472, -434,
+ -716, -371, -372, -373, -382, -384, -716, -387, -716, -389,
+ -394, -716, -716, -716, -651, -716, -538, -13, -600, -601,
+ -716, -716, -295, -536, -13, -13, -405, -614, -716, -623,
+ -716, -625, -716, -628, -716, -631, -633, -360, -362, -364,
+ -367, -13, -439, -716, -716, -447, -435, -436, -437, -331,
+ -703, -13, -482, -476, -716, -716, -486, -487, -490, -494,
+ -497, -501, -676, -654, -375, -376, -376, -376, -376, -665,
+ -376, -395, -703, -398, -400, -401, -663, -716, -305, -532,
+ -262, -716, -716, -305, -716, -716, -620, -620, -620, -620,
+ -716, -716, -715, -13, -444, -445, -448, -610, -716, -716,
+ -479, -484, -716, -370, -716, -379, -716, -381, -716, -385,
+ -716, -388, -390, -397, -716, -304, -694, -531, -703, -690,
+ -691, -694, -304, -408, -410, -716, -621, -624, -626, -629,
+ -365, -354, -715, -338, -477, -488, -376, -376, -376, -376,
+ -399, -425, -620, -440, -441, -442, -716, -377, -380, -383,
+ -386, -622, -376, -378 ]
+
+clist = [
+'41,394,343,222,544,41,324,324,500,227,124,273,309,401,443,449,288,288',
+'288,389,310,565,138,138,279,283,141,141,751,271,230,133,214,41,314,314',
+'15,350,339,437,702,15,769,324,324,324,356,357,508,421,422,555,557,560',
+'682,272,353,354,889,534,358,41,121,8,492,131,327,496,8,15,334,362,378',
+'378,378,825,855,124,574,958,547,550,637,679,554,679,883,120,138,990',
+'289,289,289,1078,498,458,682,15,434,275,282,284,846,674,454,985,1080',
+'367,830,831,961,4,1109,903,404,405,406,407,892,41,306,987,308,344,341',
+'125,666,765,41,979,41,375,379,351,1113,290,290,290,676,595,597,924,938',
+'962,941,1115,342,1096,545,340,390,1,505,1112,359,15,578,286,299,300',
+'368,708,976,617,15,682,15,863,345,348,366,347,352,352,1064,521,352,959',
+'1065,491,502,503,8,838,591,593,596,596,1086,1002,1183,408,415,8,428',
+'679,679,428,508,895,1133,1003,986,428,988,391,288,925,939,513,1109,1005',
+'942,41,1140,1141,460,309,444,919,920,819,820,669,416,427,750,1051,427',
+'1078,352,352,352,352,427,453,1180,994,41,402,1170,409,866,867,869,768',
+'822,1115,679,15,985,423,443,449,423,1023,688,824,827,1174,423,288,288',
+'346,697,950,987,337,710,1098,288,841,1099,1100,15,420,420,2,1105,606',
+'636,324,763,1006,309,990,832,946,947,309,859,973,393,718,395,987,435',
+'396,324,397,528,41,455,670,398,41,124,399,531,314,41,400,535,774,779',
+'877,537,279,766,745,693,283,432,433,630,987,314,467,969,693,546,456',
+'457,562,563,499,289,15,41,685,524,15,213,561,289,690,15,986,568,410',
+'981,532,937,937,41,41,1097,937,517,1103,693,519,814,124,518,671,417',
+'673,693,823,835,677,772,1036,15,273,1106,1018,1107,1079,960,290,1087',
+'516,782,755,782,686,582,290,15,15,306,689,520,764,581,306,982,526,1126',
+'987,,501,842,443,449,1136,,,613,504,705,,,804,852,,851,583,809,864,138',
+'1097,1097,618,141,,937,901,790,605,,905,923,923,848,923,,624,564,,945',
+'862,,629,718,288,1171,,,773,,897,,,444,,,352,,,682,,,659,877,,1097,',
+'997,1175,,453,,,1176,665,1091,,580,898,906,910,1041,1042,1043,,624,',
+'900,,,679,,324,584,,,800,802,,908,324,805,807,,718,718,535,1004,1067',
+'288,,623,41,914,535,,,628,,,314,444,,,,940,,,314,948,444,742,,860,744',
+',,455,453,435,,922,,1184,760,,1029,453,15,288,,,41,,848,41,,,937,288',
+'668,444,,746,1012,854,,873,875,444,982,,,,,,41,,453,,877,877,767,,453',
+'428,,,15,,,15,,,288,428,428,,955,,428,428,,41,,,444,,678,699,41,1039',
+'15,1157,,138,427,,,141,,618,754,453,786,,427,427,618,826,1143,427,427',
+'1185,,,,840,861,15,,,423,701,659,659,15,,,707,,,423,423,324,,,423,423',
+',,1033,1034,,1035,324,787,1088,535,1057,839,,915,795,,618,,,,853,,921',
+'314,,,,624,,,629,,,,314,801,803,1081,923,1082,806,808,,,,,,952,,,,,',
+'911,,,877,877,,,,799,,,,,,1125,,,,,,,,899,,,,,,618,,,,1090,,,998,,618',
+',902,1138,912,,41,,,,420,41,,,,41,1045,1047,1049,,,1014,428,1016,799',
+'41,618,,,,,,138,,,,,,,1020,1021,971,15,,,975,,15,955,,955,15,955,427',
+'618,,,,,,1038,15,659,,,659,659,,659,,,968,,659,659,659,,,,423,,963,972',
+',,,,1069,1071,,1073,1075,41,1076,726,,,,1030,,963,,,41,,1037,,,,1077',
+',,,,,,,,352,,,916,1008,,,,,1000,15,965,,,1181,,801,803,808,806,,15,',
+'659,,41,,,,,955,41,955,,955,,955,1011,,,,,,693,,1017,1145,1147,1149',
+'1151,,1152,,,659,,618,618,,618,826,15,659,,,324,,15,1158,,18,,955,,324',
+'18,,1056,41,,963,,,,,,,1137,,,231,,,378,,,,349,41,231,231,231,1059,18',
+'315,315,,,,,1166,1167,1168,1169,15,,,1187,1188,1189,1190,,,,916,352',
+',,,726,,18,,1193,15,,231,231,1063,,231,363,373,373,17,,,,,17,,,,324',
+',659,,,,,654,,,,1119,,1191,,,,,1124,,,,1121,,17,,,,378,,,,41,,,1132',
+'18,726,726,41,41,231,231,231,231,18,,18,1134,1135,,,17,965,,,41,965',
+',965,659,965,,,,,41,,15,659,659,,,,,15,15,1153,,,954,,288,,,,,1172,',
+',,,15,,444,418,431,,,,980,,15,,,,453,658,41,,17,453,964,,659,,,659,',
+'17,,17,,618,,,,,,,18,231,425,231,231,425,231,726,,726,,425,231,231,15',
+',,,,,,,,,,18,,965,,965,,965,,965,352,352,,,,,,510,,512,,,514,515,40',
+',,,,40,,,,,,654,654,231,231,,,,,,,965,231,,,,17,,17,,,17,,40,313,313',
+',17,,,18,,,,18,,,,315,18,,17,,,657,,,,,,,40,,,,315,,,,,,361,377,377',
+'377,,,18,,,,,,,,,,,,,,,231,18,18,,,1102,,,,954,,954,726,954,,,,,,658',
+'658,231,17,,,,17,40,609,,,17,956,,,,40,231,40,,,964,,964,,,,,,,,,983',
+',,983,,,,17,,,,,,726,,,,,,,,,,17,17,,907,,,,,,,,654,,,654,654,,654,',
+',,,654,654,654,,,,,,,,231,,954,,954,,954,,954,680,,349,,683,40,,,,,',
+',,,,,,,,,,,,,,964,,,657,657,40,,,,,954,,957,,,,680,,,349,,18,,,654,',
+',,,315,,231,,,431,,,315,656,989,,991,,,,658,231,,658,658,,658,,,,654',
+'658,658,658,,,18,,654,18,,,,40,,,231,40,,,,313,40,788,,,231,,,,18,983',
+'680,349,,956,,956,313,956,17,,,,,,,,,,40,,,,,,,18,,,425,231,,,18,,40',
+'40,,658,425,425,655,,,425,425,,,,17,,,17,,680,,,,,,,,,849,,,850,,,658',
+'654,,,17,,,,658,,,,,,,657,858,,657,657,,657,,,,,657,657,657,,,17,,,17',
+'956,315,956,17,956,,956,,884,17,17,,315,,17,17,,,,,,,,1108,654,1110',
+',,,,656,656,,654,654,,,,,,,,956,,,1127,,1128,,1129,,,,,,,,,,657,,,,',
+',,658,913,,,,,,,18,,,,654,18,231,654,,18,,,,,,,657,,40,18,,,,,657,,313',
+',,,,,,,313,,,425,,,,,,,,655,655,1177,,1178,658,1179,,,,,,,40,658,658',
+'40,,,,,,,1182,,,,,,17,,,,,17,993,,40,17,,,18,,,1192,,,,17,,,,18,,,1007',
+',,,658,,,658,,40,,17,653,,,,40,657,,,,349,,656,,31,656,656,,656,31,231',
+',,656,656,656,18,,,,,,18,,31,,,,,,,,,31,31,31,,31,,17,,,,,,,,,,,17,',
+',,657,,,,,,,,,657,657,31,,313,,18,31,31,,,31,,,,313,,,656,,,1054,,,',
+',18,17,655,,1060,655,655,17,655,,,,,655,655,655,,,,657,,,657,656,652',
+',,,,,,656,,,31,,,,,31,31,31,31,31,,31,,,,,,40,,,17,,40,,,,40,,,,,,,',
+',,40,,,,17,,,,,,,655,,1116,653,653,,18,,,,,,,18,18,,,,,,,,,651,,,,,',
+',18,655,231,231,,,,,,655,18,,,656,,,,31,31,31,31,31,31,31,,,40,,31,31',
+'31,,,,,,,40,,231,,,31,,,,,,,,17,,18,,,,,17,17,,,,,,,,,,,,,656,,,17,',
+',40,31,31,656,656,,40,17,,,31,,,,,,,,652,652,,,,,,655,,,31,,,,31,,,',
+',31,,,,,,,,,,,656,17,,656,,40,,,,,,,,,,653,,31,653,653,377,653,,,,40',
+'653,653,653,1058,,,31,31,31,655,,,,,,,,,655,655,,,,,651,651,,31,,,,28',
+',,,,28,,,,,,,31,,,,,,,,28,,,,,,,,,28,28,28,655,28,,655,,653,,,,,,,,',
+',,,,,377,,,,40,,,,,,28,40,40,,,28,28,653,,28,,,,,,653,,,40,652,,31,652',
+'652,,652,,,40,,652,652,652,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,28,28,28',
+'28,28,,28,40,,,,,,31,,,,,,,,,,31,,,,,,,,,,,,652,651,,31,651,651,,651',
+',,653,,651,651,651,,,,31,,,31,,,,,,,31,,,652,,,,,,,31,652,,,31,,,,,',
+',,,,,,28,28,28,28,28,28,28,,,,,28,28,28,653,31,,,31,31,,,31,653,653',
+'28,651,,31,31,,,,31,31,,,,,,,,,,,,,,,,,,,,,,,651,,,,28,28,,,651,,,653',
+',28,653,,,,,,19,652,,,,19,,,,,,28,,,,28,,,,,28,,,,,,,,,,,,,19,317,317',
+',,,,,,,,,,,,28,,,,,,,,,,,652,,19,,28,28,28,,,652,652,,365,374,374,,',
+',,,,,651,,,28,,,,,,31,,,,,31,31,,,31,28,,,,,,,,,31,,,,652,,,652,,,19',
+',,,,,,,31,19,,19,,,,,,,,,651,,,,,,,,,651,651,,,,,,,,,,,,,,,,,,,,,28',
+',,,,,31,,,,,,,,,,,31,,,,,,651,,,651,,,,,,,,,,,,,,,,,19,,426,,,426,,',
+'31,,,426,28,,31,,,,,,31,,28,,,19,,,,,,,,,,,,28,,,,,,,,,,,,,,,28,,,28',
+',,,,,,28,,,,,31,,,,,28,,,,28,,,,,,,,,,,31,19,,,,19,,,,317,19,,,,,,28',
+',,28,28,,,28,,,317,,,28,28,,,,28,28,,,19,,,,,,,,,,,,,,,,19,19,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,31,,,,,,,31,31,,,,,,,,,,,,,,,,31,,31,31,,,',
+',,,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,31,,,,,,,,,,,,,31,,,,,28,,,,,28,28',
+',,28,,,,,,,,,,28,,,,,,,,,,,,,,,,,,28,,,,,,,,,,19,,,,,,,,317,,,,,,,,317',
+',,,,,,,,,,,,,,,,,,,,,,28,19,,,19,,,,,,,28,,,,,,,,,,,,,,19,,,,,,,778',
+',,,,,,,,,,,,28,,,,,,28,19,,,426,,28,,19,,,,,,426,426,,,,426,426,,,,',
+',,,,,,,,,,,,,,,,,,,,,,238,,,,,,28,,,287,287,287,,,,,,,,,,332,333,,335',
+'336,28,338,,,,,,317,,,,,,,,,287,287,317,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,19,,28,,19,,,,,28,28,,,,19,',
+',,,,,,,,,,28,,28,28,,,426,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,',
+',,,,,,,28,,,19,,287,430,,,436,287,,,,19,436,,,,,,,,,,,,,238,,,,468,469',
+'470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486',
+'487,488,489,19,,,,490,,19,,,,,287,287,,,,,,,,287,,,,,,,287,,287,,,287',
+'287,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,,,374,,,,540,19,541,,,1062,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,287,,374,,,,19,,,,,,,19,19,,,,,,,,,,,,,,,,19,,,,,,,,,,19,,,287',
+',436,436,436,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,333,,,,19,,,,,,287,,287,',
+'287,,,,,,,,,,,,,,,,287,,,,,,,,,436,,,700,,,,,,,,,287,,,287,,,,,,,,,',
+',,,,,287,287,,,,,,,,,,287,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,287,436,287',
+',,,796,,,287,287,436,436,,,,436,436,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,287,,,,,,,,,287,,,287,,,,,,,,,,,,,,,,,,,287,,,,,,,,,,,,',
+',,,,,,,,,,,,,,287,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,287,,,,,,,,436,,,,,,,,,,,,,436,436,436,436,,,,,,,,,,,,,,,,,',
+',,,,,949,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,287,,,,,,,,,,,,,,,,',
+',,,287,,,,,,,,,,,,,,,,,,,,,287,436,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,287' ]
+ racc_goto_table = arr = ::Array.new(4242, 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 = [
+'63,190,78,33,10,63,74,74,83,35,108,33,11,190,46,46,42,42,42,66,59,103',
+'67,67,82,82,69,69,104,150,22,17,17,63,63,63,23,98,35,31,12,23,111,74',
+'74,74,39,39,85,24,24,100,101,101,227,45,19,19,102,61,19,63,7,8,46,9',
+'60,48,8,23,72,63,63,63,63,178,13,108,64,137,80,80,37,86,80,86,125,5',
+'67,223,79,79,79,123,31,57,227,23,28,47,47,47,139,49,28,217,126,23,192',
+'192,141,2,224,118,19,19,19,19,13,63,55,219,56,79,8,6,153,117,63,141',
+'63,65,65,116,143,81,81,81,153,203,203,167,167,135,167,144,115,184,114',
+'113,112,1,57,142,5,23,107,54,54,54,21,145,146,32,23,227,23,148,81,81',
+'105,97,26,26,151,57,26,138,152,154,156,157,8,160,204,204,204,204,161',
+'162,163,8,11,8,20,86,86,20,85,164,165,166,138,20,138,96,42,169,169,190',
+'224,168,169,63,184,184,33,11,82,171,173,174,175,84,22,22,103,141,22',
+'123,26,26,26,26,22,67,143,125,63,6,126,2,131,131,131,10,179,144,86,23',
+'217,23,46,46,23,183,61,180,181,184,23,42,42,77,61,139,219,75,149,186',
+'42,49,187,188,23,79,79,3,137,70,31,74,64,169,11,223,194,192,192,11,195',
+'196,199,213,200,219,71,201,74,202,33,63,71,51,205,63,108,206,35,63,63',
+'207,59,208,209,124,33,82,212,40,46,82,26,26,57,219,63,38,14,46,35,26',
+'26,11,11,79,79,23,63,16,60,23,18,19,79,31,23,138,33,27,221,72,191,191',
+'63,63,183,191,7,222,46,9,32,108,8,57,25,57,46,32,64,57,121,178,23,33',
+'138,122,138,127,128,81,13,5,204,31,204,57,120,81,23,23,55,57,56,31,119',
+'55,191,56,138,219,,54,83,46,46,167,,,33,54,57,,,48,32,,61,45,48,149',
+'67,183,183,35,69,,191,10,31,17,,10,37,37,85,37,,82,5,,37,80,,82,213',
+'42,102,,,57,,101,,,82,,,26,,,227,,,63,124,,183,,124,183,,67,,,138,35',
+'111,,26,32,149,149,131,131,131,,82,,32,,,86,,74,26,,,28,28,,83,74,28',
+'28,,213,213,59,37,131,42,,47,63,32,59,,,47,,,63,82,,,,64,,,63,100,82',
+'11,,24,11,,,71,67,71,,32,,13,39,,37,67,23,42,,,63,,85,63,,,191,42,47',
+'82,,108,10,57,,216,216,82,191,,,,,,63,,67,,124,124,108,,67,20,,,23,',
+',23,,,42,20,20,,132,,20,20,,63,,,82,,81,71,63,10,23,12,,67,22,,,69,',
+'35,79,67,17,,22,22,35,35,131,22,22,104,,,,98,78,23,,,23,26,63,63,23',
+',,81,,,23,23,74,,,23,23,,,32,32,,32,74,8,103,59,101,150,,28,8,,35,,',
+',59,,57,63,,,,82,,,82,,,,63,71,71,101,37,101,71,71,,,,,,57,,,,,,66,',
+',124,124,,,,81,,,,,,10,,,,,,,,11,,,,,,35,,,,83,,,57,,35,,19,10,11,,63',
+',,,79,63,,,,63,134,134,134,,,57,20,57,81,63,35,,,,,,67,,,,,,,57,57,78',
+'23,,,78,,23,132,,132,23,132,22,35,,,,,,57,23,63,,,63,63,,63,,,11,,63',
+'63,63,,,,23,,35,11,,,,,216,216,,216,216,63,216,218,,,,190,,35,,,63,',
+'190,,,,57,,,,,,,,,26,,,71,11,,,,,19,23,220,,,32,,71,71,71,71,,23,,63',
+',63,,,,,132,63,132,,132,,132,108,,,,,,46,,108,134,134,134,134,,134,',
+',63,,35,35,,35,35,23,63,,,74,,23,31,,30,,132,,74,30,,11,63,,35,,,,,',
+',57,,,30,,,63,,,,76,63,30,30,30,63,30,30,30,,,,,216,216,216,216,23,',
+',134,134,134,134,,,,71,26,,,,218,,30,,134,23,,30,30,23,,30,30,30,30',
+'29,,,,,29,,,,74,,63,,,,,91,,,,11,,216,,,,,11,,,,33,,29,,,,63,,,,63,',
+',11,30,218,218,63,63,30,30,30,30,30,,30,19,19,,,29,220,,,63,220,,220',
+'63,220,,,,,63,,23,63,63,,,,,23,23,35,,,130,,42,,,,,11,,,,,23,,82,76',
+'76,,,,130,,23,,,,67,95,63,,29,67,218,,63,,,63,,29,,29,,35,,,,,,,30,30',
+'30,30,30,30,30,218,,218,,30,30,30,23,,,,,,,,,,,30,,220,,220,,220,,220',
+'26,26,,,,,,76,,76,,,76,76,62,,,,,62,,,,,,91,91,30,30,,,,,,,220,30,,',
+',29,,29,,,29,,62,62,62,,29,,,30,,,,30,,,,30,30,,29,,,94,,,,,,,62,,,',
+'30,,,,,,62,62,62,62,,,30,,,,,,,,,,,,,,,30,30,30,,,130,,,,130,,130,218',
+'130,,,,,,95,95,30,29,,,,29,62,76,,,29,133,,,,62,30,62,,,218,,218,,,',
+',,,,,133,,,133,,,,29,,,,,,218,,,,,,,,,,29,29,,136,,,,,,,,91,,,91,91',
+',91,,,,,91,91,91,,,,,,,,30,,130,,130,,130,,130,76,,76,,76,62,,,,,,,',
+',,,,,,,,,,,,218,,,94,94,62,,,,,130,,136,,,,76,,,76,,30,,,91,,,,,30,',
+'30,,,76,,,30,93,136,,136,,,,95,30,,95,95,,95,,,,91,95,95,95,,,30,,91',
+'30,,,,62,,,30,62,,,,62,62,76,,,30,,,,30,133,76,76,,133,,133,62,133,29',
+',,,,,,,,,62,,,,,,,30,,,30,30,,,30,,62,62,,95,30,30,92,,,30,30,,,,29',
+',,29,,76,,,,,,,,,76,,,76,,,95,91,,,29,,,,95,,,,,,,94,76,,94,94,,94,',
+',,,94,94,94,,,29,,,29,133,30,133,29,133,,133,,76,29,29,,30,,29,29,,',
+',,,,,136,91,136,,,,,93,93,,91,91,,,,,,,,133,,,136,,136,,136,,,,,,,,',
+',94,,,,,,,95,76,,,,,,,30,,,,91,30,30,91,,30,,,,,,,94,,62,30,,,,,94,',
+'62,,,,,,,,62,,,30,,,,,,,,92,92,136,,136,95,136,,,,,,,62,95,95,62,,,',
+',,,136,,,,,,29,,,,,29,76,,62,29,,,30,,,136,,,,29,,,,30,,,76,,,,95,,',
+'95,,62,,29,90,,,,62,94,,,,76,,93,,53,93,93,,93,53,30,,,93,93,93,30,',
+',,,,30,,53,,,,,,,,,53,53,53,,53,,29,,,,,,,,,,,29,,,,94,,,,,,,,,94,94',
+'53,,62,,30,53,53,,,53,,,,62,,,93,,,30,,,,,30,29,92,,30,92,92,29,92,',
+',,,92,92,92,,,,94,,,94,93,89,,,,,,,93,,,53,,,,,53,53,53,53,53,,53,,',
+',,,62,,,29,,62,,,,62,,,,,,,,,,62,,,,29,,,,,,,92,,30,90,90,,30,,,,,,',
+'30,30,,,,,,,,,88,,,,,,,30,92,30,30,,,,,,92,30,,,93,,,,53,53,53,53,53',
+'53,53,,,62,,53,53,53,,,,,,,62,,30,,,53,,,,,,,,29,,30,,,,,29,29,,,,,',
+',,,,,,,93,,,29,,,62,53,53,93,93,,62,29,,,53,,,,,,,,89,89,,,,,,92,,,53',
+',,,53,,,,,53,,,,,,,,,,,93,29,,93,,62,,,,,,,,,,90,,53,90,90,62,90,,,',
+'62,90,90,90,62,,,53,53,53,92,,,,,,,,,92,92,,,,,88,88,,53,,,,50,,,,,50',
+',,,,,,53,,,,,,,,50,,,,,,,,,50,50,50,92,50,,92,,90,,,,,,,,,,,,,,62,,',
+',62,,,,,,50,62,62,,,50,50,90,,50,,,,,,90,,,62,89,,53,89,89,,89,,,62',
+',89,89,89,,,,,,,,,,,,,,,,,,,,,,,,,,50,,,,,50,50,50,50,50,,50,62,,,,',
+',53,,,,,,,,,,53,,,,,,,,,,,,89,88,,53,88,88,,88,,,90,,88,88,88,,,,53',
+',,53,,,,,,,53,,,89,,,,,,,53,89,,,53,,,,,,,,,,,,50,50,50,50,50,50,50',
+',,,,50,50,50,90,53,,,53,53,,,53,90,90,50,88,,53,53,,,,53,53,,,,,,,,',
+',,,,,,,,,,,,,,88,,,,50,50,,,88,,,90,,50,90,,,,,,34,89,,,,34,,,,,,50',
+',,,50,,,,,50,,,,,,,,,,,,,34,34,34,,,,,,,,,,,,,50,,,,,,,,,,,89,,34,,50',
+'50,50,,,89,89,,34,34,34,,,,,,,,88,,,50,,,,,,53,,,,,53,53,,,53,50,,,',
+',,,,,53,,,,89,,,89,,,34,,,,,,,,53,34,,34,,,,,,,,,88,,,,,,,,,88,88,,',
+',,,,,,,,,,,,,,,,,,50,,,,,,53,,,,,,,,,,,53,,,,,,88,,,88,,,,,,,,,,,,,',
+',,,34,,34,,,34,,,53,,,34,50,,53,,,,,,53,,50,,,34,,,,,,,,,,,,50,,,,,',
+',,,,,,,,,50,,,50,,,,,,,50,,,,,53,,,,,50,,,,50,,,,,,,,,,,53,34,,,,34',
+',,,34,34,,,,,,50,,,50,50,,,50,,,34,,,50,50,,,,50,50,,,34,,,,,,,,,,,',
+',,,,34,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,53,,,,,,,53,53,,,,,,,,,,,,',
+',,,53,,53,53,,,,,,,53,,,,,,,,,,,,,,,,,,,,,,,,,,,,,53,,,,,,,,,,,,,53',
+',,,,50,,,,,50,50,,,50,,,,,,,,,,50,,,,,,,,,,,,,,,,,,50,,,,,,,,,,34,,',
+',,,,,34,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,50,34,,,34,,,,,,,50,,,,,,,,',
+',,,,,34,,,,,,,34,,,,,,,,,,,,,50,,,,,,50,34,,,34,,50,,34,,,,,,34,34,',
+',,34,34,,,,,,,,,,,,,,,,,,,,,,,,,,,36,,,,,,50,,,36,36,36,,,,,,,,,,36',
+'36,,36,36,50,36,,,,,,34,,,,,,,,,36,36,34,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,34,,50,,34,,,,,50,50,,,,34',
+',,,,,,,,,,,50,,50,50,,,34,,,,50,,,,,,,,,,,,,,,,,,,,,,,,,,,,,50,,,,,',
+',,,,,,,50,,,34,,36,36,,,36,36,,,,34,36,,,,,,,,,,,,,36,,,,36,36,36,36',
+'36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,34,,,,36,,34,',
+',,,36,36,,,,,,,,36,,,,,,,36,,36,,,36,36,,,,,,,,,,,,,,,,,,,,34,,,,,,',
+',,,,,,,,34,,,,36,34,36,,,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,,34,,,,34,,,,,,,34,34,,,,,,,',
+',,,,,,,,34,,,,,,,,,,34,,,36,,36,36,36,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+'36,,,,34,,,,,,36,,36,,36,,,,,,,,,,,,,,,,36,,,,,,,,,36,,,36,,,,,,,,,36',
+',,36,,,,,,,,,,,,,,,36,36,,,,,,,,,,36,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',36,36,36,,,,36,,,36,36,36,36,,,,36,36,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,36,,,,,,,,,36,,,36,,,,,,,,,,,,,,,,,,,36,,,,,,,,,,,,,',
+',,,,,,,,,,,,,36,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,36,,,,,,,,36,,,,,,,,,,,,,36,36,36,36,,,,,,,,,,,,,,,,,,,,,,,36',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,,,,,,,,,,,,,,,,,,,,36,,,,',
+',,,,,,,,,,,,,,,,36,36,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,36' ]
+ racc_goto_check = arr = ::Array.new(4242, 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, 151, 109, 277, nil, 82, 118, 57, 61, 56,
+ -336, -23, -503, -626, -527, nil, -178, 21, 331, -12,
+ -23, 87, 8, 34, -167, 150, 104, 216, -122, 1012,
+ 938, -182, -274, -15, 2489, -12, 3121, -385, 85, -24,
+ -242, nil, -15, nil, nil, 29, -208, 71, -208, -399,
+ 2199, -192, nil, 1821, 126, 85, 87, -133, nil, -16,
+ 29, -269, 1199, -2, -293, 57, -57, 12, nil, 16,
+ -135, 76, 25, nil, -30, 219, 902, 199, -62, 59,
+ -264, 104, -4, -268, -269, -242, -424, nil, 1545, 1465,
+ 1343, 563, 1094, 1005, 788, 663, 129, 106, -29, nil,
+ -300, -301, -684, -338, -536, 97, nil, -219, 5, nil,
+ nil, -540, 74, 87, -193, 83, 66, -451, -654, 17,
+ -1, -211, -534, -902, -412, -641, -890, -616, -465, nil,
+ 258, -469, -244, 480, -189, -702, 601, -766, -668, -573,
+ nil, -735, -899, -918, -907, -395, -701, nil, -541, -288,
+ 5, -803, -800, -365, -91, nil, -100, -100, nil, nil,
+ -484, -820, -706, -982, -553, -882, -694, -678, -684, -612,
+ nil, -596, nil, -596, -421, -420, nil, nil, -569, -397,
+ -387, -387, nil, -671, -880, nil, -759, -756, -755, nil,
+ -86, -467, -541, nil, -374, -413, -568, nil, nil, 207,
+ 204, 206, 207, -258, -211, 211, 213, 216, -275, -275,
+ nil, nil, -261, -263, nil, nil, -146, -765, 290, -749,
+ 36, -515, -681, -783, -934, nil, nil, -455 ]
+
+racc_goto_default = [
+ nil, nil, nil, nil, 5, nil, 6, 360, 304, nil,
+ nil, 543, nil, 890, nil, 301, 302, nil, nil, nil,
+ 13, 14, 20, 236, nil, nil, 16, nil, 424, 237,
+ 331, nil, nil, 576, 235, 459, 23, 1022, nil, nil,
+ nil, 355, 24, 25, 26, nil, 696, nil, nil, nil,
+ 321, nil, 27, 318, 438, 34, nil, nil, 36, 39,
+ 38, nil, 232, 233, 372, nil, 140, 446, 139, 84,
+ nil, 429, 100, 48, 51, 269, 293, nil, 856, 439,
+ nil, 440, 451, nil, 625, 506, 291, 277, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, nil, 278, 66,
+ nil, nil, nil, nil, nil, nil, 74, nil, 558, 75,
+ 76, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 879, 725, nil, 880, 881, 1104, 953,
+ 712, nil, 713, 714, nil, nil, 715, nil, 717, nil,
+ 844, nil, nil, nil, 723, nil, nil, 556, nil, nil,
+ nil, nil, nil, nil, nil, 450, nil, nil, 675, 667,
+ nil, nil, nil, nil, nil, nil, nil, nil, 927, nil,
+ 638, 647, 639, 640, nil, nil, 641, 642, nil, nil,
+ nil, nil, 926, 928, nil, 930, 931, 932, 933, 934,
+ nil, 734, 646, 648, nil, nil, nil, 83, 85, 86,
+ nil, nil, nil, nil, 586, nil, nil, nil, nil, nil,
+ 96, 97, nil, 984, 771, 711, 871, 716, 992, 728,
+ 730, 731, 966, 735, 967, 738, 741, 296 ]
+
+racc_reduce_table = [
+ 0, 0, :racc_error,
+ 0, 150, :_reduce_1,
+ 2, 148, :_reduce_2,
+ 2, 149, :_reduce_3,
+ 0, 151, :_reduce_4,
+ 1, 151, :_reduce_5,
+ 3, 151, :_reduce_6,
+ 2, 151, :_reduce_7,
+ 1, 153, :_reduce_none,
+ 2, 153, :_reduce_9,
+ 3, 156, :_reduce_10,
+ 4, 157, :_reduce_11,
+ 2, 158, :_reduce_12,
+ 0, 162, :_reduce_13,
+ 1, 162, :_reduce_14,
+ 3, 162, :_reduce_15,
+ 2, 162, :_reduce_16,
+ 1, 163, :_reduce_none,
+ 2, 163, :_reduce_18,
+ 0, 174, :_reduce_19,
+ 4, 155, :_reduce_20,
+ 3, 155, :_reduce_21,
+ 3, 155, :_reduce_22,
+ 3, 155, :_reduce_23,
+ 2, 155, :_reduce_24,
+ 3, 155, :_reduce_25,
+ 3, 155, :_reduce_26,
+ 3, 155, :_reduce_27,
+ 3, 155, :_reduce_28,
+ 3, 155, :_reduce_29,
+ 4, 155, :_reduce_30,
+ 1, 155, :_reduce_none,
+ 3, 155, :_reduce_32,
+ 3, 155, :_reduce_33,
+ 5, 155, :_reduce_34,
+ 3, 155, :_reduce_35,
+ 1, 155, :_reduce_none,
+ 3, 167, :_reduce_37,
+ 3, 167, :_reduce_38,
+ 6, 167, :_reduce_39,
+ 5, 167, :_reduce_40,
+ 5, 167, :_reduce_41,
+ 5, 167, :_reduce_42,
+ 5, 167, :_reduce_43,
+ 3, 167, :_reduce_44,
+ 1, 175, :_reduce_none,
+ 3, 175, :_reduce_46,
+ 1, 175, :_reduce_none,
+ 1, 173, :_reduce_none,
+ 3, 173, :_reduce_49,
+ 3, 173, :_reduce_50,
+ 3, 173, :_reduce_51,
+ 2, 173, :_reduce_52,
+ 0, 185, :_reduce_53,
+ 4, 173, :_reduce_54,
+ 1, 173, :_reduce_none,
+ 1, 166, :_reduce_none,
+ 0, 188, :_reduce_57,
+ 3, 186, :_reduce_58,
+ 1, 169, :_reduce_none,
+ 1, 169, :_reduce_none,
+ 1, 190, :_reduce_none,
+ 4, 190, :_reduce_62,
+ 0, 198, :_reduce_63,
+ 4, 195, :_reduce_64,
+ 1, 197, :_reduce_none,
+ 2, 189, :_reduce_66,
+ 3, 189, :_reduce_67,
+ 4, 189, :_reduce_68,
+ 5, 189, :_reduce_69,
+ 4, 189, :_reduce_70,
+ 5, 189, :_reduce_71,
+ 2, 189, :_reduce_72,
+ 2, 189, :_reduce_73,
+ 2, 189, :_reduce_74,
+ 2, 189, :_reduce_75,
+ 2, 189, :_reduce_76,
+ 1, 168, :_reduce_77,
+ 3, 168, :_reduce_78,
+ 1, 203, :_reduce_79,
+ 3, 203, :_reduce_80,
+ 1, 202, :_reduce_none,
+ 2, 202, :_reduce_82,
+ 3, 202, :_reduce_83,
+ 5, 202, :_reduce_84,
+ 2, 202, :_reduce_85,
+ 4, 202, :_reduce_86,
+ 2, 202, :_reduce_87,
+ 4, 202, :_reduce_88,
+ 1, 202, :_reduce_89,
+ 3, 202, :_reduce_90,
+ 1, 206, :_reduce_none,
+ 3, 206, :_reduce_92,
+ 2, 205, :_reduce_93,
+ 3, 205, :_reduce_94,
+ 1, 208, :_reduce_95,
+ 3, 208, :_reduce_96,
+ 1, 207, :_reduce_97,
+ 1, 207, :_reduce_98,
+ 4, 207, :_reduce_99,
+ 3, 207, :_reduce_100,
+ 3, 207, :_reduce_101,
+ 3, 207, :_reduce_102,
+ 3, 207, :_reduce_103,
+ 2, 207, :_reduce_104,
+ 1, 207, :_reduce_105,
+ 1, 170, :_reduce_106,
+ 1, 170, :_reduce_107,
+ 4, 170, :_reduce_108,
+ 3, 170, :_reduce_109,
+ 3, 170, :_reduce_110,
+ 3, 170, :_reduce_111,
+ 3, 170, :_reduce_112,
+ 2, 170, :_reduce_113,
+ 1, 170, :_reduce_114,
+ 1, 211, :_reduce_115,
+ 1, 211, :_reduce_none,
+ 2, 212, :_reduce_117,
+ 1, 212, :_reduce_118,
+ 3, 212, :_reduce_119,
+ 1, 213, :_reduce_none,
+ 1, 213, :_reduce_none,
+ 1, 213, :_reduce_none,
+ 1, 213, :_reduce_none,
+ 1, 213, :_reduce_none,
+ 1, 164, :_reduce_125,
+ 1, 164, :_reduce_none,
+ 1, 165, :_reduce_127,
+ 0, 217, :_reduce_128,
+ 4, 165, :_reduce_129,
+ 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, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 1, 215, :_reduce_none,
+ 3, 183, :_reduce_201,
+ 3, 183, :_reduce_202,
+ 6, 183, :_reduce_203,
+ 5, 183, :_reduce_204,
+ 5, 183, :_reduce_205,
+ 5, 183, :_reduce_206,
+ 5, 183, :_reduce_207,
+ 4, 183, :_reduce_208,
+ 3, 183, :_reduce_209,
+ 3, 183, :_reduce_210,
+ 3, 183, :_reduce_211,
+ 2, 183, :_reduce_212,
+ 2, 183, :_reduce_213,
+ 2, 183, :_reduce_214,
+ 2, 183, :_reduce_215,
+ 3, 183, :_reduce_216,
+ 3, 183, :_reduce_217,
+ 3, 183, :_reduce_218,
+ 3, 183, :_reduce_219,
+ 3, 183, :_reduce_220,
+ 3, 183, :_reduce_221,
+ 4, 183, :_reduce_222,
+ 2, 183, :_reduce_223,
+ 2, 183, :_reduce_224,
+ 3, 183, :_reduce_225,
+ 3, 183, :_reduce_226,
+ 3, 183, :_reduce_227,
+ 3, 183, :_reduce_228,
+ 1, 183, :_reduce_none,
+ 3, 183, :_reduce_230,
+ 3, 183, :_reduce_231,
+ 3, 183, :_reduce_232,
+ 3, 183, :_reduce_233,
+ 3, 183, :_reduce_234,
+ 2, 183, :_reduce_235,
+ 2, 183, :_reduce_236,
+ 3, 183, :_reduce_237,
+ 3, 183, :_reduce_238,
+ 3, 183, :_reduce_239,
+ 3, 183, :_reduce_240,
+ 3, 183, :_reduce_241,
+ 6, 183, :_reduce_242,
+ 1, 183, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 3, 220, :_reduce_248,
+ 3, 220, :_reduce_249,
+ 1, 223, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 2, 224, :_reduce_none,
+ 4, 224, :_reduce_253,
+ 2, 224, :_reduce_254,
+ 1, 218, :_reduce_none,
+ 3, 218, :_reduce_256,
+ 3, 229, :_reduce_257,
+ 5, 229, :_reduce_258,
+ 3, 229, :_reduce_259,
+ 0, 231, :_reduce_260,
+ 1, 231, :_reduce_none,
+ 0, 178, :_reduce_262,
+ 1, 178, :_reduce_none,
+ 2, 178, :_reduce_none,
+ 4, 178, :_reduce_265,
+ 2, 178, :_reduce_266,
+ 1, 201, :_reduce_267,
+ 2, 201, :_reduce_268,
+ 2, 201, :_reduce_269,
+ 4, 201, :_reduce_270,
+ 1, 201, :_reduce_271,
+ 0, 234, :_reduce_272,
+ 2, 194, :_reduce_273,
+ 2, 233, :_reduce_274,
+ 2, 232, :_reduce_275,
+ 0, 232, :_reduce_276,
+ 1, 226, :_reduce_277,
+ 2, 226, :_reduce_278,
+ 3, 226, :_reduce_279,
+ 4, 226, :_reduce_280,
+ 1, 172, :_reduce_281,
+ 1, 172, :_reduce_none,
+ 3, 171, :_reduce_283,
+ 4, 171, :_reduce_284,
+ 2, 171, :_reduce_285,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_296,
+ 0, 260, :_reduce_297,
+ 4, 221, :_reduce_298,
+ 0, 261, :_reduce_299,
+ 4, 221, :_reduce_300,
+ 0, 262, :_reduce_301,
+ 4, 221, :_reduce_302,
+ 3, 221, :_reduce_303,
+ 3, 221, :_reduce_304,
+ 2, 221, :_reduce_305,
+ 3, 221, :_reduce_306,
+ 3, 221, :_reduce_307,
+ 1, 221, :_reduce_308,
+ 4, 221, :_reduce_309,
+ 3, 221, :_reduce_310,
+ 1, 221, :_reduce_311,
+ 5, 221, :_reduce_312,
+ 4, 221, :_reduce_313,
+ 3, 221, :_reduce_314,
+ 2, 221, :_reduce_315,
+ 1, 221, :_reduce_none,
+ 2, 221, :_reduce_317,
+ 0, 263, :_reduce_318,
+ 3, 221, :_reduce_319,
+ 6, 221, :_reduce_320,
+ 6, 221, :_reduce_321,
+ 4, 221, :_reduce_322,
+ 4, 221, :_reduce_323,
+ 5, 221, :_reduce_324,
+ 4, 221, :_reduce_325,
+ 5, 221, :_reduce_326,
+ 6, 221, :_reduce_327,
+ 0, 264, :_reduce_328,
+ 6, 221, :_reduce_329,
+ 0, 265, :_reduce_330,
+ 7, 221, :_reduce_331,
+ 0, 266, :_reduce_332,
+ 5, 221, :_reduce_333,
+ 0, 267, :_reduce_334,
+ 6, 221, :_reduce_335,
+ 0, 268, :_reduce_336,
+ 0, 269, :_reduce_337,
+ 9, 221, :_reduce_338,
+ 1, 221, :_reduce_339,
+ 1, 221, :_reduce_340,
+ 1, 221, :_reduce_341,
+ 1, 221, :_reduce_342,
+ 1, 177, :_reduce_none,
+ 1, 253, :_reduce_344,
+ 1, 256, :_reduce_345,
+ 1, 257, :_reduce_346,
+ 1, 200, :_reduce_347,
+ 1, 248, :_reduce_none,
+ 1, 248, :_reduce_none,
+ 2, 248, :_reduce_350,
+ 1, 187, :_reduce_none,
+ 1, 187, :_reduce_none,
+ 1, 249, :_reduce_none,
+ 5, 249, :_reduce_354,
+ 1, 160, :_reduce_none,
+ 2, 160, :_reduce_356,
+ 1, 252, :_reduce_none,
+ 1, 252, :_reduce_none,
+ 1, 270, :_reduce_359,
+ 3, 270, :_reduce_360,
+ 1, 273, :_reduce_361,
+ 3, 273, :_reduce_362,
+ 1, 272, :_reduce_none,
+ 3, 272, :_reduce_364,
+ 5, 272, :_reduce_365,
+ 1, 272, :_reduce_366,
+ 3, 272, :_reduce_367,
+ 2, 274, :_reduce_368,
+ 1, 274, :_reduce_369,
+ 4, 275, :_reduce_370,
+ 2, 275, :_reduce_371,
+ 2, 275, :_reduce_372,
+ 2, 275, :_reduce_373,
+ 1, 275, :_reduce_374,
+ 2, 281, :_reduce_375,
+ 0, 281, :_reduce_376,
+ 6, 282, :_reduce_377,
+ 8, 282, :_reduce_378,
+ 4, 282, :_reduce_379,
+ 6, 282, :_reduce_380,
+ 4, 282, :_reduce_381,
+ 2, 282, :_reduce_none,
+ 6, 282, :_reduce_383,
+ 2, 282, :_reduce_384,
+ 4, 282, :_reduce_385,
+ 6, 282, :_reduce_386,
+ 2, 282, :_reduce_387,
+ 4, 282, :_reduce_388,
+ 2, 282, :_reduce_389,
+ 4, 282, :_reduce_390,
+ 1, 282, :_reduce_none,
+ 0, 286, :_reduce_392,
+ 1, 286, :_reduce_393,
+ 3, 287, :_reduce_394,
+ 4, 287, :_reduce_395,
+ 1, 288, :_reduce_396,
+ 4, 288, :_reduce_397,
+ 1, 289, :_reduce_398,
+ 3, 289, :_reduce_399,
+ 1, 290, :_reduce_400,
+ 1, 290, :_reduce_none,
+ 0, 294, :_reduce_402,
+ 0, 295, :_reduce_403,
+ 4, 247, :_reduce_404,
+ 4, 292, :_reduce_405,
+ 1, 292, :_reduce_406,
+ 0, 298, :_reduce_407,
+ 4, 293, :_reduce_408,
+ 0, 299, :_reduce_409,
+ 4, 293, :_reduce_410,
+ 0, 301, :_reduce_411,
+ 4, 297, :_reduce_412,
+ 2, 191, :_reduce_413,
+ 4, 191, :_reduce_414,
+ 5, 191, :_reduce_415,
+ 5, 191, :_reduce_416,
+ 2, 246, :_reduce_417,
+ 4, 246, :_reduce_418,
+ 4, 246, :_reduce_419,
+ 3, 246, :_reduce_420,
+ 3, 246, :_reduce_421,
+ 3, 246, :_reduce_422,
+ 2, 246, :_reduce_423,
+ 1, 246, :_reduce_424,
+ 4, 246, :_reduce_425,
+ 0, 303, :_reduce_426,
+ 4, 245, :_reduce_427,
+ 0, 304, :_reduce_428,
+ 4, 245, :_reduce_429,
+ 0, 305, :_reduce_430,
+ 3, 196, :_reduce_431,
+ 0, 306, :_reduce_432,
+ 0, 307, :_reduce_433,
+ 4, 300, :_reduce_434,
+ 5, 250, :_reduce_435,
+ 1, 308, :_reduce_436,
+ 1, 308, :_reduce_none,
+ 0, 311, :_reduce_438,
+ 0, 312, :_reduce_439,
+ 7, 251, :_reduce_440,
+ 1, 310, :_reduce_441,
+ 1, 310, :_reduce_none,
+ 1, 309, :_reduce_443,
+ 3, 309, :_reduce_444,
+ 3, 309, :_reduce_445,
+ 1, 313, :_reduce_none,
+ 2, 313, :_reduce_447,
+ 3, 313, :_reduce_448,
+ 1, 313, :_reduce_449,
+ 1, 313, :_reduce_450,
+ 1, 184, :_reduce_none,
+ 3, 317, :_reduce_452,
+ 1, 317, :_reduce_none,
+ 3, 319, :_reduce_454,
+ 1, 319, :_reduce_none,
+ 1, 321, :_reduce_456,
+ 1, 322, :_reduce_457,
+ 1, 320, :_reduce_none,
+ 4, 320, :_reduce_459,
+ 4, 320, :_reduce_460,
+ 3, 320, :_reduce_461,
+ 4, 320, :_reduce_462,
+ 4, 320, :_reduce_463,
+ 3, 320, :_reduce_464,
+ 0, 326, :_reduce_465,
+ 4, 320, :_reduce_466,
+ 2, 320, :_reduce_467,
+ 0, 327, :_reduce_468,
+ 4, 320, :_reduce_469,
+ 2, 320, :_reduce_470,
+ 0, 328, :_reduce_471,
+ 4, 320, :_reduce_472,
+ 1, 314, :_reduce_473,
+ 1, 314, :_reduce_474,
+ 2, 314, :_reduce_475,
+ 3, 314, :_reduce_476,
+ 5, 314, :_reduce_477,
+ 2, 314, :_reduce_478,
+ 4, 314, :_reduce_479,
+ 1, 314, :_reduce_none,
+ 2, 329, :_reduce_481,
+ 3, 329, :_reduce_482,
+ 2, 315, :_reduce_483,
+ 4, 315, :_reduce_484,
+ 1, 315, :_reduce_485,
+ 3, 315, :_reduce_486,
+ 1, 331, :_reduce_487,
+ 3, 331, :_reduce_488,
+ 1, 330, :_reduce_none,
+ 3, 316, :_reduce_490,
+ 1, 316, :_reduce_491,
+ 2, 316, :_reduce_492,
+ 1, 316, :_reduce_493,
+ 3, 316, :_reduce_494,
+ 1, 316, :_reduce_495,
+ 1, 332, :_reduce_496,
+ 3, 332, :_reduce_497,
+ 2, 335, :_reduce_498,
+ 1, 335, :_reduce_499,
+ 1, 336, :_reduce_500,
+ 3, 336, :_reduce_501,
+ 2, 333, :_reduce_502,
+ 1, 333, :_reduce_503,
+ 2, 334, :_reduce_504,
+ 1, 323, :_reduce_none,
+ 3, 323, :_reduce_506,
+ 3, 323, :_reduce_507,
+ 2, 323, :_reduce_508,
+ 2, 323, :_reduce_509,
+ 1, 323, :_reduce_none,
+ 1, 323, :_reduce_none,
+ 1, 323, :_reduce_none,
+ 2, 323, :_reduce_513,
+ 2, 323, :_reduce_514,
+ 1, 339, :_reduce_none,
+ 1, 339, :_reduce_none,
+ 1, 339, :_reduce_none,
+ 1, 339, :_reduce_none,
+ 1, 339, :_reduce_none,
+ 1, 339, :_reduce_none,
+ 1, 339, :_reduce_none,
+ 1, 339, :_reduce_none,
+ 1, 339, :_reduce_523,
+ 0, 341, :_reduce_524,
+ 3, 339, :_reduce_525,
+ 1, 318, :_reduce_526,
+ 2, 340, :_reduce_527,
+ 2, 324, :_reduce_528,
+ 3, 324, :_reduce_529,
+ 1, 324, :_reduce_530,
+ 6, 159, :_reduce_531,
+ 0, 159, :_reduce_532,
+ 1, 342, :_reduce_533,
+ 1, 342, :_reduce_none,
+ 1, 342, :_reduce_none,
+ 2, 343, :_reduce_536,
+ 1, 343, :_reduce_none,
+ 2, 161, :_reduce_538,
+ 1, 161, :_reduce_none,
+ 1, 235, :_reduce_none,
+ 1, 235, :_reduce_none,
+ 1, 236, :_reduce_542,
+ 1, 345, :_reduce_543,
+ 2, 345, :_reduce_544,
+ 3, 346, :_reduce_545,
+ 1, 346, :_reduce_546,
+ 1, 346, :_reduce_547,
+ 3, 237, :_reduce_548,
+ 4, 238, :_reduce_549,
+ 3, 239, :_reduce_550,
+ 0, 349, :_reduce_551,
+ 3, 349, :_reduce_552,
+ 1, 350, :_reduce_553,
+ 2, 350, :_reduce_554,
+ 3, 241, :_reduce_555,
+ 0, 352, :_reduce_556,
+ 3, 352, :_reduce_557,
+ 3, 240, :_reduce_558,
+ 3, 242, :_reduce_559,
+ 0, 353, :_reduce_560,
+ 3, 353, :_reduce_561,
+ 0, 354, :_reduce_562,
+ 3, 354, :_reduce_563,
+ 0, 337, :_reduce_564,
+ 2, 337, :_reduce_565,
+ 0, 347, :_reduce_566,
+ 2, 347, :_reduce_567,
+ 0, 348, :_reduce_568,
+ 2, 348, :_reduce_569,
+ 1, 351, :_reduce_570,
+ 2, 351, :_reduce_571,
+ 0, 356, :_reduce_572,
+ 4, 351, :_reduce_573,
+ 1, 355, :_reduce_574,
+ 1, 355, :_reduce_575,
+ 1, 355, :_reduce_576,
+ 1, 355, :_reduce_none,
+ 1, 216, :_reduce_none,
+ 1, 216, :_reduce_none,
+ 1, 357, :_reduce_580,
+ 3, 358, :_reduce_581,
+ 1, 344, :_reduce_582,
+ 2, 344, :_reduce_583,
+ 1, 219, :_reduce_584,
+ 1, 219, :_reduce_585,
+ 1, 219, :_reduce_586,
+ 1, 219, :_reduce_587,
+ 1, 209, :_reduce_588,
+ 1, 209, :_reduce_589,
+ 1, 209, :_reduce_590,
+ 1, 209, :_reduce_591,
+ 1, 209, :_reduce_592,
+ 1, 210, :_reduce_593,
+ 1, 210, :_reduce_594,
+ 1, 210, :_reduce_595,
+ 1, 210, :_reduce_596,
+ 1, 210, :_reduce_597,
+ 1, 210, :_reduce_598,
+ 1, 210, :_reduce_599,
+ 1, 243, :_reduce_600,
+ 1, 243, :_reduce_601,
+ 1, 176, :_reduce_602,
+ 1, 176, :_reduce_603,
+ 1, 181, :_reduce_604,
+ 1, 181, :_reduce_605,
+ 0, 359, :_reduce_606,
+ 4, 254, :_reduce_607,
+ 0, 254, :_reduce_608,
+ 3, 258, :_reduce_609,
+ 5, 258, :_reduce_610,
+ 3, 258, :_reduce_611,
+ 0, 361, :_reduce_612,
+ 3, 258, :_reduce_613,
+ 4, 360, :_reduce_614,
+ 2, 360, :_reduce_615,
+ 2, 360, :_reduce_616,
+ 2, 360, :_reduce_617,
+ 1, 360, :_reduce_618,
+ 2, 363, :_reduce_619,
+ 0, 363, :_reduce_620,
+ 6, 296, :_reduce_621,
+ 8, 296, :_reduce_622,
+ 4, 296, :_reduce_623,
+ 6, 296, :_reduce_624,
+ 4, 296, :_reduce_625,
+ 6, 296, :_reduce_626,
+ 2, 296, :_reduce_627,
+ 4, 296, :_reduce_628,
+ 6, 296, :_reduce_629,
+ 2, 296, :_reduce_630,
+ 4, 296, :_reduce_631,
+ 2, 296, :_reduce_632,
+ 4, 296, :_reduce_633,
+ 1, 296, :_reduce_634,
+ 0, 296, :_reduce_635,
+ 1, 230, :_reduce_636,
+ 1, 291, :_reduce_637,
+ 1, 291, :_reduce_638,
+ 1, 291, :_reduce_639,
+ 1, 291, :_reduce_640,
+ 1, 271, :_reduce_none,
+ 1, 271, :_reduce_642,
+ 1, 365, :_reduce_643,
+ 1, 366, :_reduce_644,
+ 3, 366, :_reduce_645,
+ 1, 283, :_reduce_646,
+ 3, 283, :_reduce_647,
+ 1, 367, :_reduce_648,
+ 2, 368, :_reduce_649,
+ 1, 368, :_reduce_650,
+ 2, 369, :_reduce_651,
+ 1, 369, :_reduce_652,
+ 1, 276, :_reduce_653,
+ 3, 276, :_reduce_654,
+ 1, 362, :_reduce_655,
+ 3, 362, :_reduce_656,
+ 1, 338, :_reduce_none,
+ 1, 338, :_reduce_none,
+ 2, 279, :_reduce_659,
+ 2, 277, :_reduce_660,
+ 1, 277, :_reduce_661,
+ 3, 370, :_reduce_662,
+ 3, 371, :_reduce_663,
+ 1, 284, :_reduce_664,
+ 3, 284, :_reduce_665,
+ 1, 364, :_reduce_666,
+ 3, 364, :_reduce_667,
+ 1, 372, :_reduce_none,
+ 1, 372, :_reduce_none,
+ 2, 285, :_reduce_670,
+ 1, 285, :_reduce_671,
+ 1, 373, :_reduce_none,
+ 1, 373, :_reduce_none,
+ 2, 280, :_reduce_674,
+ 2, 278, :_reduce_675,
+ 0, 278, :_reduce_676,
+ 1, 259, :_reduce_none,
+ 3, 259, :_reduce_678,
+ 0, 244, :_reduce_679,
+ 2, 244, :_reduce_none,
+ 1, 228, :_reduce_681,
+ 3, 228, :_reduce_682,
+ 3, 374, :_reduce_683,
+ 2, 374, :_reduce_684,
+ 4, 374, :_reduce_685,
+ 2, 374, :_reduce_686,
+ 1, 199, :_reduce_none,
+ 1, 199, :_reduce_none,
+ 1, 199, :_reduce_none,
+ 1, 193, :_reduce_none,
+ 1, 193, :_reduce_none,
+ 1, 193, :_reduce_none,
+ 1, 193, :_reduce_none,
+ 1, 302, :_reduce_none,
+ 1, 302, :_reduce_none,
+ 1, 302, :_reduce_none,
+ 1, 192, :_reduce_none,
+ 1, 192, :_reduce_none,
+ 1, 180, :_reduce_699,
+ 1, 180, :_reduce_700,
+ 0, 152, :_reduce_none,
+ 1, 152, :_reduce_none,
+ 0, 182, :_reduce_none,
+ 1, 182, :_reduce_none,
+ 2, 204, :_reduce_705,
+ 2, 179, :_reduce_706,
+ 2, 325, :_reduce_707,
+ 0, 227, :_reduce_none,
+ 1, 227, :_reduce_none,
+ 1, 227, :_reduce_none,
+ 1, 255, :_reduce_711,
+ 1, 255, :_reduce_none,
+ 1, 154, :_reduce_none,
+ 2, 154, :_reduce_none,
+ 0, 225, :_reduce_715 ]
+
+racc_reduce_n = 716
+
+racc_shift_n = 1194
+
+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",
+ "@1",
+ "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",
+ "@2",
+ "command_rhs",
+ "var_lhs",
+ "primary_value",
+ "opt_call_args",
+ "rbracket",
+ "call_op",
+ "backref",
+ "opt_nl",
+ "arg",
+ "p_expr",
+ "@3",
+ "expr_value_do",
+ "do",
+ "@4",
+ "command",
+ "block_command",
+ "block_call",
+ "dot_or_colon",
+ "operation2",
+ "command_args",
+ "cmd_brace_block",
+ "brace_body",
+ "fcall",
+ "@5",
+ "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",
+ "@6",
+ "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",
+ "@7",
+ "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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "k_def",
+ "f_arglist",
+ "singleton",
+ "@8",
+ "@9",
+ "@10",
+ "@11",
+ "@12",
+ "@13",
+ "@14",
+ "@15",
+ "@16",
+ "@17",
+ "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",
+ "@18",
+ "@19",
+ "f_args",
+ "do_block",
+ "@20",
+ "@21",
+ "do_body",
+ "@22",
+ "operation3",
+ "@23",
+ "@24",
+ "@25",
+ "@26",
+ "@27",
+ "cases",
+ "p_top_expr",
+ "p_cases",
+ "@28",
+ "@29",
+ "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",
+ "rbrace",
+ "@30",
+ "@31",
+ "@32",
+ "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",
+ "@33",
+ "exc_list",
+ "exc_var",
+ "numeric",
+ "string",
+ "string1",
+ "xstring_contents",
+ "regexp_contents",
+ "word_list",
+ "word",
+ "string_content",
+ "symbol_list",
+ "qword_list",
+ "qsym_list",
+ "string_dvar",
+ "@34",
+ "ssym",
+ "dsym",
+ "@35",
+ "args_tail",
+ "@36",
+ "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
+
+def _reduce_1(val, _values, result)
+ @current_arg_stack.push(nil)
+ @max_numparam_stack.push(static: false)
+
+ result
+end
+
+def _reduce_2(val, _values, result)
+ result = val[1]
+
+ @current_arg_stack.pop
+ @max_numparam_stack.pop
+
+ 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
+
+# reduce 8 omitted
+
+def _reduce_9(val, _values, result)
+ result = @builder.preexe(val[0], *val[1])
+
+ result
+end
+
+def _reduce_10(val, _values, result)
+ result = val
+
+ result
+end
+
+def _reduce_11(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_12(val, _values, result)
+ result = @builder.compstmt(val[0])
+
+ result
+end
+
+def _reduce_13(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_14(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_15(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_16(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+# reduce 17 omitted
+
+def _reduce_18(val, _values, result)
+ diagnostic :error, :begin_in_method, nil, val[0]
+
+ result
+end
+
+def _reduce_19(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_20(val, _values, result)
+ result = @builder.alias(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_21(val, _values, result)
+ result = @builder.alias(val[0],
+ @builder.gvar(val[1]),
+ @builder.gvar(val[2]))
+
+ result
+end
+
+def _reduce_22(val, _values, result)
+ result = @builder.alias(val[0],
+ @builder.gvar(val[1]),
+ @builder.back_ref(val[2]))
+
+ result
+end
+
+def _reduce_23(val, _values, result)
+ diagnostic :error, :nth_ref_alias, nil, val[2]
+
+ result
+end
+
+def _reduce_24(val, _values, result)
+ result = @builder.undef_method(val[0], val[1])
+
+ result
+end
+
+def _reduce_25(val, _values, result)
+ result = @builder.condition_mod(val[0], nil,
+ val[1], val[2])
+
+ result
+end
+
+def _reduce_26(val, _values, result)
+ result = @builder.condition_mod(nil, val[0],
+ val[1], val[2])
+
+ result
+end
+
+def _reduce_27(val, _values, result)
+ result = @builder.loop_mod(:while, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_28(val, _values, result)
+ result = @builder.loop_mod(:until, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_29(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_30(val, _values, result)
+ result = @builder.postexe(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+# reduce 31 omitted
+
+def _reduce_32(val, _values, result)
+ result = @builder.multi_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_33(val, _values, result)
+ result = @builder.assign(val[0], val[1],
+ @builder.array(nil, val[2], nil))
+
+ result
+end
+
+def _reduce_34(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_35(val, _values, result)
+ result = @builder.multi_assign(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 36 omitted
+
+def _reduce_37(val, _values, result)
+ result = @builder.assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_38(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_39(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_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)
+ 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)
+ 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_43(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_44(val, _values, result)
+ @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 45 omitted
+
+def _reduce_46(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 47 omitted
+
+# reduce 48 omitted
+
+def _reduce_49(val, _values, result)
+ result = @builder.logical_op(:and, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_50(val, _values, result)
+ result = @builder.logical_op(:or, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_51(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[2], nil)
+
+ result
+end
+
+def _reduce_52(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[1], nil)
+
+ result
+end
+
+def _reduce_53(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_54(val, _values, result)
+ @pattern_variables.pop
+ @context.in_kwarg = val[2]
+ if @builder.class.emit_match_pattern
+ result = @builder.match_pattern(val[0], val[1], val[3])
+ else
+ result = @builder.in_match(val[0], val[1], val[3])
+ end
+
+ result
+end
+
+# reduce 55 omitted
+
+# reduce 56 omitted
+
+def _reduce_57(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_58(val, _values, result)
+ @lexer.cond.pop
+ result = [ val[1], val[2] ]
+
+ result
+end
+
+# reduce 59 omitted
+
+# reduce 60 omitted
+
+# reduce 61 omitted
+
+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)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_64(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+# reduce 65 omitted
+
+def _reduce_66(val, _values, result)
+ result = @builder.call_method(nil, nil, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_67(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_68(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_69(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_70(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_71(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_72(val, _values, result)
+ result = @builder.keyword_cmd(:super, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_73(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_74(val, _values, result)
+ result = @builder.keyword_cmd(:return, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_75(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_76(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_77(val, _values, result)
+ result = @builder.multi_lhs(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_78(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_79(val, _values, result)
+ result = @builder.multi_lhs(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_80(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 81 omitted
+
+def _reduce_82(val, _values, result)
+ result = val[0].
+ push(val[1])
+
+ result
+end
+
+def _reduce_83(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1], val[2]))
+
+ result
+end
+
+def _reduce_84(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1], val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_85(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1]))
+
+ result
+end
+
+def _reduce_86(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1])).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_87(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_88(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_89(val, _values, result)
+ result = [ @builder.splat(val[0]) ]
+
+ result
+end
+
+def _reduce_90(val, _values, result)
+ result = [ @builder.splat(val[0]),
+ *val[2] ]
+
+ result
+end
+
+# reduce 91 omitted
+
+def _reduce_92(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_93(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_94(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_95(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_96(val, _values, result)
+ result = val[0] << val[2]
+
+ 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)
+ 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_101(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_102(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_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)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_107(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_108(val, _values, result)
+ result = @builder.index_asgn(val[0], val[1], val[2], val[3])
+
+ 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.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_112(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_fetch(val[0], val[1], val[2]))
+
+ result
+end
+
+def _reduce_113(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_global(val[0], val[1]))
+
+ result
+end
+
+def _reduce_114(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_115(val, _values, result)
+ diagnostic :error, :module_name_const, nil, val[0]
+
+ result
+end
+
+# reduce 116 omitted
+
+def _reduce_117(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_118(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_119(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 120 omitted
+
+# reduce 121 omitted
+
+# reduce 122 omitted
+
+# reduce 123 omitted
+
+# reduce 124 omitted
+
+def _reduce_125(val, _values, result)
+ result = @builder.symbol_internal(val[0])
+
+ result
+end
+
+# reduce 126 omitted
+
+def _reduce_127(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_128(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_129(val, _values, result)
+ result = val[0] << val[3]
+
+ result
+end
+
+# 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
+
+# reduce 200 omitted
+
+def _reduce_201(val, _values, result)
+ result = @builder.assign(val[0], 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.op_assign(
+ @builder.index(
+ val[0], val[1], val[2], val[3]),
+ val[4], val[5])
+
+ 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)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_207(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_208(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_209(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_210(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_211(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_212(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_213(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_214(val, _values, result)
+ result = @builder.range_inclusive(nil, val[0], val[1])
+
+ result
+end
+
+def _reduce_215(val, _values, result)
+ result = @builder.range_exclusive(nil, 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.unary_op(val[0],
+ @builder.binary_op(
+ val[1], val[2], val[3]))
+
+ 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.unary_op(val[0], val[1])
+
+ 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
+
+# reduce 229 omitted
+
+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.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_233(val, _values, result)
+ result = @builder.match_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.not_op(val[0], nil, val[1], nil)
+
+ result
+end
+
+def _reduce_236(val, _values, result)
+ result = @builder.unary_op(val[0], val[1])
+
+ 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.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_239(val, _values, result)
+ result = @builder.logical_op(:and, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_240(val, _values, result)
+ result = @builder.logical_op(:or, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_241(val, _values, result)
+ result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil)
+
+ result
+end
+
+def _reduce_242(val, _values, result)
+ result = @builder.ternary(val[0], val[1],
+ val[2], val[4], val[5])
+
+ result
+end
+
+# reduce 243 omitted
+
+# reduce 244 omitted
+
+# reduce 245 omitted
+
+# reduce 246 omitted
+
+# reduce 247 omitted
+
+def _reduce_248(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_249(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 250 omitted
+
+# reduce 251 omitted
+
+# reduce 252 omitted
+
+def _reduce_253(val, _values, result)
+ result = val[0] << @builder.associate(nil, val[2], nil)
+
+ result
+end
+
+def _reduce_254(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+
+ result
+end
+
+# reduce 255 omitted
+
+def _reduce_256(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_257(val, _values, result)
+ result = val
+
+ result
+end
+
+def _reduce_258(val, _values, result)
+ unless @static_env.declared_forward_args?
+ diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3]
+ end
+
+ result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]]
+
+ result
+end
+
+def _reduce_259(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_260(val, _values, result)
+ result = [ nil, [], nil ]
+
+ result
+end
+
+# reduce 261 omitted
+
+def _reduce_262(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 263 omitted
+
+# reduce 264 omitted
+
+def _reduce_265(val, _values, result)
+ result = val[0] << @builder.associate(nil, val[2], nil)
+
+ result
+end
+
+def _reduce_266(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+
+ result
+end
+
+def _reduce_267(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_268(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_269(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+ result.concat(val[1])
+
+ result
+end
+
+def _reduce_270(val, _values, result)
+ assocs = @builder.associate(nil, val[2], nil)
+ result = val[0] << assocs
+ result.concat(val[3])
+
+ result
+end
+
+def _reduce_271(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_272(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_273(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_274(val, _values, result)
+ result = @builder.block_pass(val[0], val[1])
+
+ result
+end
+
+def _reduce_275(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_276(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_277(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_278(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_279(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_280(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_281(val, _values, result)
+ result = @builder.array(nil, val[0], nil)
+
+ result
+end
+
+# reduce 282 omitted
+
+def _reduce_283(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_284(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_285(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+# reduce 286 omitted
+
+# reduce 287 omitted
+
+# reduce 288 omitted
+
+# reduce 289 omitted
+
+# reduce 290 omitted
+
+# reduce 291 omitted
+
+# reduce 292 omitted
+
+# reduce 293 omitted
+
+# reduce 294 omitted
+
+# reduce 295 omitted
+
+def _reduce_296(val, _values, result)
+ result = @builder.call_method(nil, nil, val[0])
+
+ result
+end
+
+def _reduce_297(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_298(val, _values, result)
+ @lexer.cmdarg.pop
+
+ result = @builder.begin_keyword(val[0], val[2], 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], val[1], val[3])
+
+ result
+end
+
+def _reduce_301(val, _values, result)
+ @lexer.state = :expr_endarg
+
+ result
+end
+
+def _reduce_302(val, _values, result)
+ result = @builder.begin(val[0], nil, val[3])
+
+ result
+end
+
+def _reduce_303(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_304(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_305(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_306(val, _values, result)
+ result = @builder.array(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_307(val, _values, result)
+ result = @builder.associate(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_308(val, _values, result)
+ result = @builder.keyword_cmd(:return, val[0])
+
+ result
+end
+
+def _reduce_309(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_310(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2])
+
+ result
+end
+
+def _reduce_311(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0])
+
+ result
+end
+
+def _reduce_312(val, _values, result)
+ result = @builder.keyword_cmd(:defined?, val[0],
+ val[2], [ val[3] ], val[4])
+
+ result
+end
+
+def _reduce_313(val, _values, result)
+ result = @builder.not_op(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_314(val, _values, result)
+ result = @builder.not_op(val[0], val[1], nil, val[2])
+
+ result
+end
+
+def _reduce_315(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 316 omitted
+
+def _reduce_317(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_318(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_320(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_321(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_322(val, _values, result)
+ result = @builder.loop(:while, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ result = @builder.loop(:until, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_324(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_325(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_326(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_327(val, _values, result)
+ result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5])
+
+ result
+end
+
+def _reduce_328(val, _values, result)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_329(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_330(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_331(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_332(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_333(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_334(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+ @current_arg_stack.push(nil)
+
+ result
+end
+
+def _reduce_335(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_336(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_337(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+ @current_arg_stack.push(nil)
+
+ result
+end
+
+def _reduce_338(val, _values, result)
+ result = @builder.def_singleton(val[0], val[1], val[2],
+ val[4], val[6], val[7], val[8])
+
+ local_pop
+ @context.in_def = val[5].in_def
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_339(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_340(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_341(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_342(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 343 omitted
+
+def _reduce_344(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_345(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_346(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_347(val, _values, result)
+ if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda)
+ diagnostic :error, :invalid_return, nil, val[0]
+ end
+
+ result
+end
+
+# reduce 348 omitted
+
+# reduce 349 omitted
+
+def _reduce_350(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 351 omitted
+
+# reduce 352 omitted
+
+# reduce 353 omitted
+
+def _reduce_354(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 355 omitted
+
+def _reduce_356(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 357 omitted
+
+# reduce 358 omitted
+
+def _reduce_359(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_360(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_361(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_362(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 363 omitted
+
+def _reduce_364(val, _values, result)
+ result = val[0].
+ push(val[2])
+
+ result
+end
+
+def _reduce_365(val, _values, result)
+ result = val[0].
+ push(val[2]).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_366(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_367(val, _values, result)
+ result = [ val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_368(val, _values, result)
+ result = @builder.restarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_369(val, _values, result)
+ result = @builder.restarg(val[0])
+
+ result
+end
+
+def _reduce_370(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_371(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_372(val, _values, result)
+ result = val[0].concat(val[1])
+
+ 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] ]
+
+ result
+end
+
+def _reduce_375(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_376(val, _values, result)
+ result = []
+
+ result
+end
+
+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)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ 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[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 382 omitted
+
+def _reduce_383(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_384(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_385(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 391 omitted
+
+def _reduce_392(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_393(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_394(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_395(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_396(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 401 omitted
+
+def _reduce_402(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+
+ result
+end
+
+def _reduce_403(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_404(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_405(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_406(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_407(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_408(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_409(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_410(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_411(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_412(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_413(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_414(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_415(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_416(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_417(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_418(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_419(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_420(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_421(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_422(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_423(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_424(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_426(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_427(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_428(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_429(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_430(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+
+ result
+end
+
+def _reduce_431(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_432(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+
+ result
+end
+
+def _reduce_433(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_434(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_435(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 437 omitted
+
+def _reduce_438(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+ @pattern_hash_keys.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_439(val, _values, result)
+ @pattern_hash_keys.pop
+ @pattern_variables.pop
+ @context.in_kwarg = val[1]
+
+ result
+end
+
+def _reduce_440(val, _values, result)
+ result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]),
+ *val[6] ]
+
+ result
+end
+
+def _reduce_441(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 442 omitted
+
+def _reduce_443(val, _values, result)
+ result = [ val[0], nil ]
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ result = [ val[0], @builder.if_guard(val[1], val[2]) ]
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = [ val[0], @builder.unless_guard(val[1], val[2]) ]
+
+ result
+end
+
+# reduce 446 omitted
+
+def _reduce_447(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], val[1])
+ result = @builder.array_pattern(nil, [ item ], nil)
+
+ result
+end
+
+def _reduce_448(val, _values, result)
+ result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil)
+
+ result
+end
+
+def _reduce_449(val, _values, result)
+ result = @builder.array_pattern(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_450(val, _values, result)
+ result = @builder.hash_pattern(nil, val[0], nil)
+
+ result
+end
+
+# reduce 451 omitted
+
+def _reduce_452(val, _values, result)
+ result = @builder.match_as(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 453 omitted
+
+def _reduce_454(val, _values, result)
+ result = @builder.match_alt(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 455 omitted
+
+def _reduce_456(val, _values, result)
+ result = val[0]
+ @pattern_hash_keys.push
+
+ result
+end
+
+def _reduce_457(val, _values, result)
+ result = val[0]
+ @pattern_hash_keys.push
+
+ result
+end
+
+# reduce 458 omitted
+
+def _reduce_459(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_460(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_461(val, _values, result)
+ pattern = @builder.array_pattern(val[1], nil, val[2])
+ result = @builder.const_pattern(val[0], val[1], pattern, val[2])
+
+ result
+end
+
+def _reduce_462(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_463(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_464(val, _values, result)
+ pattern = @builder.array_pattern(val[1], nil, val[2])
+ result = @builder.const_pattern(val[0], val[1], pattern, val[2])
+
+ 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.array_pattern(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_467(val, _values, result)
+ result = @builder.array_pattern(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ @pattern_hash_keys.push
+ result = @context.in_kwarg
+ @context.in_kwarg = false
+
+ result
+end
+
+def _reduce_469(val, _values, result)
+ @pattern_hash_keys.pop
+ @context.in_kwarg = val[1]
+ result = @builder.hash_pattern(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_470(val, _values, result)
+ result = @builder.hash_pattern(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_471(val, _values, result)
+ @pattern_hash_keys.push
+
+ result
+end
+
+def _reduce_472(val, _values, result)
+ @pattern_hash_keys.pop
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_473(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_474(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_475(val, _values, result)
+ result = [ *val[0], val[1] ]
+
+ result
+end
+
+def _reduce_476(val, _values, result)
+ match_rest = @builder.match_rest(val[1], val[2])
+ result = [ *val[0], match_rest ]
+
+ result
+end
+
+def _reduce_477(val, _values, result)
+ match_rest = @builder.match_rest(val[1], val[2])
+ result = [ *val[0], match_rest, *val[4] ]
+
+ result
+end
+
+def _reduce_478(val, _values, result)
+ result = [ *val[0], @builder.match_rest(val[1]) ]
+
+ result
+end
+
+def _reduce_479(val, _values, result)
+ result = [ *val[0], @builder.match_rest(val[1]), *val[3] ]
+
+ result
+end
+
+# reduce 480 omitted
+
+def _reduce_481(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], val[1])
+ result = [ item ]
+
+ result
+end
+
+def _reduce_482(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], val[2])
+ result = [ *val[0], last_item ]
+
+ result
+end
+
+def _reduce_483(val, _values, result)
+ match_rest = @builder.match_rest(val[0], val[1])
+ result = [ match_rest ]
+
+ result
+end
+
+def _reduce_484(val, _values, result)
+ match_rest = @builder.match_rest(val[0], val[1])
+ result = [ match_rest, *val[3] ]
+
+ result
+end
+
+def _reduce_485(val, _values, result)
+ match_rest = @builder.match_rest(val[0])
+ result = [ match_rest ]
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ match_rest = @builder.match_rest(val[0])
+ result = [ match_rest, *val[2] ]
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ result = [ *val[0], val[2] ]
+
+ result
+end
+
+# reduce 489 omitted
+
+def _reduce_490(val, _values, result)
+ result = [ *val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_491(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_492(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_493(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = [ *val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = [ *val[0], *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)
+ result = @builder.match_pair(*val[0], val[1])
+
+ result
+end
+
+def _reduce_499(val, _values, result)
+ result = @builder.match_label(*val[0])
+
+ result
+end
+
+def _reduce_500(val, _values, result)
+ result = [:label, val[0]]
+
+ result
+end
+
+def _reduce_501(val, _values, result)
+ result = [:quoted, [val[0], val[1], val[2]]]
+
+ result
+end
+
+def _reduce_502(val, _values, result)
+ result = [ @builder.match_rest(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_503(val, _values, result)
+ result = [ @builder.match_rest(val[0], nil) ]
+
+ result
+end
+
+def _reduce_504(val, _values, result)
+ result = [ @builder.match_nil_pattern(val[0], val[1]) ]
+
+ result
+end
+
+# reduce 505 omitted
+
+def _reduce_506(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_507(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_509(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], nil)
+
+ result
+end
+
+# reduce 510 omitted
+
+# reduce 511 omitted
+
+# reduce 512 omitted
+
+def _reduce_513(val, _values, result)
+ result = @builder.range_inclusive(nil, val[0], val[1])
+
+ result
+end
+
+def _reduce_514(val, _values, result)
+ result = @builder.range_exclusive(nil, val[0], val[1])
+
+ result
+end
+
+# reduce 515 omitted
+
+# reduce 516 omitted
+
+# reduce 517 omitted
+
+# reduce 518 omitted
+
+# reduce 519 omitted
+
+# reduce 520 omitted
+
+# reduce 521 omitted
+
+# reduce 522 omitted
+
+def _reduce_523(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_524(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_525(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_526(val, _values, result)
+ result = @builder.assignable(@builder.match_var(val[0]))
+
+ result
+end
+
+def _reduce_527(val, _values, result)
+ name = val[1][0]
+ unless static_env.declared?(name)
+ diagnostic :error, :undefined_lvar, { :name => name }, val[1]
+ end
+
+ lvar = @builder.accessible(@builder.ident(val[1]))
+ result = @builder.pin(val[0], lvar)
+
+ result
+end
+
+def _reduce_528(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_529(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_530(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_531(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_532(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_533(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 534 omitted
+
+# reduce 535 omitted
+
+def _reduce_536(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 537 omitted
+
+def _reduce_538(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 539 omitted
+
+# reduce 540 omitted
+
+# reduce 541 omitted
+
+def _reduce_542(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_543(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_544(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_545(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_546(val, _values, result)
+ string = @builder.string(val[0])
+ result = @builder.dedent_string(string, @lexer.dedent_level)
+
+ result
+end
+
+def _reduce_547(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_548(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_549(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ 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 = []
+
+ result
+end
+
+def _reduce_552(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_553(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_554(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_555(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_556(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_557(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_558(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_559(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_560(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_561(val, _values, result)
+ result = val[0] << @builder.string_internal(val[1])
+
+ result
+end
+
+def _reduce_562(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_563(val, _values, result)
+ result = val[0] << @builder.symbol_internal(val[1])
+
+ result
+end
+
+def _reduce_564(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_565(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_566(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_567(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_568(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_569(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_570(val, _values, result)
+ result = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_571(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_572(val, _values, result)
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+
+ result
+end
+
+def _reduce_573(val, _values, result)
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_574(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_575(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_576(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 577 omitted
+
+# reduce 578 omitted
+
+# reduce 579 omitted
+
+def _reduce_580(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_581(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_582(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_583(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_584(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_585(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_586(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.rational(val[0])
+
+ result
+end
+
+def _reduce_587(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.complex(val[0])
+
+ result
+end
+
+def _reduce_588(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_589(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_590(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_591(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_592(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_593(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_594(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_595(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_596(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_597(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_598(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_599(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_600(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_601(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_602(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_603(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_604(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_605(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_606(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_607(val, _values, result)
+ result = [ val[0], val[2] ]
+
+ result
+end
+
+def _reduce_608(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_609(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_610(val, _values, result)
+ args = [ *val[1], @builder.forward_arg(val[3]) ]
+ result = @builder.args(val[0], args, val[4])
+ @static_env.declare_forward_args
+
+ result
+end
+
+def _reduce_611(val, _values, result)
+ result = @builder.forward_only_args(val[0], val[1], val[2])
+ @static_env.declare_forward_args
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_612(val, _values, result)
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_613(val, _values, result)
+ @context.in_kwarg = val[0]
+ result = @builder.args(nil, val[1], nil)
+
+ 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[1])
+
+ result
+end
+
+def _reduce_616(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_617(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_618(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_619(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_620(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_621(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_622(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_623(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_624(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_625(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_626(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_627(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_628(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_629(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_630(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_631(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_632(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_633(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_634(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_635(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_636(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_637(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_638(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_639(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_640(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 641 omitted
+
+def _reduce_642(val, _values, result)
+ @static_env.declare val[0][0]
+
+ @max_numparam_stack.has_ordinary_params!
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_643(val, _values, result)
+ @current_arg_stack.set(val[0][0])
+ result = val[0]
+
+ result
+end
+
+def _reduce_644(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_645(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], 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
+
+def _reduce_648(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_649(val, _values, result)
+ @current_arg_stack.set(nil)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_650(val, _values, result)
+ @current_arg_stack.set(nil)
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_651(val, _values, result)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_652(val, _values, result)
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_653(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_654(val, _values, result)
+ result = val[0] << 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
+
+# reduce 657 omitted
+
+# reduce 658 omitted
+
+def _reduce_659(val, _values, result)
+ result = [ @builder.kwnilarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_660(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_661(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ result
+end
+
+def _reduce_662(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_663(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_664(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_665(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_666(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_667(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 668 omitted
+
+# reduce 669 omitted
+
+def _reduce_670(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_671(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 672 omitted
+
+# reduce 673 omitted
+
+def _reduce_674(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_675(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_676(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 677 omitted
+
+def _reduce_678(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_679(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 680 omitted
+
+def _reduce_681(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_682(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_683(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_684(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_685(val, _values, result)
+ result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_686(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# reduce 687 omitted
+
+# reduce 688 omitted
+
+# reduce 689 omitted
+
+# reduce 690 omitted
+
+# reduce 691 omitted
+
+# reduce 692 omitted
+
+# reduce 693 omitted
+
+# reduce 694 omitted
+
+# reduce 695 omitted
+
+# reduce 696 omitted
+
+# reduce 697 omitted
+
+# reduce 698 omitted
+
+def _reduce_699(val, _values, result)
+ result = [:dot, val[0][1]]
+
+ result
+end
+
+def _reduce_700(val, _values, result)
+ result = [:anddot, val[0][1]]
+
+ result
+end
+
+# reduce 701 omitted
+
+# reduce 702 omitted
+
+# reduce 703 omitted
+
+# reduce 704 omitted
+
+def _reduce_705(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_706(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_707(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 708 omitted
+
+# reduce 709 omitted
+
+# reduce 710 omitted
+
+def _reduce_711(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 712 omitted
+
+# reduce 713 omitted
+
+# reduce 714 omitted
+
+def _reduce_715(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby27
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby28.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby28.rb
new file mode 100644
index 000000000..9e077816c
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby28.rb
@@ -0,0 +1,8047 @@
+# -*- 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 Ruby28 < Parser::Base
+
+
+ def version
+ 28
+ end
+
+ def default_encoding
+ Encoding::UTF_8
+ end
+##### State transition tables begin ###
+
+clist = [
+'-704,618,-119,-117,299,-122,965,-704,-704,-704,299,-120,870,-704,-704',
+'1078,-704,1083,-121,659,-116,870,219,220,-704,-704,618,-603,805,362',
+'299,299,-713,1077,-603,661,-704,-704,618,-704,-704,-704,-704,-704,788',
+'-604,219,220,230,231,618,-114,-604,811,618,556,219,220,-500,962,219',
+'220,789,974,231,618,-704,-704,-704,-704,-704,-704,-704,-704,-704,-704',
+'-704,-704,-704,-704,-118,-115,-704,-704,-704,658,686,-704,-701,231,-704',
+'298,-603,-704,294,294,625,298,-704,1084,-704,660,-704,-704,810,-704',
+'-704,-704,-704,-704,-604,-704,-704,-704,-121,964,231,298,298,123,-119',
+'-117,-116,-122,122,-119,-117,-704,-122,-120,-704,-704,123,-109,-120',
+'-704,-121,122,-116,-704,231,-121,-704,-116,123,-118,-704,-704,-704,122',
+'231,-704,-704,-704,123,-704,123,-700,-100,122,-612,122,231,-704,-704',
+'-704,-704,-704,123,-114,-86,807,123,122,-114,-704,-704,122,-704,-704',
+'-704,-704,-704,123,556,-291,954,-713,122,101,102,920,123,625,-613,481',
+'646,122,-118,-115,681,101,102,-118,-115,-704,-704,-704,-704,-704,-704',
+'-704,-704,-704,-704,-704,-704,-704,-704,-114,230,-704,-704,-704,680',
+'867,-704,231,866,-704,646,-112,-704,-704,646,-704,646,-704,646,-704',
+'231,-704,-704,-121,-704,-704,-704,-704,-704,-316,-704,-704,-704,-115',
+'-122,865,-316,-316,-316,-119,648,647,-316,-316,806,-316,-704,103,104',
+'-704,-704,-704,-704,-316,-704,-605,-704,1137,-432,103,104,-704,-605',
+'-117,-118,-316,-316,-119,-316,-316,-316,-316,-316,-713,648,647,644,362',
+'648,647,648,647,648,647,644,852,483,646,836,631,838,745,482,895,-117',
+'-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316',
+'231,-432,-316,-316,-316,228,685,-316,-432,920,-316,-605,646,-316,226',
+'870,801,-432,-316,810,-316,673,-316,-316,646,-316,-316,-316,-316,-316',
+'671,-316,-704,-316,681,-116,-432,228,294,-704,-704,-704,648,647,644',
+'-704,-704,-316,-704,876,-316,-316,-113,-316,872,-316,-704,-704,873,1137',
+'973,1124,-316,631,-122,-120,-432,895,-704,-704,480,-704,-704,-704,-704',
+'-704,648,647,653,227,583,-110,580,579,578,588,581,226,648,647,651,553',
+'123,-119,292,591,-122,122,-704,-704,-704,-704,-704,-704,-704,-704,-704',
+'-704,-704,-704,-704,-704,798,680,-704,-704,-704,586,686,-704,631,231',
+'-704,646,632,-704,596,595,599,598,-704,646,-704,592,-704,-704,646,-704',
+'-704,-704,-704,-704,-598,-704,-704,-704,852,-612,123,-598,-598,-598',
+'227,122,-598,-598,-598,226,-598,-704,-108,796,-704,-704,292,-704,-598',
+'-704,-598,-598,-598,123,-117,577,-704,123,122,-118,-598,-598,122,-598',
+'-598,-598,-598,-598,720,648,647,657,795,-316,-598,-107,-105,648,647',
+'662,-316,-598,648,647,649,-701,793,-116,-114,-316,-598,-598,-598,-598',
+'-598,-598,-598,-598,-598,-598,-598,-598,-598,-598,227,-601,-598,-598',
+'-598,-316,-598,-598,-601,791,-598,231,-316,-598,-598,231,-598,-701,-598',
+'790,-598,-316,-598,-598,1000,-598,-598,-598,-598,-598,-608,-598,-601',
+'-598,-316,-598,1001,-608,1002,-601,-601,-601,269,270,-601,-601,-601',
+'-598,-601,1005,-598,-598,-598,-598,779,-598,-601,-598,-601,-601,-601',
+'-111,-598,777,610,-598,-601,609,-601,-601,-316,-601,-601,-601,-601,-601',
+'986,-610,268,267,775,226,-607,-609,-610,-606,591,774,1152,-607,-609',
+'610,-606,-610,612,-608,907,636,-601,-601,-601,-601,-601,-601,-601,-601',
+'-601,-601,-601,-601,-601,-601,1011,226,-601,-601,-601,231,-601,-601',
+'225,771,-601,231,592,-601,-601,759,-601,223,-601,768,-601,-105,-601',
+'-601,1004,-601,-601,-601,-601,-601,-610,-601,-316,-601,227,-607,-609',
+'-613,-606,-316,-316,-316,87,427,-316,-316,-316,-601,-316,1029,-601,-601',
+'-601,-601,88,-601,-316,-601,-316,-316,-316,-289,-601,1033,89,-601,227',
+'610,-316,-316,612,-316,-316,-316,-316,-316,231,424,1036,226,1038,226',
+'426,425,-106,774,1157,583,1152,580,579,578,789,581,1041,1155,-115,636',
+'-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316',
+'1043,986,-316,-316,-316,231,868,-316,1174,1043,-316,591,781,-316,-316',
+'231,-316,231,-316,414,-316,785,-316,-316,1051,-316,-316,-316,-316,-316',
+'-316,-316,227,-316,227,1122,1123,-316,-316,-316,599,598,610,-316,-316',
+'612,-316,-316,1053,592,-316,-316,-316,-316,-316,-316,766,-316,949,920',
+'765,1004,-316,949,920,-120,-316,-316,559,-316,-316,-316,-316,-316,890',
+'891,219,220,583,226,580,579,578,588,581,583,628,580,579,578,1186,581',
+'1062,591,1063,626,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316',
+'-316,-316,-316,-316,219,220,-316,-316,-316,586,685,-316,362,1068,-316',
+'1069,781,-316,596,595,599,598,-316,1070,-316,592,-316,-316,-292,-316',
+'-316,-316,-316,-316,588,-316,252,-316,227,362,226,231,231,231,591,-317',
+'-351,634,231,1074,759,-316,-317,-351,-316,-316,636,-111,231,-316,226',
+'-317,-351,231,231,577,-316,558,870,-120,321,77,78,24,9,65,479,599,598',
+'71,72,1082,592,563,75,-700,73,74,76,33,34,79,80,126,127,128,129,130',
+'81,31,30,111,110,112,113,227,562,21,231,231,-317,-351,1091,8,51,323',
+'10,115,114,116,105,64,107,106,108,227,109,117,118,226,101,102,47,48',
+'46,-317,478,-700,774,-611,1094,1097,-317,1099,-700,479,-611,1101,231',
+'-700,1103,-317,748,-700,43,-611,-100,325,350,231,66,67,-316,603,68,231',
+'38,1118,1119,-316,50,231,-700,349,-701,231,830,831,-316,22,832,117,118',
+'733,99,87,90,91,1128,92,94,93,95,231,227,-106,288,88,98,870,-317,613',
+'-700,1138,-611,82,1140,89,103,104,252,1150,44,45,321,77,78,24,9,65,252',
+'252,1153,71,72,252,1158,-316,75,-697,73,74,76,33,34,79,80,126,127,128',
+'129,130,81,31,30,111,110,112,113,614,583,21,580,579,578,1159,581,8,51',
+'323,10,115,114,116,105,64,107,106,108,1043,109,117,118,-307,101,102',
+'47,48,46,226,-307,-598,1043,-307,1043,222,548,781,-598,-307,-307,221',
+'1171,-697,1172,546,785,-598,43,-307,530,36,1176,774,66,67,-611,1180',
+'68,1182,38,1184,1186,-611,50,1186,-697,690,252,765,218,294,-611,22,625',
+'217,416,1119,99,87,90,91,216,92,94,93,95,1200,-307,-113,1176,88,98,679',
+'227,678,-598,231,-307,82,249,89,103,104,251,250,44,45,321,77,78,24,9',
+'65,674,670,-701,71,72,-700,231,-611,75,-698,73,74,76,33,34,79,80,126',
+'127,128,129,130,81,31,30,111,110,112,113,215,583,21,580,579,578,132',
+'581,8,51,323,10,115,114,116,105,64,107,106,108,588,109,117,118,-610',
+'101,102,47,48,46,591,-610,-601,1043,-317,669,630,-289,781,-601,-610',
+'-317,667,638,-698,629,666,785,-601,43,-317,663,36,871,894,66,67,897',
+'870,68,899,38,288,599,598,50,231,-698,592,252,526,905,907,909,22,528',
+'530,514,528,99,87,90,91,514,92,94,93,95,759,-610,-112,231,88,98,530',
+'1212,294,-601,1186,-317,82,249,89,103,104,251,250,44,45,321,77,78,24',
+'9,65,294,759,514,71,72,252,132,920,75,-701,73,74,76,33,34,79,80,126',
+'127,128,129,130,81,31,30,111,110,112,113,-85,252,21,231,853,541,542',
+'-290,8,51,323,10,115,114,116,105,64,107,106,108,549,109,117,118,941',
+'101,102,47,48,46,942,231,-701,249,840,839,252,251,250,-701,247,248,920',
+'951,-701,952,835,231,-701,43,1186,1186,36,119,303,66,67,1176,231,68',
+'583,38,580,579,578,50,581,-701,249,231,,,251,250,22,247,248,,,99,87',
+'90,91,,92,94,93,95,,,,,88,98,,,,-701,,,82,,89,103,104,,,44,45,321,77',
+'78,24,9,65,,,,71,72,,,,75,-704,73,74,76,33,34,79,80,,,,,,81,31,30,111',
+'110,112,113,,583,21,580,579,578,,581,8,51,323,10,115,114,116,105,64',
+'107,106,108,,109,117,118,,101,102,47,48,46,,583,-704,580,579,578,,581',
+'781,-704,,,,,-700,,,,-704,43,,,325,,,66,67,,,68,1133,38,580,579,578',
+'50,581,-704,781,1133,,580,579,578,22,581,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,-704,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72',
+',,,75,-700,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,',
+',,,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102',
+'47,48,46,,,-700,,,,,,,-700,,,,,-700,,,,-700,43,,,36,,,66,67,,,68,,38',
+',,,50,,-700,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,-108,,,,88,98,,,,-700',
+',,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,-701,73,74',
+'76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115',
+'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,-701,,,',
+',,,-701,,,,,-701,,,,-701,43,,,36,,,66,67,,,68,,38,,,,50,,-701,,,,,,',
+'22,,,,,99,87,90,91,,92,94,93,95,-110,,,,88,98,,,,-701,,,82,,89,103,104',
+',,44,45,321,77,78,24,9,65,,,,71,72,,,,75,-704,73,74,76,33,34,79,80,',
+',,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64',
+'107,106,108,,109,117,118,,101,102,47,48,46,,,-704,,,,,,,-704,,,,,-700',
+',,,-704,43,,,36,,,66,67,,,68,,38,,,,50,,-704,,,,,,,22,,,,,99,87,90,91',
+',92,94,93,95,-109,,,,88,98,,,,-704,,,82,,89,103,104,,,44,45,321,77,78',
+'24,9,65,,,,71,72,,,,75,-704,73,74,76,33,34,79,80,,,,,,81,31,30,111,110',
+'112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117',
+'118,,101,102,47,48,46,,,-704,,,,,,,-704,,,,,-700,,,,-704,43,,,36,,,66',
+'67,,,68,,38,,,,50,,-704,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88',
+'98,,,,-704,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75',
+'-432,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8',
+'51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48',
+'46,,,-432,,,,,,,-432,,,,,,,,,-432,43,,,36,,,66,67,,,68,,38,,,,50,,-432',
+',,,,,,22,,,,,99,87,90,91,,92,94,93,95,-107,,,,88,98,,,,-432,,,82,,89',
+'103,104,,,44,45,5,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80',
+'244,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,7,10,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,47,48,46,252,256,257,258,259,269',
+'270,264,265,260,261,,245,246,,,262,263,,43,,-262,36,,,66,67,,,68,,38',
+'249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94',
+'93,95,,,,,88,98,,266,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,',
+',71,72,,,,75,,73,74,76,33,34,79,80,244,,,,,81,31,30,111,110,112,113',
+',,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,252,256,257,258,259,269,270,264,265,260,261,,245,246,,',
+'262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267',
+'253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89,103',
+'104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,',
+',,,,81,31,30,111,110,112,113,,,21,,,,,675,8,51,323,10,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,47,48,46,252,256,257,258,259,269',
+'270,264,265,260,261,,245,246,,,262,263,,43,,,36,,,66,67,,,68,,38,249',
+',255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,266,,-262,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,',
+',,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,',
+'21,,,,,675,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,',
+'101,102,47,48,46,252,256,257,258,259,269,270,264,265,260,261,,245,246',
+',,262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268',
+'267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89',
+'103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79',
+'80,,,,,,81,31,30,111,110,112,113,,,21,,,,,917,8,51,323,10,115,114,116',
+'105,64,107,106,108,,109,117,118,,101,102,47,48,46,252,256,257,258,259',
+'269,270,264,265,260,261,,245,246,,,262,263,,43,,,36,,,66,67,,,68,,38',
+'249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94',
+'93,95,,,,,88,98,,266,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,',
+',71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21',
+',,,,945,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,252,256,257,258,259,269,270,264,265,260,261,,245,246,,',
+'262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267',
+'253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89,103',
+'104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,',
+',,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64',
+'107,106,108,,109,117,118,,101,102,47,48,46,252,256,257,258,259,269,270',
+'264,265,260,261,,245,246,,,262,263,,43,,,36,,,66,67,,,68,,38,249,,255',
+'50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,',
+',,,88,98,,266,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72',
+',,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,',
+'8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47',
+'48,46,252,256,257,258,259,269,270,264,265,260,261,,245,246,,,262,263',
+',43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267,253,22',
+'254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,231,266,,,,,82,,89,103,104',
+',,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,',
+'81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107',
+'106,108,,109,117,118,,101,102,47,48,46,252,256,257,258,259,269,270,264',
+'265,260,261,,245,246,,,262,263,,43,,,325,,,66,67,,,68,,38,249,,255,50',
+'251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,',
+'88,98,,266,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,',
+'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51',
+'323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46',
+'252,256,257,258,259,269,270,264,265,260,261,,245,246,,,262,263,,43,',
+',36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267,253,22,254',
+',,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89,103,104,,,44,45',
+'5,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111',
+'110,112,113,,,21,,,,,,8,51,7,10,115,114,116,105,64,107,106,108,,109',
+'117,118,,101,102,47,48,46,252,256,257,258,259,269,270,264,265,260,261',
+',245,246,,,262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247',
+'248,268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,',
+',,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76',
+'33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115',
+'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,252,256,257',
+'258,259,269,270,264,265,260,261,,245,246,,,262,263,,43,,,36,,,66,67',
+',,68,,38,249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89,103,104,,,44,45,321,77,78',
+'24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112',
+'113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118',
+',101,102,47,48,46,252,256,257,258,259,269,270,264,265,260,261,,245,246',
+',,262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268',
+'267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89',
+'103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79',
+'80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,47,48,46,252,-726,-726,-726,-726',
+'269,270,,,-726,-726,,,,,,262,263,,43,,,36,,,66,67,,,68,,38,249,,255',
+'50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,',
+',,,88,98,,,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,',
+'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51',
+'323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46',
+'252,256,257,258,259,269,270,264,265,260,261,,-726,-726,,,262,263,,43',
+',,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267,253,22,254',
+',,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,321',
+'77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111',
+'110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109',
+'117,118,,101,102,47,48,46,252,256,257,258,259,269,270,264,265,260,261',
+',-726,-726,,,262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,',
+'247,248,268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,',
+',,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76',
+'33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115',
+'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,252,-726,-726',
+'-726,-726,269,270,,,-726,-726,,,,,,262,263,,43,,,36,,,66,67,,,68,,38',
+'249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94',
+'93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71',
+'72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,',
+',,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102',
+'47,48,46,252,-726,-726,-726,-726,269,270,,,-726,-726,,,,,,262,263,,43',
+',,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267,253,22,254',
+',,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,321',
+'77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111',
+'110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109',
+'117,118,,101,102,47,48,46,252,-726,-726,-726,-726,269,270,,,-726,-726',
+',,,,,262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248',
+'268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24',
+'82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30',
+'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315',
+'109,117,118,,101,102,47,48,46,252,-726,-726,-726,-726,269,270,,,-726',
+'-726,,,,,,262,263,,236,,,242,,,66,67,,,68,,312,249,310,255,50,251,250',
+'316,247,248,268,267,253,241,254,,,,99,313,90,91,,92,94,93,95,,,,,88',
+'98,,,,,,,82,,89,103,104,,,44,45,77,78,24,9,65,,,,71,72,,,,75,,73,74',
+'76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,7,10,115',
+'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,252,-726,-726',
+'-726,-726,269,270,,,-726,-726,,,,,,262,263,,43,,,36,,,66,67,,,68,,38',
+'249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94',
+'93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74',
+'76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114',
+'116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,252,256,257',
+'258,259,269,270,,,260,261,,,,,,262,263,,236,,,242,,,66,67,,,68,,312',
+'249,310,255,50,251,250,316,247,248,268,267,253,241,254,,,,99,313,90',
+'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,',
+'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51',
+',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,252',
+'256,257,258,259,269,270,264,,260,261,,,,,,262,263,,236,,,242,,,66,67',
+',,68,,,249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91',
+',92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75',
+',73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51,,',
+'115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,252,,',
+',,,,,,,,,,,,,262,263,,236,,,242,,,66,67,,,68,,,249,,255,50,251,250,',
+'247,248,,,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78',
+'24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31',
+'30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,',
+'109,117,118,,101,102,47,48,46,252,,,,,,,,,,,,,,,,262,263,,236,,,242',
+',,66,67,,,68,,,249,,255,50,251,250,,247,248,,,253,241,254,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,-431,,44,45,,,,-431,-431',
+'-431,,,-431,-431,-431,252,-431,,,,,,,,-431,-431,-431,-431,,,,262,263',
+',,,-431,-431,,-431,-431,-431,-431,-431,,,,249,,255,,251,250,,247,248',
+',,,,,,,,,,-431,-431,-431,-431,-431,-431,-431,-431,-431,-431,-431,-431',
+'-431,-431,,,-431,-431,-431,,,-431,,294,-431,,,-431,-431,,-431,,-431',
+',-431,,-431,-431,,-431,-431,-431,-431,-431,-323,-431,-431,-431,,,,-323',
+'-323,-323,,,-323,-323,-323,,-323,-431,252,,-431,-431,,-431,-323,-431',
+'-323,-323,,,,,-431,,262,263,-323,-323,,-323,-323,-323,-323,-323,,,,',
+',,249,,,,251,250,,247,248,,,,,,,,-323,-323,-323,-323,-323,-323,-323',
+'-323,-323,-323,-323,-323,-323,-323,,,-323,-323,-323,,,-323,,303,-323',
+',,-323,-323,,-323,,-323,,-323,,-323,-323,,-323,-323,-323,-323,-323,',
+'-323,,-323,,,,,,,,,,,,,,-323,,,-323,-323,,-323,,-323,77,78,24,,65,,-323',
+',71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243',
+',,,,,,51,,,115,114,116,105,64,107,106,108,315,109,117,118,,101,102,47',
+'48,46,252,256,257,258,259,269,270,264,265,260,261,,-726,-726,,,262,263',
+',236,,,242,,,66,67,,,68,,312,249,310,255,50,251,250,316,247,248,268',
+'267,253,241,254,,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82',
+'65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111',
+'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315,109',
+'117,118,,101,102,47,48,46,252,256,257,258,259,269,270,264,265,260,261',
+',-726,-726,,,262,263,,236,,,242,,,66,67,,,68,,312,249,310,255,50,251',
+'250,316,247,248,268,267,253,241,254,,,,99,313,90,91,,92,94,93,95,,,',
+',88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34',
+'79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105',
+'64,107,106,108,315,109,117,118,,101,102,47,48,46,252,,,,,,,,,,,,,,,',
+'262,263,,236,,,242,,,66,67,,,68,,312,249,310,255,50,251,250,316,247',
+'248,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65',
+'89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111',
+'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117',
+'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,',
+',50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82',
+'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345',
+'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109',
+'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68',
+',,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78',
+'24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81',
+'337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106',
+'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66',
+'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80',
+',,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64',
+'107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,',
+'242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343',
+'79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236',
+',,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342',
+'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116',
+'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,',
+',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76',
+'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114',
+'116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,',
+',,,,,,,,236,,,242,,,66,67,,,68,,,,310,,50,,,316,,,,,,241,,,,,99,313',
+'90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,-308,,44,45,,,,-308',
+'-308,-308,,,-308,-308,-308,,-308,,,,,,,,-308,,-308,-308,-308,,,,111',
+'110,112,113,-308,-308,,-308,-308,-308,-308,-308,,,,,115,114,116,,,,',
+',,,,,,101,102,,,346,-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,,99,87',
+'90,91,,92,94,93,95,,,,-308,88,98,-308,-308,-308,-308,,-308,82,-308,89',
+'103,104,,-308,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,',
+',,81,31,30,111,110,112,113,,,21,,,,,,8,51,,10,115,114,116,105,64,107',
+'106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,',
+'66,67,,,68,,38,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88',
+'98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79',
+'80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105',
+'64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,',
+'236,,,242,,,66,67,,,68,,312,,,,50,,,316,,,,,,241,,,,,99,313,90,91,,92',
+'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73',
+'74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,',
+',115,114,116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,',
+',,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,316,,,,,,241,,,,,99',
+'313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72',
+'44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,',
+'243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102',
+'47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,742,,,,50,,,,,,',
+',,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103',
+'104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112',
+'113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,',
+',,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103',
+'104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112',
+'113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,',
+',,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103',
+'104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112',
+'113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,',
+',,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,123,,,,,122,82,,89,103',
+'104,,,44,45,77,78,24,,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81',
+'31,30,111,110,112,113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108',
+',109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67',
+',,68,,,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77',
+'78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,',
+'81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106',
+'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66',
+'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,,,,82,,89,103,104,,,44,45,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33',
+'34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,7,10,115,114,116',
+'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,',
+',43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,,,416,82,,89,103,104,,,44,45,77,78,24,,65,,,,71,72,',
+',,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,',
+'51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,',
+',,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87',
+'90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45',
+',75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51',
+',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,',
+',,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,',
+'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51',
+',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,',
+',,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,',
+'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51',
+',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,',
+',,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,77,78,24,9,65',
+',,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,',
+',21,,,,,,8,51,,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102',
+'47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104',
+'71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112',
+'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,',
+',,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103',
+'104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112',
+'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,432,,,,50,,',
+',,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89',
+'103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110',
+'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118',
+',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,432,,,',
+'50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82',
+'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345',
+'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109',
+'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68',
+',,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82',
+',89,103,104,,,44,45,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79',
+'80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,,10,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,43',
+',,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33',
+'34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116',
+'105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,',
+',,,,236,,,242,,,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90',
+'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,',
+'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51',
+',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,',
+',,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87',
+'90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45',
+',75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,',
+',,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48',
+'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,844,,,,50,,,,,,,,,241',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45',
+'77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111',
+'110,112,113,,,21,,,,,,8,51,,10,115,114,116,105,64,107,106,108,,109,117',
+'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,',
+',50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82',
+'65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111',
+'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315,109',
+'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68',
+',312,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88,98',
+',,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,',
+',,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107',
+'106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242',
+',,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93',
+'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76',
+'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114',
+'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,',
+',,,,,236,,,242,,,66,67,,,68,,312,,,,50,,,,,,,,,241,,,,,99,87,90,91,',
+'92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,',
+'73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51',
+',,115,114,116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,',
+',,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,316,,,,,,241,,,,',
+'99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71',
+'72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113',
+',,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,742,,,,50,,',
+'316,,,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82',
+'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345',
+'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109',
+'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68',
+',,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78',
+'24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81',
+'337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106',
+'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66',
+'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80',
+',,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64',
+'107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,',
+'242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34',
+'79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51,,,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236',
+',,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,',
+',,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342',
+'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116',
+'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,',
+',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76',
+'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114',
+'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,',
+',,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73',
+'74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,',
+',115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,',
+',,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,',
+'75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,',
+',,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46',
+',,,,,,,,,,,,,,,,,,,236,,,242,562,,66,67,,,68,,,,,,50,,,,,,,,,241,,,',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71',
+'72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21',
+',,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48',
+'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,',
+'99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,77,78',
+'24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112',
+'113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118',
+',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,,,50',
+',,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,416,82,,89,103',
+'104,,,44,45,77,78,24,,65,,,,71,72,,,,75,,73,74,76,342,343,79,80,,,,',
+',81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107',
+'106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242',
+',,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88',
+'98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79',
+'80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105',
+'64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,',
+'236,,,242,,,66,67,,,68,,,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92',
+'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73',
+'74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,',
+',115,114,116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,',
+',,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,742,,310,,50,,,316,,,,,,241',
+',,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104',
+'71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112',
+'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,',
+',,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,-272',
+',44,45,,,,-272,-272,-272,,,-272,-272,-272,583,-272,580,579,578,588,581',
+',,-272,-272,-272,,,,591,,,,,,-272,-272,,-272,-272,-272,-272,-272,,,',
+',,,,583,586,580,579,578,588,581,,,,596,595,599,598,,591,,592,,583,,580',
+'579,578,588,581,-272,,,,,,,-272,591,,,586,294,-272,,,,231,,,596,595',
+'599,598,,,,592,,,586,,,,,-272,-272,,,596,595,599,598,,,,592,,,,-272',
+',,-272,,77,78,24,-272,65,,,,71,72,-272,,,75,,73,74,76,342,343,79,80',
+',,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64',
+'107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,',
+'242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343',
+'79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236',
+',,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342',
+'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116',
+'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,',
+',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76',
+'33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116',
+'105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,',
+',,,,236,,,242,,,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90',
+'91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,-706,,44,45,,,,-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,,-706,-706,,-706,-706,-706',
+'-706,-706,,-706,-706,-706,,,,,,,,,,,,,,-706,,,-706,-706,-706,-706,,-706',
+',-706,,77,78,24,-706,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81',
+'31,30,111,110,112,113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108',
+',109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67',
+',,68,,,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,',
+',82,,89,103,104,-705,,44,45,,,,-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,-272,-705,,,,,-705,-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,,294,-272,,,-272,-272,,-272,,-272,,-272,,-272,-272,,-272',
+'-272,-272,-272,-272,,-272,-272,-272,,,,,,,,,,,,,,-272,,,-272,-272,,-272',
+',-272,77,78,24,,65,,-272,,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81',
+'337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106',
+'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66',
+'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,',
+',,,81,31,30,111,110,112,113,,,21,,,,,,,51,,,115,114,116,105,64,107,106',
+'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66',
+'67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,',
+',77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,',
+',,81,31,30,111,110,112,113,,,21,,,,,,,51,,,115,114,116,105,64,107,106',
+'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66',
+'67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,',
+',77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,',
+',,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106',
+'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66',
+'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,',
+',,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107',
+'106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242',
+',,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93',
+'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76',
+'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114',
+'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,',
+',,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73',
+'74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115',
+'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,',
+',,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91',
+',92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75',
+',73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51,,',
+'115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,',
+',,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,',
+'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51',
+',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,',
+',,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,231,,,77,78,24,82,65,89,103,104,71,72,44,45',
+',75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,',
+',,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48',
+'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71',
+'72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113',
+',,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102',
+'47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104',
+'71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112',
+'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,',
+',,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103',
+'104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110',
+'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118',
+',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50',
+',,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65',
+'89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110',
+'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118',
+',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50',
+',,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65',
+'89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111',
+'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117',
+'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,',
+',50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82',
+'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345',
+'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109',
+'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68',
+',,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78',
+'24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81',
+'337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106',
+'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66',
+'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80',
+',,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64',
+'107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,',
+'242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343',
+'79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236',
+',,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342',
+'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116',
+'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,',
+',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76',
+'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114',
+'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,',
+',,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73',
+'74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,',
+',115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,',
+',,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,',
+'75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,',
+',,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46',
+',,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99',
+'87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44',
+'45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243',
+',,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48',
+'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71',
+'72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113',
+',,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102',
+'47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104',
+'71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112',
+'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,',
+',,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103',
+'104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110',
+'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118',
+',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50',
+',,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65',
+'89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111',
+'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117',
+'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,',
+',50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82',
+'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345',
+'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109',
+'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68',
+',,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78',
+'24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81',
+'337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106',
+'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66',
+'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80',
+',,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64',
+'107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,',
+'242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343',
+'79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236',
+',,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342',
+'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116',
+'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,',
+',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76',
+'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114',
+'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,',
+',,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73',
+'74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,',
+',115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,',
+',,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,',
+'75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,',
+',,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46',
+',,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99',
+'87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44',
+'45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243',
+',,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48',
+'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71',
+'72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113',
+',,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102',
+'47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104',
+'71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112',
+'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,',
+',,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103',
+'104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112',
+'113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,',
+',,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103',
+'104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110',
+'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118',
+',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50',
+',,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65',
+'89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111',
+'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117',
+'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,432',
+',,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24',
+'82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30',
+'111,110,112,113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108,,109',
+'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68',
+',,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24',
+'82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337',
+'345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108',
+',109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67',
+',,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77',
+'78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,',
+'81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106',
+'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66',
+'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,',
+',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,',
+',,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107',
+'106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242',
+',,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93',
+'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,516,,75,,73,74,76',
+'33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116',
+'105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,',
+',,,,236,,,242,,,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90',
+'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,',
+'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51',
+',,115,114,116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,',
+',,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,312,,310,,50,,,316,,,,,,241',
+',,,,99,313,90,91,,92,94,93,95,,,,,88,98,231,,,77,78,24,82,65,89,103',
+'104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110',
+'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315,109,117',
+'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,742',
+',310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77',
+'78,24,82,65,89,103,104,71,72,44,516,,75,,73,74,76,342,343,79,80,,,,',
+',81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107',
+'106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242',
+',,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88',
+'98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80',
+',,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107',
+'106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242',
+',,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88',
+'98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79',
+'80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236',
+',,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95',
+',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342',
+'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116',
+'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,',
+',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76',
+'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114',
+'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,',
+',,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73',
+'74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115',
+'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,',
+',,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91',
+',92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,77,78,24,9,65,,',
+',71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21',
+',,,,,8,51,,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47',
+'48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22,',
+',,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71',
+'72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243',
+',,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48',
+'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71',
+'72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243',
+',,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48',
+'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,',
+',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71',
+'72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113',
+',,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315,109,117,118,,101',
+'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,310,,50,,',
+'316,,,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82',
+'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345',
+'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315',
+'109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,',
+',68,,742,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88',
+'98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79',
+'80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115,114,116,105',
+'64,107,106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,390,,',
+'36,,,66,67,,,68,,38,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88',
+'98,,,,77,78,24,82,65,89,103,104,71,72,,,,75,,73,74,76,342,343,79,80',
+',,,,,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115,114,116,105,64',
+'107,106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,390,,,36',
+',,66,67,,,68,,38,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98',
+',,,77,78,24,82,65,89,103,104,71,72,,,,75,,73,74,76,342,343,79,80,,,',
+',,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115,114,116,105,64,107',
+'106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,334,,,330,,,66',
+'67,,,68,,,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77',
+'78,24,82,65,89,103,104,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337',
+'345,111,110,112,113,,,243,,,,,,,338,,,115,114,116,395,64,107,106,396',
+',109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,397,,,242,,,66,67,,,68',
+',,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82',
+'65,89,103,104,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111',
+'110,112,113,,,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109,117',
+'118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,334,,,330,,,66,67,,,68,,,,,,,',
+',,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89',
+'103,104,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110',
+'112,113,,,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109,117,118',
+',101,102,,,346,,,,,,,,,,,,,,,,,,,,334,,,330,,,66,67,,,68,,,,,,,,,,,',
+',,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103',
+'104,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112',
+'113,,,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109,117,118,,101',
+'102,,,346,,,,,,,,,,,,,,,,,,,,1105,,,242,,,66,67,,,68,,,,,,,,,,,,,,,',
+',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104',
+'71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113',
+',,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102',
+',,346,,,,,,,,,,,,,,,,,,,,1111,,,242,,,66,67,,,68,,,,,,,,,,,,,,,,,,,',
+'99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72',
+',,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243',
+',,,,,,338,,,115,114,116,395,64,107,106,396,,109,117,118,,101,102,,,346',
+',,,,,,,,,,,,,,,,402,,,397,,,242,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,99,87',
+'90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,,,,75',
+',73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,',
+'338,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,,,346,,,',
+',,,,,,,,,,,,,,,,390,,,36,,,66,67,,,68,,38,,,,,,,,,,,,,,,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,,,,75,',
+'73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,338',
+',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,,,346,,,,,,,',
+',,,,,,,,,,,,1105,,,242,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,99,87,90,91,',
+'92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,,,,75,,73,74',
+'76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115',
+'114,116,105,64,107,106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,',
+',,,,,,334,,,330,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,,,,75,,73,74,76,342',
+'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115,114',
+'116,105,64,107,106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,',
+',,334,,,242,,,66,67,,,68,,,583,,580,579,578,588,581,,,,,,,,,591,,99',
+'87,90,91,,92,94,93,95,,,,,88,98,,,,348,,586,82,,89,103,104,77,78,24',
+',65,599,598,,71,72,592,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345',
+'111,110,112,113,,,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109',
+'117,118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,334,,,330,,,66,67,,,68,,,',
+',,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65',
+'89,103,104,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110',
+'112,113,,,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109,117,118',
+',101,102,,,346,,,,,,,,,,,,,,,,,,,,334,,,242,,,66,67,,,68,,,583,,580',
+'579,578,588,581,,,,,,,,,591,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,544',
+',586,82,,89,103,104,77,78,24,,65,599,598,,71,72,592,,,75,,73,74,76,342',
+'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115,114',
+'116,105,64,107,106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,',
+',,334,,,330,,,66,67,,,68,,329,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,,,,,,,82,,89,103,104,182,193,183,206,179,199,189,188,209',
+'210,204,187,186,181,207,211,212,191,180,194,198,200,192,185,,,,201,208',
+'203,202,195,205,190,178,197,196,,,,,,177,184,175,176,172,173,174,135',
+'137,,,136,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168',
+'169,155,156,,,,,,,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150',
+'142,164,143,,,171,99,,,,,,,,,,,,,,98,182,193,183,206,179,199,189,188',
+'209,210,204,187,186,181,207,211,212,191,180,194,198,200,192,185,,,,201',
+'208,203,202,195,205,190,178,197,196,,,,,,177,184,175,176,172,173,174',
+'135,137,134,,136,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149',
+',,,168,169,155,156,,,,,,,,,,,,,,160,159,,144,165,162,161,170,157,158',
+'152,150,142,164,143,,,171,99,,,,,,,,,,,,,,98,182,193,183,206,179,199',
+'189,188,209,210,204,187,186,181,207,211,212,191,180,194,198,200,192',
+'185,,,,201,208,203,202,195,205,190,178,197,196,,,,,,177,184,175,176',
+'172,173,174,135,137,,,136,,,,,,,,166,167,,163,145,146,147,154,151,153',
+',,148,149,,,,168,169,155,156,,,,,,,,,,,,,,160,159,,144,165,162,161,170',
+'157,158,152,150,142,164,143,,,171,99,,,,,,,,,,,,,,98,182,193,183,206',
+'179,199,189,188,209,210,204,187,186,181,207,211,212,191,180,194,198',
+'200,192,185,,,,201,208,203,202,195,205,190,178,197,196,,,,,,177,184',
+'175,176,172,173,174,135,137,,,136,,,,,,,,166,167,,163,145,146,147,154',
+'151,153,,,148,149,,,,168,169,155,156,,,,,,,,,,,,,,160,159,,144,165,162',
+'161,170,157,158,152,150,142,164,143,,,171,99,111,110,112,113,,,583,',
+'580,579,578,588,581,98,,,115,114,116,720,,591,,723,986,,,,,101,102,',
+',346,591,,,,,,,,,586,,,,,,,,,,722,599,598,704,,,592,702,,,703,,885,',
+',,,,,592,,,,,,,721,,,,99,987,90,91,,92,94,93,95,,,,,88,98,111,110,112',
+'113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,583,723,580,579,578',
+'588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703',
+',,,,596,595,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88',
+'98,111,110,112,113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,583',
+'723,580,579,578,588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704',
+',,586,702,,,703,,,,,596,595,599,598,,,,592,,,,721,,,,99,87,90,91,,92',
+'94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,708,709,182,193,183,206,179',
+'199,189,188,209,210,204,187,186,181,207,211,212,191,180,194,198,200',
+'192,185,,,,201,208,203,202,195,205,190,178,197,196,,,,,,177,184,175',
+'176,172,173,174,135,137,,,136,,,,,,,,166,167,,163,145,146,147,154,151',
+'153,,,148,149,,,,168,169,155,156,,,,,,,,,,,,,,160,159,,144,165,162,161',
+'170,157,158,152,150,142,164,143,,,171,111,110,112,113,,,583,,580,579',
+'578,588,581,,,,115,114,116,720,,591,,723,,,,,,101,102,,,346,,,,,,,,',
+',586,,,,,,,,,,722,599,598,704,,,592,702,,,703,,,,,,,,,,,,,,,,721,,,',
+'99,87,90,91,,92,94,93,95,,,,,88,98,111,110,112,113,,,82,,89,103,104',
+',,708,709,,115,114,116,720,,,583,723,580,579,578,588,581,101,102,,,346',
+',,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703,,885,,,596,595,599,598',
+',,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111,110,112,113',
+',,82,,89,103,104,,,708,709,,115,114,116,720,,,583,723,580,579,578,588',
+'581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703,,',
+',,596,595,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88,98',
+'111,110,112,113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,583,723',
+'580,579,578,588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,',
+'586,702,,,703,,885,,,,,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93',
+'95,,,,,88,98,111,110,112,113,,,82,,89,103,104,,,708,709,,115,114,116',
+'720,,,583,723,580,579,578,588,581,101,102,,,346,,,,591,,,,,,,,,,,,,',
+',,722,,,704,,,586,702,,,703,,,,,,,599,598,,,,592,,,,721,,,,99,87,90',
+'91,,92,94,93,95,,,,,88,98,111,110,112,113,,,82,,89,103,104,,,708,709',
+',115,114,116,720,,,583,723,580,579,578,588,581,101,102,,,346,,,,591',
+',,,,,,,,,,,,,,,722,,,704,,,586,702,,,703,,,,,,,599,598,,,,592,,,,721',
+',,,99,87,90,91,,92,94,93,95,,,,,88,98,111,110,112,113,,,82,,89,103,104',
+',,708,709,,115,114,116,720,,,583,723,580,579,578,588,581,101,102,,,346',
+',,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703,,999,,,,,599,598,,,',
+'592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111,110,112,113,,,82',
+',89,103,104,,,708,709,,115,114,116,720,,,583,723,580,579,578,588,581',
+'101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703,,,,,596',
+'595,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111',
+'110,112,113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,,723,986,',
+',,,101,102,,,346,591,,,,,,,,,,,,,,,,,,,722,,,704,,,,702,,,703,,885,',
+',,,,,592,,,,,,,721,,,,99,987,90,91,,92,94,93,95,,,,,88,98,111,110,112',
+'113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,583,723,580,579,578',
+'588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703',
+',,,,,,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111',
+'110,112,113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,583,723,580',
+'579,578,588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,,586',
+'702,,,703,,,,,,,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,',
+',,88,98,111,110,112,113,,,82,,89,103,104,,,708,709,,115,114,116,720',
+',,583,723,580,579,578,588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722',
+',,704,,,586,702,,,703,,885,,,596,595,599,598,,,,592,,,,721,,,,99,87',
+'90,91,,92,94,93,95,,,,,88,98,231,111,110,112,113,,82,,89,103,104,,,708',
+'709,,,115,114,116,720,,,,723,986,,,,,101,102,,,346,591,,,,,,,,,,,,,',
+',,,,,722,,,704,,,,702,,,703,,885,,,,,,,592,,,,,,,721,,,,99,987,90,91',
+',92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,708,709,182,193,183,206',
+'179,199,189,188,209,210,204,187,186,181,207,211,212,191,180,194,198',
+'200,192,185,,,,201,208,203,282,281,283,280,178,197,196,,,,,,177,184',
+'175,176,277,278,279,275,137,107,106,276,,109,,,,,,166,167,,163,145,146',
+'147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,287,,,,,,,,160,159',
+',144,165,162,161,170,157,158,152,150,142,164,143,,,171,111,110,112,113',
+',,,583,,580,579,578,588,581,,,115,114,116,,,,591,,,,,,,101,102,,,346',
+'111,110,112,113,,,,,,,586,642,,,,,115,114,116,596,595,599,598,,,,592',
+',,101,102,,,346,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,',
+',,,,82,,89,103,104,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111,110',
+'112,113,,,82,,89,103,104,,,,,,115,114,116,1195,469,,,1196,,,,,,101,102',
+'166,167,346,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156',
+',,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164',
+'143,,,171,99,87,90,91,,92,94,93,95,,,,,88,98,846,462,,,847,,82,,89,103',
+'104,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156',
+',,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164',
+'143,512,462,171,,513,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148',
+'149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170',
+'157,158,152,150,142,164,143,693,469,171,,694,,,,,,,,166,167,,163,145',
+'146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160',
+'159,,144,165,162,161,170,157,158,152,150,142,164,143,819,469,171,,820',
+',,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155',
+'156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142',
+'164,143,691,462,171,,692,,,,,,,,166,167,,163,145,146,147,154,151,153',
+',,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161',
+'170,157,158,152,150,142,164,143,693,469,171,,694,,,,,,,,166,167,,163',
+'145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,',
+',160,159,,144,165,162,161,170,157,158,152,150,142,164,143,755,469,171',
+',756,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169',
+'155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150',
+'142,164,143,816,469,171,,817,,,,,,,,166,167,,163,145,146,147,154,151',
+'153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162',
+'161,170,157,158,152,150,142,164,143,512,462,171,,513,,,,,,,,166,167',
+',163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,,,,,',
+',,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143,465,469',
+'171,,464,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168',
+'169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152',
+'150,142,164,143,814,462,171,,815,,,,,,,,166,167,,163,145,146,147,154',
+'151,153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165',
+'162,161,170,157,158,152,150,142,164,143,691,462,171,,692,,,,,,,,166',
+'167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,294',
+',,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143,752',
+'462,171,,753,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,',
+',,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158',
+'152,150,142,164,143,1190,469,171,,1189,,,,,,,,166,167,,163,145,146,147',
+'154,151,153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144',
+'165,162,161,170,157,158,152,150,142,164,143,1193,462,171,,1194,,,,,',
+',,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156',
+',,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164',
+'143,849,469,171,,848,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148',
+'149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170',
+'157,158,152,150,142,164,143,458,462,171,,459,,,,,,,,166,167,,163,145',
+'146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160',
+'159,,144,165,162,161,170,157,158,152,150,142,164,143,,,171' ]
+ racc_action_table = arr = ::Array.new(28164, 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 = [
+'465,380,1194,1193,730,1112,827,465,465,465,69,1196,877,465,465,988,465',
+'999,1158,411,1206,1006,509,509,465,465,379,281,620,340,29,339,703,988',
+'281,412,465,465,1032,465,465,465,465,465,593,282,474,474,21,703,1054',
+'1108,282,624,1052,480,762,762,877,826,639,639,593,869,1006,812,465,465',
+'465,465,465,465,465,465,465,465,465,465,465,465,1195,1109,465,465,465',
+'411,465,465,1196,21,465,730,281,465,29,339,623,69,465,999,465,412,465',
+'465,623,465,465,465,465,465,282,465,465,465,480,827,509,29,339,380,1194',
+'1193,869,1112,380,1194,1193,465,1112,1196,465,465,620,465,1196,465,1158',
+'620,1206,693,474,1158,465,1206,379,465,693,693,693,379,762,693,693,693',
+'639,693,1032,1195,747,639,234,1032,828,693,693,693,693,693,1054,1108',
+'747,622,1052,1054,1108,693,693,1052,693,693,693,693,693,812,350,843',
+'812,872,812,46,46,1061,3,1061,235,237,1088,3,1195,1109,847,346,346,1195',
+'1109,693,693,693,693,693,693,693,693,693,693,693,693,693,693,234,243',
+'693,693,693,846,693,693,872,692,693,532,350,693,693,654,693,656,693',
+'406,693,845,693,693,350,693,693,693,693,693,848,693,693,693,235,237',
+'691,848,848,848,847,1088,1088,848,848,621,848,693,46,46,693,693,693',
+'693,848,693,283,693,1088,914,346,346,693,283,846,693,848,848,692,848',
+'848,848,848,848,873,532,532,532,341,654,654,656,656,406,406,406,970',
+'239,1076,654,722,656,532,238,722,691,848,848,848,848,848,848,848,848',
+'848,848,848,848,848,848,873,914,848,848,848,19,848,848,914,1199,848',
+'283,409,848,438,1056,617,914,848,1199,848,438,848,848,408,848,848,848',
+'848,848,438,848,849,848,459,970,914,439,345,849,849,849,1076,1076,1076',
+'849,849,848,849,701,848,848,19,848,701,848,849,849,701,1076,854,1056',
+'848,876,19,848,914,876,849,849,236,849,849,849,849,849,409,409,409,438',
+'362,459,362,362,362,362,362,27,408,408,408,347,384,459,27,362,439,384',
+'849,849,849,849,849,849,849,849,849,849,849,849,849,849,607,458,849',
+'849,849,362,849,849,397,606,849,410,397,849,362,362,362,362,849,413',
+'849,362,849,849,407,849,849,849,849,849,105,849,849,849,676,41,960,105',
+'105,105,27,960,105,105,105,274,105,849,458,605,849,849,274,849,105,849',
+'105,105,105,319,458,362,849,601,319,849,105,105,601,105,105,105,105',
+'105,870,410,410,410,604,756,275,676,41,413,413,413,756,275,407,407,407',
+'756,602,676,41,756,105,105,105,105,105,105,105,105,105,105,105,105,105',
+'105,274,276,105,105,105,817,105,105,276,600,105,878,817,105,105,879',
+'105,817,105,597,105,817,105,105,883,105,105,105,105,105,277,105,108',
+'105,756,275,884,277,885,108,108,108,49,49,108,108,108,105,108,888,105',
+'105,105,105,585,105,108,105,108,108,108,817,105,575,370,105,276,370',
+'108,108,817,108,108,108,108,108,886,387,49,49,574,1151,278,279,387,280',
+'886,572,1151,278,279,799,280,387,799,277,900,1151,108,108,108,108,108',
+'108,108,108,108,108,108,108,108,108,903,18,108,108,108,904,108,108,18',
+'571,108,570,886,108,108,913,108,18,108,569,108,387,108,108,886,108,108',
+'108,108,108,387,108,694,108,1151,278,279,42,280,694,694,694,85,213,694',
+'694,694,108,694,918,108,108,108,108,85,108,694,108,694,694,694,921,108',
+'922,85,108,18,371,694,694,371,694,694,694,694,694,925,134,927,1110,928',
+'1104,134,134,42,930,1110,586,1104,586,586,586,932,586,934,1110,42,1104',
+'694,694,694,694,694,694,694,694,694,694,694,694,694,694,935,1074,694',
+'694,694,1131,694,694,1131,937,694,1074,586,694,694,940,694,568,694,119',
+'694,586,694,694,947,694,694,694,694,694,464,694,1110,694,1104,1055,1055',
+'464,464,464,774,774,374,464,464,374,464,694,950,1074,694,694,694,694',
+'464,694,565,694,800,800,564,1074,694,1165,1165,694,464,464,354,464,464',
+'464,464,464,705,705,15,15,768,389,768,768,768,768,768,1118,389,1118',
+'1118,1118,1217,1118,957,768,959,389,464,464,464,464,464,464,464,464',
+'464,464,464,464,464,464,377,377,464,464,464,768,464,464,53,966,464,967',
+'1118,464,768,768,768,768,464,968,464,768,464,464,969,464,464,464,464',
+'464,1091,464,356,464,389,52,399,51,979,980,1091,549,54,399,981,982,554',
+'464,549,54,464,464,399,464,991,464,351,549,54,992,993,768,464,351,997',
+'464,330,330,330,330,330,330,351,1091,1091,330,330,998,1091,360,330,752',
+'330,330,330,330,330,330,330,537,537,537,537,537,330,330,330,330,330',
+'330,330,399,550,330,1003,545,549,54,1013,330,330,330,330,330,330,330',
+'330,330,330,330,330,351,330,330,330,233,330,330,330,330,330,632,233',
+'752,1014,388,1016,1017,632,1018,752,233,388,1020,1021,752,1022,632,543',
+'752,330,388,540,330,43,539,330,330,820,364,330,368,330,1048,1049,820',
+'330,523,752,40,820,519,647,647,820,330,647,647,647,518,330,330,330,330',
+'1065,330,330,330,330,517,233,388,25,330,330,1075,632,372,752,1083,388',
+'330,1085,330,330,330,492,1102,330,330,955,955,955,955,955,955,491,490',
+'1105,955,955,489,1111,820,955,395,955,955,955,955,955,955,955,6,6,6',
+'6,6,955,955,955,955,955,955,955,373,781,955,781,781,781,1114,781,955',
+'955,955,955,955,955,955,955,955,955,955,955,1115,955,955,955,335,955',
+'955,955,955,955,333,335,395,1116,391,1117,17,333,781,395,335,391,16',
+'1129,395,1130,333,781,395,955,391,375,955,1139,1141,955,955,332,1144',
+'955,1145,955,1146,1147,332,955,1149,395,476,487,1154,14,466,332,955',
+'385,13,386,1164,955,955,955,955,12,955,955,955,955,1170,335,391,1175',
+'955,955,457,333,456,395,454,391,955,487,955,955,955,487,487,955,955',
+'382,382,382,382,382,382,440,436,1189,382,382,1190,1192,332,382,396,382',
+'382,382,382,382,382,382,322,322,322,322,322,382,382,382,382,382,382',
+'382,10,941,382,941,941,941,7,941,382,382,382,382,382,382,382,382,382',
+'382,382,382,771,382,382,382,331,382,382,382,382,382,771,331,396,1197',
+'629,433,392,431,941,396,331,629,430,401,396,390,428,941,396,382,629',
+'422,382,698,721,382,382,724,696,382,727,382,729,771,771,382,695,396',
+'771,488,307,735,736,737,382,739,741,293,308,382,382,382,382,687,382',
+'382,382,382,749,331,629,751,382,382,311,1202,754,396,1203,629,382,488',
+'382,382,382,488,488,382,382,1107,1107,1107,1107,1107,1107,757,758,682',
+'1107,1107,761,323,764,1107,753,1107,1107,1107,1107,1107,1107,1107,367',
+'367,367,367,367,1107,1107,1107,1107,1107,1107,1107,324,502,1107,326',
+'677,327,328,668,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107',
+'1107,334,1107,1107,1107,783,1107,1107,1107,1107,1107,784,786,753,502',
+'661,659,503,502,502,753,502,502,802,808,753,809,651,813,753,1107,1204',
+'1205,1107,1,337,1107,1107,1211,338,1107,785,1107,785,785,785,1107,785',
+'753,503,822,,,503,503,1107,503,503,,,1107,1107,1107,1107,,1107,1107',
+'1107,1107,,,,,1107,1107,,,,753,,,1107,,1107,1107,1107,,,1107,1107,325',
+'325,325,325,325,325,,,,325,325,,,,325,755,325,325,325,325,325,325,325',
+',,,,,325,325,325,325,325,325,325,,942,325,942,942,942,,942,325,325,325',
+'325,325,325,325,325,325,325,325,325,,325,325,325,,325,325,325,325,325',
+',1119,755,1119,1119,1119,,1119,942,755,,,,,755,,,,755,325,,,325,,,325',
+'325,,,325,1068,325,1068,1068,1068,325,1068,755,1119,1174,,1174,1174',
+'1174,325,1174,,,,325,325,325,325,,325,325,325,325,,,,,325,325,,,,755',
+',,325,,325,325,325,,,325,325,1067,1067,1067,1067,1067,1067,,,,1067,1067',
+',,,1067,814,1067,1067,1067,1067,1067,1067,1067,,,,,,1067,1067,1067,1067',
+'1067,1067,1067,,,1067,,,,,,1067,1067,1067,1067,1067,1067,1067,1067,1067',
+'1067,1067,1067,,1067,1067,1067,,1067,1067,1067,1067,1067,,,814,,,,,',
+',814,,,,,814,,,,814,1067,,,1067,,,1067,1067,,,1067,,1067,,,,1067,,814',
+',,,,,,1067,,,,,1067,1067,1067,1067,,1067,1067,1067,1067,814,,,,1067',
+'1067,,,,814,,,1067,,1067,1067,1067,,,1067,1067,1066,1066,1066,1066,1066',
+'1066,,,,1066,1066,,,,1066,815,1066,1066,1066,1066,1066,1066,1066,,,',
+',,1066,1066,1066,1066,1066,1066,1066,,,1066,,,,,,1066,1066,1066,1066',
+'1066,1066,1066,1066,1066,1066,1066,1066,,1066,1066,1066,,1066,1066,1066',
+'1066,1066,,,815,,,,,,,815,,,,,815,,,,815,1066,,,1066,,,1066,1066,,,1066',
+',1066,,,,1066,,815,,,,,,,1066,,,,,1066,1066,1066,1066,,1066,1066,1066',
+'1066,815,,,,1066,1066,,,,815,,,1066,,1066,1066,1066,,,1066,1066,823',
+'823,823,823,823,823,,,,823,823,,,,823,816,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,823,,823,823,823,,823,823,823,823,823,,,816,,,,',
+',,816,,,,,816,,,,816,823,,,823,,,823,823,,,823,,823,,,,823,,816,,,,',
+',,823,,,,,823,823,823,823,,823,823,823,823,816,,,,823,823,,,,816,,,823',
+',823,823,823,,,823,823,366,366,366,366,366,366,,,,366,366,,,,366,819',
+'366,366,366,366,366,366,366,,,,,,366,366,366,366,366,366,366,,,366,',
+',,,,366,366,366,366,366,366,366,366,366,366,366,366,,366,366,366,,366',
+'366,366,366,366,,,819,,,,,,,819,,,,,819,,,,819,366,,,366,,,366,366,',
+',366,,366,,,,366,,819,,,,,,,366,,,,,366,366,366,366,,366,366,366,366',
+',,,,366,366,,,,819,,,366,,366,366,366,,,366,366,365,365,365,365,365',
+'365,,,,365,365,,,,365,956,365,365,365,365,365,365,365,,,,,,365,365,365',
+'365,365,365,365,,,365,,,,,,365,365,365,365,365,365,365,365,365,365,365',
+'365,,365,365,365,,365,365,365,365,365,,,956,,,,,,,956,,,,,,,,,956,365',
+',,365,,,365,365,,,365,,365,,,,365,,956,,,,,,,365,,,,,365,365,365,365',
+',365,365,365,365,956,,,,365,365,,,,956,,,365,,365,365,365,,,365,365',
+'132,132,132,132,132,132,,,,132,132,,,,132,,132,132,132,132,132,132,132',
+'23,,,,,132,132,132,132,132,132,132,,,132,,,,,,132,132,132,132,132,132',
+'132,132,132,132,132,132,,132,132,132,,132,132,132,132,132,23,23,23,23',
+'23,23,23,23,23,23,23,,23,23,,,23,23,,132,,23,132,,,132,132,,,132,,132',
+'23,,23,132,23,23,,23,23,23,23,23,132,23,,,,132,132,132,132,,132,132',
+'132,132,,,,,132,132,,23,,,,,132,,132,132,132,,,132,132,920,920,920,920',
+'920,920,,,,920,920,,,,920,,920,920,920,920,920,920,920,378,,,,,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,378,378,378,378,378,378,378',
+'378,378,378,378,,378,378,,,378,378,,920,,,920,,,920,920,,,920,,920,378',
+',378,920,378,378,,378,378,378,378,378,920,378,,,,920,920,920,920,,920',
+'920,920,920,,,,,920,920,,378,,,,,920,,920,920,920,,,920,920,908,908',
+'908,908,908,908,,,,908,908,,,,908,,908,908,908,908,908,908,908,,,,,',
+'908,908,908,908,908,908,908,,,908,,,,,443,908,908,908,908,908,908,908',
+'908,908,908,908,908,,908,908,908,,908,908,908,908,908,443,443,443,443',
+'443,443,443,443,443,443,443,,443,443,,,443,443,,908,,,908,,,908,908',
+',,908,,908,443,,443,908,443,443,,443,443,443,443,443,908,443,,,,908',
+'908,908,908,,908,908,908,908,,,,,908,908,,443,,443,,,908,,908,908,908',
+',,908,908,361,361,361,361,361,361,,,,361,361,,,,361,,361,361,361,361',
+'361,361,361,,,,,,361,361,361,361,361,361,361,,,361,,,,,453,361,361,361',
+'361,361,361,361,361,361,361,361,361,,361,361,361,,361,361,361,361,361',
+'453,453,453,453,453,453,453,453,453,453,453,,453,453,,,453,453,,361',
+',,361,,,361,361,,,361,,361,453,,453,361,453,453,,453,453,453,453,453',
+'361,453,,,,361,361,361,361,,361,361,361,361,,,,,361,361,,453,,,,,361',
+',361,361,361,,,361,361,834,834,834,834,834,834,,,,834,834,,,,834,,834',
+'834,834,834,834,834,834,,,,,,834,834,834,834,834,834,834,,,834,,,,,763',
+'834,834,834,834,834,834,834,834,834,834,834,834,,834,834,834,,834,834',
+'834,834,834,763,763,763,763,763,763,763,763,763,763,763,,763,763,,,763',
+'763,,834,,,834,,,834,834,,,834,,834,763,,763,834,763,763,,763,763,763',
+'763,763,834,763,,,,834,834,834,834,,834,834,834,834,,,,,834,834,,763',
+',,,,834,,834,834,834,,,834,834,215,215,215,215,215,215,,,,215,215,,',
+',215,,215,215,215,215,215,215,215,,,,,,215,215,215,215,215,215,215,',
+',215,,,,,794,215,215,215,215,215,215,215,215,215,215,215,215,,215,215',
+'215,,215,215,215,215,215,794,794,794,794,794,794,794,794,794,794,794',
+',794,794,,,794,794,,215,,,215,,,215,215,,,215,,215,794,,794,215,794',
+'794,,794,794,794,794,794,215,794,,,,215,215,215,215,,215,215,215,215',
+',,,,215,215,,794,,,,,215,,215,215,215,,,215,215,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,305,305,305,305,305,305,305,305,305,305,305,,305,305,,,305',
+'305,,1166,,,1166,,,1166,1166,,,1166,,1166,305,,305,1166,305,305,,305',
+'305,305,305,305,1166,305,,,,1166,1166,1166,1166,,1166,1166,1166,1166',
+',,,,1166,1166,,305,,,,,1166,,1166,1166,1166,,,1166,1166,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,506,506,506,506,506,506',
+'506,506,506,506,506,,506,506,,,506,506,,616,,,616,,,616,616,,,616,,616',
+'506,,506,616,506,506,,506,506,506,506,506,616,506,,,,616,616,616,616',
+',616,616,616,616,,,,,616,616,506,506,,,,,616,,616,616,616,,,616,616',
+'36,36,36,36,36,36,,,,36,36,,,,36,,36,36,36,36,36,36,36,,,,,,36,36,36',
+'36,36,36,36,,,36,,,,,,36,36,36,36,36,36,36,36,36,36,36,36,,36,36,36',
+',36,36,36,36,36,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050',
+',1050,1050,,,1050,1050,,36,,,36,,,36,36,,,36,,36,1050,,1050,36,1050',
+'1050,,1050,1050,1050,1050,1050,36,1050,,,,36,36,36,36,,36,36,36,36,',
+',,,36,36,,1050,,,,,36,,36,36,36,,,36,36,1029,1029,1029,1029,1029,1029',
+',,,1029,1029,,,,1029,,1029,1029,1029,1029,1029,1029,1029,,,,,,1029,1029',
+'1029,1029,1029,1029,1029,,,1029,,,,,,1029,1029,1029,1029,1029,1029,1029',
+'1029,1029,1029,1029,1029,,1029,1029,1029,,1029,1029,1029,1029,1029,1027',
+'1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,,1027,1027,,,1027',
+'1027,,1029,,,1029,,,1029,1029,,,1029,,1029,1027,,1027,1029,1027,1027',
+',1027,1027,1027,1027,1027,1029,1027,,,,1029,1029,1029,1029,,1029,1029',
+'1029,1029,,,,,1029,1029,,1027,,,,,1029,,1029,1029,1029,,,1029,1029,0',
+'0,0,0,0,0,,,,0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0',
+'0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,1009,1009,1009,1009,1009,1009',
+'1009,1009,1009,1009,1009,,1009,1009,,,1009,1009,,0,,,0,,,0,0,,,0,,0',
+'1009,,1009,0,1009,1009,,1009,1009,1009,1009,1009,0,1009,,,,0,0,0,0,',
+'0,0,0,0,,,,,0,0,,1009,,,,,0,,0,0,0,,,0,0,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,561,561,561,561,561,561,561,561,561',
+'561,561,,561,561,,,561,561,,818,,,818,,,818,818,,,818,,818,561,,561',
+'818,561,561,,561,561,561,561,561,818,561,,,,818,818,818,818,,818,818',
+'818,818,,,,,818,818,,561,,,,,818,,818,818,818,,,818,818,242,242,242',
+'242,242,242,,,,242,242,,,,242,,242,242,242,242,242,242,242,,,,,,242',
+'242,242,242,242,242,242,,,242,,,,,,242,242,242,242,242,242,242,242,242',
+'242,242,242,,242,242,242,,242,242,242,242,242,851,851,851,851,851,851',
+'851,851,851,851,851,,851,851,,,851,851,,242,,,242,,,242,242,,,242,,242',
+'851,,851,242,851,851,,851,851,851,851,851,242,851,,,,242,242,242,242',
+',242,242,242,242,,,,,242,242,,851,,,,,242,,242,242,242,,,242,242,383',
+'383,383,383,383,383,,,,383,383,,,,383,,383,383,383,383,383,383,383,',
+',,,,383,383,383,383,383,383,383,,,383,,,,,,383,383,383,383,383,383,383',
+'383,383,383,383,383,,383,383,383,,383,383,383,383,383,500,500,500,500',
+'500,500,500,,,500,500,,,,,,500,500,,383,,,383,,,383,383,,,383,,383,500',
+',500,383,500,500,,500,500,500,500,500,383,500,,,,383,383,383,383,,383',
+'383,383,383,,,,,383,383,,,,,,,383,,383,383,383,,,383,383,1120,1120,1120',
+'1120,1120,1120,,,,1120,1120,,,,1120,,1120,1120,1120,1120,1120,1120,1120',
+',,,,,1120,1120,1120,1120,1120,1120,1120,,,1120,,,,,,1120,1120,1120,1120',
+'1120,1120,1120,1120,1120,1120,1120,1120,,1120,1120,1120,,1120,1120,1120',
+'1120,1120,485,485,485,485,485,485,485,485,485,485,485,,485,485,,,485',
+'485,,1120,,,1120,,,1120,1120,,,1120,,1120,485,,485,1120,485,485,,485',
+'485,485,485,485,1120,485,,,,1120,1120,1120,1120,,1120,1120,1120,1120',
+',,,,1120,1120,,,,,,,1120,,1120,1120,1120,,,1120,1120,1010,1010,1010',
+'1010,1010,1010,,,,1010,1010,,,,1010,,1010,1010,1010,1010,1010,1010,1010',
+',,,,,1010,1010,1010,1010,1010,1010,1010,,,1010,,,,,,1010,1010,1010,1010',
+'1010,1010,1010,1010,1010,1010,1010,1010,,1010,1010,1010,,1010,1010,1010',
+'1010,1010,486,486,486,486,486,486,486,486,486,486,486,,486,486,,,486',
+'486,,1010,,,1010,,,1010,1010,,,1010,,1010,486,,486,1010,486,486,,486',
+'486,486,486,486,1010,486,,,,1010,1010,1010,1010,,1010,1010,1010,1010',
+',,,,1010,1010,,,,,,,1010,,1010,1010,1010,,,1010,1010,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,496,496,496,496,496,496,496',
+',,496,496,,,,,,496,496,,619,,,619,,,619,619,,,619,,619,496,,496,619',
+'496,496,,496,496,496,496,496,619,496,,,,619,619,619,619,,619,619,619',
+'619,,,,,619,619,,,,,,,619,,619,619,619,,,619,619,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,497,497,497,497,497,497,497,,',
+'497,497,,,,,,497,497,,640,,,640,,,640,640,,,640,,640,497,,497,640,497',
+'497,,497,497,497,497,497,640,497,,,,640,640,640,640,,640,640,640,640',
+',,,,640,640,,,,,,,640,,640,640,640,,,640,640,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,961,,961,961,961,961,961,498,498,498,498,498,498,498,,,498',
+'498,,,,,,498,498,,961,,,961,,,961,961,,,961,,961,498,,498,961,498,498',
+',498,498,498,498,498,961,498,,,,961,961,961,961,,961,961,961,961,,,',
+',961,961,,,,546,546,546,961,546,961,961,961,546,546,961,961,,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,499,499,499,499,499,499,499,,,499,499,,,,,,499,499,,546,,,546',
+',,546,546,,,546,,546,499,546,499,546,499,499,546,499,499,499,499,499',
+'546,499,,,,546,546,546,546,,546,546,546,546,,,,,546,546,,,,,,,546,,546',
+'546,546,,,546,546,5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5',
+'5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,501,501,501',
+'501,501,501,501,,,501,501,,,,,,501,501,,5,,,5,,,5,5,,,5,,5,501,,501',
+'5,501,501,,501,501,501,501,501,5,501,,,,5,5,5,5,,5,5,5,5,,,,,5,5,,,',
+'1155,1155,1155,5,1155,5,5,5,1155,1155,5,5,,1155,,1155,1155,1155,1155',
+'1155,1155,1155,,,,,,1155,1155,1155,1155,1155,1155,1155,,,1155,,,,,,',
+'1155,,,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,',
+'1155,1155,1155,1155,1155,504,504,504,504,504,504,504,,,504,504,,,,,',
+'504,504,,1155,,,1155,,,1155,1155,,,1155,,1155,504,1155,504,1155,504',
+'504,1155,504,504,504,504,504,1155,504,,,,1155,1155,1155,1155,,1155,1155',
+'1155,1155,,,,,1155,1155,,,,1123,1123,1123,1155,1123,1155,1155,1155,1123',
+'1123,1155,1155,,1123,,1123,1123,1123,1123,1123,1123,1123,,,,,,1123,1123',
+'1123,1123,1123,1123,1123,,,1123,,,,,,,1123,,,1123,1123,1123,1123,1123',
+'1123,1123,1123,,1123,1123,1123,,1123,1123,1123,1123,1123,505,505,505',
+'505,505,505,505,505,,505,505,,,,,,505,505,,1123,,,1123,,,1123,1123,',
+',1123,,,505,,505,1123,505,505,,505,505,505,505,505,1123,505,,,,1123',
+'1123,1123,1123,,1123,1123,1123,1123,,,,,1123,1123,,,,1122,1122,1122',
+'1123,1122,1123,1123,1123,1122,1122,1123,1123,,1122,,1122,1122,1122,1122',
+'1122,1122,1122,,,,,,1122,1122,1122,1122,1122,1122,1122,,,1122,,,,,,',
+'1122,,,1122,1122,1122,1122,1122,1122,1122,1122,,1122,1122,1122,,1122',
+'1122,1122,1122,1122,507,,,,,,,,,,,,,,,,507,507,,1122,,,1122,,,1122,1122',
+',,1122,,,507,,507,1122,507,507,,507,507,,,507,1122,507,,,,1122,1122',
+'1122,1122,,1122,1122,1122,1122,,,,,1122,1122,,,,22,22,22,1122,22,1122',
+'1122,1122,22,22,1122,1122,,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,560,,,,,,,,,,,,,,,,560,560,,22,,,22,,,22,22,,,22,,,560,,560,22',
+'560,560,,560,560,,,560,22,560,,,,22,22,22,22,,22,22,22,22,,,,,22,22',
+',,,,,,22,,22,22,22,30,,22,22,,,,30,30,30,,,30,30,30,494,30,,,,,,,,30',
+'30,30,30,,,,494,494,,,,30,30,,30,30,30,30,30,,,,494,,494,,494,494,,494',
+'494,,,,,,,,,,,30,30,30,30,30,30,30,30,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,30,30,30,,',
+',31,31,31,,,31,31,31,,31,30,495,,30,30,,30,31,30,31,31,,,,,30,,495,495',
+'31,31,,31,31,31,31,31,,,,,,,495,,,,495,495,,495,495,,,,,,,,31,31,31',
+'31,31,31,31,31,31,31,31,31,31,31,,,31,31,31,,,31,,31,31,,,31,31,,31',
+',31,,31,,31,31,,31,31,31,31,31,,31,,31,,,,,,,,,,,,,,31,,,31,31,,31,',
+'31,32,32,32,,32,,31,,32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32,32',
+'32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,,32',
+'32,32,32,32,353,353,353,353,353,353,353,353,353,353,353,,353,353,,,353',
+'353,,32,,,32,,,32,32,,,32,,32,353,32,353,32,353,353,32,353,353,353,353',
+'353,32,353,,,,32,32,32,32,,32,32,32,32,,,,,32,32,,,,33,33,33,32,33,32',
+'32,32,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,33',
+'352,352,352,352,352,352,352,352,352,352,352,,352,352,,,352,352,,33,',
+',33,,,33,33,,,33,,33,352,33,352,33,352,352,33,352,352,352,352,352,33',
+'352,,,,33,33,33,33,,33,33,33,33,,,,,33,33,,,,34,34,34,33,34,33,33,33',
+'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,34,493,',
+',,,,,,,,,,,,,,493,493,,34,,,34,,,34,34,,,34,,34,493,34,493,34,493,493',
+'34,493,493,,,,34,,,,,34,34,34,34,,34,34,34,34,,,,,34,34,,,,44,44,44',
+'34,44,34,34,34,44,44,34,34,,44,,44,44,44,44,44,44,44,,,,,,44,44,44,44',
+'44,44,44,,,44,,,,,,,44,,,44,44,44,44,44,44,44,44,,44,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,,,,47,47,47,45,47,45,45,45,47,47,45,45,,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,,,,48',
+'48,48,47,48,47,47,47,48,48,47,47,,48,,48,48,48,48,48,48,48,,,,,,48,48',
+'48,48,48,48,48,,,48,,,,,,,48,,,48,48,48,48,48,48,48,48,,48,48,48,,48',
+'48,48,48,48,,,,,,,,,,,,,,,,,,,,48,,,48,,,48,48,,,48,,,,,,48,,,,,,,,',
+'48,,,,,48,48,48,48,,48,48,48,48,,,,,48,48,,,,50,50,50,48,50,48,48,48',
+'50,50,48,48,,50,,50,50,50,50,50,50,50,,,,,,50,50,50,50,50,50,50,,,50',
+',,,,,,50,,,50,50,50,50,50,50,50,50,,50,50,50,,50,50,50,50,50,,,,,,,',
+',,,,,,,,,,,,50,,,50,,,50,50,,,50,,,,,,50,,,,,,,,,50,,,,,50,50,50,50',
+',50,50,50,50,,,,,50,50,,,,974,974,974,50,974,50,50,50,974,974,50,50',
+',974,,974,974,974,974,974,974,974,,,,,,974,974,974,974,974,974,974,',
+',974,,,,,,,974,,,974,974,974,974,974,974,974,974,,974,974,974,,974,974',
+'974,974,974,,,,,,,,,,,,,,,,,,,,974,,,974,,,974,974,,,974,,,,,,974,,',
+',,,,,,974,,,,,974,974,974,974,,974,974,974,974,,,,,974,974,,,,973,973',
+'973,974,973,974,974,974,973,973,974,974,,973,,973,973,973,973,973,973',
+'973,,,,,,973,973,973,973,973,973,973,,,973,,,,,,,973,,,973,973,973,973',
+'973,973,973,973,973,973,973,973,,973,973,973,973,973,,,,,,,,,,,,,,,',
+',,,,973,,,973,,,973,973,,,973,,,,973,,973,,,973,,,,,,973,,,,,973,973',
+'973,973,,973,973,973,973,,,,,973,973,,,,,,,973,,973,973,973,64,,973',
+'973,,,,64,64,64,,,64,64,64,,64,,,,,,,,64,,64,64,64,,,,709,709,709,709',
+'64,64,,64,64,64,64,64,,,,,709,709,709,,,,,,,,,,,709,709,,,709,64,64',
+'64,64,64,64,64,64,64,64,64,64,64,64,,,64,64,64,,,64,,,64,,,64,64,,64',
+',64,,64,,64,64,,64,64,64,64,64,,64,,64,,709,709,709,709,,709,709,709',
+'709,,,,64,709,709,64,64,64,64,,64,709,64,709,709,709,,64,66,66,66,66',
+'66,,,,66,66,,,,66,,66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,',
+'66,,,,,,66,66,,66,66,66,66,66,66,66,66,66,,66,66,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,67,,,,,67,67,,,,68,68,68,67,68,67,67,67,68,68,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,,,,954,954,954,68,954,68,68,68,954,954,68,68,,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,954,,954,954,954,954,,,,,954,954,,,,71,71,71,954,71,954,954,954',
+'71,71,954,954,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,',
+'71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,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,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,72,,,,75,75,75,72,75,72,72,72,75,75,72,72,,75,,75,75,75,75,75,75',
+'75,,,,,,75,75,75,75,75,75,75,,,75,,,,,,,75,,,75,75,75,75,75,75,75,75',
+',75,75,75,,75,75,75,75,75,,,,,,,,,,,,,,,,,,,,75,,,75,,,75,75,,,75,,',
+',,,75,,,,,,,,,75,,,,,75,75,75,75,,75,75,75,75,,,,,75,75,75,,,,,75,75',
+',75,75,75,,,75,75,949,949,949,,949,,,,949,949,,,,949,,949,949,949,949',
+'949,949,949,,,,,,949,949,949,949,949,949,949,,,949,,,,,,,949,,,949,949',
+'949,949,949,949,949,949,,949,949,949,,949,949,949,949,949,,,,,,,,,,',
+',,,,,,,,,949,,,949,,,949,949,,,949,,,,,,949,,,,,,,,,949,,,,,949,949',
+'949,949,,949,949,949,949,,,,,949,949,,,,945,945,945,949,945,949,949',
+'949,945,945,949,949,,945,,945,945,945,945,945,945,945,,,,,,945,945,945',
+'945,945,945,945,,,945,,,,,,,945,,,945,945,945,945,945,945,945,945,,945',
+'945,945,,945,945,945,945,945,,,,,,,,,,,,,,,,,,,,945,,,945,,,945,945',
+',,945,,,,,,945,,,,,,,,,945,,,,,945,945,945,945,,945,945,945,945,,,,',
+'945,945,,,,,,,945,,945,945,945,,,945,945,121,121,121,121,121,,,,121',
+'121,,,,121,,121,121,121,121,121,121,121,,,,,,121,121,121,121,121,121',
+'121,,,121,,,,,,121,121,121,121,121,121,121,121,121,121,121,121,,121',
+'121,121,,121,121,121,121,121,,,,,,,,,,,,,,,,,,,,121,,,121,,,121,121',
+',,121,,121,,,,121,,,,,,,,,121,,,,,121,121,121,121,,121,121,121,121,',
+',,,121,121,,,,,,121,121,,121,121,121,,,121,121,126,126,126,,126,,,,126',
+'126,,,,126,,126,126,126,126,126,126,126,,,,,,126,126,126,126,126,126',
+'126,,,126,,,,,,,126,,,126,126,126,126,126,126,126,126,,126,126,126,',
+'126,126,126,126,126,,,,,,,,,,,,,,,,,,,,126,,,126,,,126,126,,,126,,,',
+',,126,,,,,,,,,126,,,,,126,126,126,126,,126,126,126,126,,,,,126,126,',
+',,127,127,127,126,127,126,126,126,127,127,126,126,,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,,127,127,127,127,,,,,127,127,,,,128,128,128,127,128,127',
+'127,127,128,128,127,127,,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,,,,129,129,129,128,129,128,128,128,129,129,128,128,,129',
+',129,129,129,129,129,129,129,,,,,,129,129,129,129,129,129,129,,,129',
+',,,,,,129,,,129,129,129,129,129,129,129,129,,129,129,129,,129,129,129',
+'129,129,,,,,,,,,,,,,,,,,,,,129,,,129,,,129,129,,,129,,,,,,129,,,,,,',
+',,129,,,,,129,129,129,129,,129,129,129,129,,,,,129,129,,,,,,,129,,129',
+'129,129,,,129,129,130,130,130,130,130,,,,130,130,,,,130,,130,130,130',
+'130,130,130,130,,,,,,130,130,130,130,130,130,130,,,130,,,,,,130,130',
+',130,130,130,130,130,130,130,130,130,,130,130,130,,130,130,130,130,130',
+',,,,,,,,,,,,,,,,,,,130,,,130,,,130,130,,,130,,130,,,,130,,,,,,,,,130',
+',,,,130,130,130,130,,130,130,130,130,,,,,130,130,,,,917,917,917,130',
+'917,130,130,130,917,917,130,130,,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,,,,216,216,216,917,216,917,917,917,216,216,917',
+'917,,216,,216,216,216,216,216,216,216,,,,,,216,216,216,216,216,216,216',
+',,216,,,,,,,216,,,216,216,216,216,216,216,216,216,,216,216,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,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,,,,675,675,675,217,675,217,217',
+'217,675,675,217,217,,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,,,,,,,,,,,,,,,,,,,,675,,,675,,,675,675',
+',,675,,,,,,675,,,,,,,,,675,,,,,675,675,675,675,,675,675,675,675,,,,',
+'675,675,,,,,,,675,,675,675,675,,,675,675,674,674,674,674,674,,,,674',
+'674,,,,674,,674,674,674,674,674,674,674,,,,,,674,674,674,674,674,674',
+'674,,,674,,,,,,674,674,,674,674,674,674,674,674,674,674,674,,674,674',
+'674,,674,674,674,674,674,,,,,,,,,,,,,,,,,,,,674,,,674,,,674,674,,,674',
+',674,,,,674,,,,,,,,,674,,,,,674,674,674,674,,674,674,674,674,,,,,674',
+'674,,,,671,671,671,674,671,674,674,674,671,671,674,674,,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,,,,670,670,670',
+'671,670,671,671,671,670,670,671,671,,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,,,,669,669,669,670,669,670,670,670,669,669,670',
+'670,,669,,669,669,669,669,669,669,669,,,,,,669,669,669,669,669,669,669',
+',,669,,,,,,,669,,,669,669,669,669,669,669,669,669,,669,669,669,,669',
+'669,669,669,669,,,,,,,,,,,,,,,,,,,,669,,,669,,,669,669,,,669,,669,,',
+',669,,,,,,,,,669,,,,,669,669,669,669,,669,669,669,669,,,,,669,669,,',
+',,,,669,,669,669,669,,,669,669,667,667,667,667,667,,,,667,667,,,,667',
+',667,667,667,667,667,667,667,,,,,,667,667,667,667,667,667,667,,,667',
+',,,,,667,667,,667,667,667,667,667,667,667,667,667,,667,667,667,,667',
+'667,667,667,667,,,,,,,,,,,,,,,,,,,,667,,,667,,,667,667,,,667,,667,,',
+',667,,,,,,,,,667,,,,,667,667,667,667,,667,667,667,667,,,,,667,667,,',
+',636,636,636,667,636,667,667,667,636,636,667,667,,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,,,,626,626,626,636',
+'626,636,636,636,626,626,636,636,,626,,626,626,626,626,626,626,626,,',
+',,,626,626,626,626,626,626,626,,,626,,,,,,,626,,,626,626,626,626,626',
+'626,626,626,626,626,626,626,,626,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,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,,,,612,612,612,625,612,625,625,625,612,612,625,625,,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,,,,609',
+'609,609,612,609,612,612,612,609,609,612,612,,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,609,,,,,609,609,,,,603,603,603,609,603,609',
+'609,609,603,603,609,609,,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,,,,589,589,589,603,589,603,603,603,589,589,603,603,,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,,,,563,563,563',
+'589,563,589,589,589,563,563,589,589,,563,,563,563,563,563,563,563,563',
+',,,,,563,563,563,563,563,563,563,,,563,,,,,,,563,,,563,563,563,563,563',
+'563,563,563,,563,563,563,,563,563,563,563,563,,,,,,,,,,,,,,,,,,,,563',
+',,563,,,563,563,,,563,,,,,,563,,,,,,,,,563,,,,,563,563,563,563,,563',
+'563,563,563,,,,,563,563,,,,562,562,562,563,562,563,563,563,562,562,563',
+'563,,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,562,559,562,562,562,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,,,,556,556,556,559,556,559,559,559',
+'556,556,559,559,,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',
+',,,357,357,357,556,357,556,556,556,357,357,556,556,,357,,357,357,357',
+'357,357,357,357,,,,,,357,357,357,357,357,357,357,,,357,,,,,,,357,,,357',
+'357,357,357,357,357,357,357,,357,357,357,,357,357,357,357,357,,,,,,',
+',,,,,,,,,,,,,357,,,357,,,357,357,,,357,,,,,,357,,,,,,,,,357,,,,,357',
+'357,357,357,,357,357,357,357,,,,,357,357,,,,359,359,359,357,359,357',
+'357,357,359,359,357,357,,359,,359,359,359,359,359,359,359,,,,,,359,359',
+'359,359,359,359,359,,,359,,,,,,,359,,,359,359,359,359,359,359,359,359',
+',359,359,359,,359,359,359,359,359,,,,,,,,,,,,,,,,,,,,359,,,359,359,',
+'359,359,,,359,,,,,,359,,,,,,,,,359,,,,,359,359,359,359,,359,359,359',
+'359,,,,,359,359,,,,402,402,402,359,402,359,359,359,402,402,359,359,',
+'402,,402,402,402,402,402,402,402,,,,,,402,402,402,402,402,402,402,,',
+'402,,,,,,,402,,,402,402,402,402,402,402,402,402,,402,402,402,,402,402',
+'402,402,402,,,,,,,,,,,,,,,,,,,,402,,,402,,,402,402,,,402,,,,,,402,,',
+',,,,,,402,,,,,402,402,402,402,,402,402,402,402,,,,,402,402,,,,,,,402',
+',402,402,402,,,402,402,536,536,536,536,536,,,,536,536,,,,536,,536,536',
+'536,536,536,536,536,,,,,,536,536,536,536,536,536,536,,,536,,,,,,536',
+'536,536,536,536,536,536,536,536,536,536,536,,536,536,536,,536,536,536',
+'536,536,,,,,,,,,,,,,,,,,,,,536,,,536,,,536,536,,,536,,536,,,,536,,,',
+',,,,,536,,,,,536,536,536,536,,536,536,536,536,,,,,536,536,,,,,,536,536',
+',536,536,536,,,536,536,530,530,530,,530,,,,530,530,,,,530,,530,530,530',
+'530,530,530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,,,530,,,530',
+'530,530,530,530,530,530,530,,530,530,530,,530,530,530,530,530,,,,,,',
+',,,,,,,,,,,,,530,,,530,,,530,530,,,530,,,,,,530,,,,,,,,,530,,,,,530',
+'530,530,530,,530,530,530,530,,,,,530,530,,,,528,528,528,530,528,530',
+'530,530,528,528,530,530,,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,,,,526,526,526,528,526,528,528,528,526,526,528,528',
+',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',
+',,,516,516,516,526,516,526,526,526,516,516,526,526,,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,511',
+',516,516,,,,511,511,511,,,511,511,511,907,511,907,907,907,907,907,,',
+'511,511,511,,,,907,,,,,,511,511,,511,511,511,511,511,,,,,,,,775,907',
+'775,775,775,775,775,,,,907,907,907,907,,775,,907,,793,,793,793,793,793',
+'793,511,,,,,,,511,793,,,775,511,511,,,,907,,,775,775,775,775,,,,775',
+',,793,,,,,511,511,,,793,793,793,793,,,,793,,,,511,,,511,,483,483,483',
+'511,483,,,,483,483,511,,,483,,483,483,483,483,483,483,483,,,,,,483,483',
+'483,483,483,483,483,,,483,,,,,,,483,,,483,483,483,483,483,483,483,483',
+',483,483,483,,483,483,483,483,483,,,,,,,,,,,,,,,,,,,,483,,,483,,,483',
+'483,,,483,,,,,,483,,,,,,,,,483,,,,,483,483,483,483,,483,483,483,483',
+',,,,483,483,,,,482,482,482,483,482,483,483,483,482,482,483,483,,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,,,,481,481,481',
+'482,481,482,482,482,481,481,482,482,,481,,481,481,481,481,481,481,481',
+',,,,,481,481,481,481,481,481,481,,,481,,,,,,,481,,,481,481,481,481,481',
+'481,481,481,,481,481,481,,481,481,481,481,481,,,,,,,,,,,,,,,,,,,,481',
+',,481,,,481,481,,,481,,,,,,481,,,,,,,,,481,,,,,481,481,481,481,,481',
+'481,481,481,,,,,481,481,,,,479,479,479,481,479,481,481,481,479,479,481',
+'481,,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,,479,479,479,470,,479,479,,,,470,470,470,,,470,470,470,,470',
+',,,,,,,470,470,470,470,470,,,,,,,,470,470,,470,470,470,470,470,,,,,',
+',,,,,,,,,,,,,,,,,470,470,470,470,470,470,470,470,470,470,470,470,470',
+'470,,,470,470,470,,,470,,,470,,,470,470,,470,,470,,470,,470,470,,470',
+'470,470,470,470,,470,470,470,,,,,,,,,,,,,,470,,,470,470,470,470,,470',
+',470,,381,381,381,470,381,,,,381,381,,,,381,,381,381,381,381,381,381',
+'381,,,,,,381,381,381,381,381,381,381,,,381,,,,,,,381,,,381,381,381,381',
+'381,381,381,381,,381,381,381,,381,381,381,381,381,,,,,,,,,,,,,,,,,,',
+',381,,,381,,,381,381,,,381,,,,,,381,,,,,,,,,381,,,,,381,381,381,381',
+',381,381,381,381,,,,,381,381,,,,,,,381,,381,381,381,469,,381,381,,,',
+'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,,,,,,,,,,',
+',,,469,,,469,469,469,469,,469,460,469,,,,,469,460,460,460,,,460,460',
+'460,,460,,,,,,,,460,460,460,460,,,,,,,,,460,460,,460,460,460,460,460',
+',,,,,,,,,,,,,,,,,,,,,,460,460,460,460,460,460,460,460,460,460,460,460',
+'460,460,,,460,460,460,,,460,,460,460,,,460,460,,460,,460,,460,,460,460',
+',460,460,460,460,460,,460,460,460,,,,,,,,,,,,,,460,,,460,460,,460,,460',
+'432,432,432,,432,,460,,432,432,,,,432,,432,432,432,432,432,432,432,',
+',,,,432,432,432,432,432,432,432,,,432,,,,,,,432,,,432,432,432,432,432',
+'432,432,432,,432,432,432,,432,432,432,432,432,,,,,,,,,,,,,,,,,,,,432',
+',,432,,,432,432,,,432,,,,,,432,,,,,,,,,432,,,,,432,432,432,432,,432',
+'432,432,432,,,,,432,432,,,,219,219,219,432,219,432,432,432,219,219,432',
+'432,,219,,219,219,219,219,219,219,219,,,,,,219,219,219,219,219,219,219',
+',,219,,,,,,,219,,,219,219,219,219,219,219,219,219,,219,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,219,220,219,219,219,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,,,,222,222,222,220,222,220,220,220',
+'222,222,220,220,,222,,222,222,222,222,222,222,222,,,,,,222,222,222,222',
+'222,222,222,,,222,,,,,,,222,,,222,222,222,222,222,222,222,222,,222,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,223,,,,,223,223,,,,897,897,897',
+'223,897,223,223,223,897,897,223,223,,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,,,,228,228,228,897,228,897,897,897,228,228,897',
+'897,,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,228,229,228,228,228,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,229,230,229,229,229',
+'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,,,868,868,868,230,868,230,230,230,868,868,230,230,,868,,868,868',
+'868,868,868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,,868',
+',,868,868,868,868,868,868,868,868,,868,868,868,,868,868,868,868,868',
+',,,,,,,,,,,,,,,,,,,868,,,868,,,868,868,,,868,,,,,,868,,,,,,,,,868,,',
+',,868,868,868,868,,868,868,868,868,,,,,868,868,,,,867,867,867,868,867',
+'868,868,868,867,867,868,868,,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,,,,866,866,866,867,866,867,867,867,866,866,867,867,',
+'866,,866,866,866,866,866,866,866,,,,,,866,866,866,866,866,866,866,,',
+'866,,,,,,,866,,,866,866,866,866,866,866,866,866,,866,866,866,,866,866',
+'866,866,866,,,,,,,,,,,,,,,,,,,,866,,,866,,,866,866,,,866,,,,,,866,,',
+',,,,,,866,,,,,866,866,866,866,,866,866,866,866,,,,,866,866,,,,865,865',
+'865,866,865,866,866,866,865,865,866,866,,865,,865,865,865,865,865,865',
+'865,,,,,,865,865,865,865,865,865,865,,,865,,,,,,,865,,,865,865,865,865',
+'865,865,865,865,,865,865,865,,865,865,865,865,865,,,,,,,,,,,,,,,,,,',
+',865,,,865,,,865,865,,,865,,,,,,865,,,,,,,,,865,,,,,865,865,865,865',
+',865,865,865,865,,,,,865,865,,,,852,852,852,865,852,865,865,865,852',
+'852,865,865,,852,,852,852,852,852,852,852,852,,,,,,852,852,852,852,852',
+'852,852,,,852,,,,,,,852,,,852,852,852,852,852,852,852,852,,852,852,852',
+',852,852,852,852,852,,,,,,,,,,,,,,,,,,,,852,,,852,,,852,852,,,852,,',
+',,,852,,,,,,,,,852,,,,,852,852,852,852,,852,852,852,852,,,,,852,852',
+',,,241,241,241,852,241,852,852,852,241,241,852,852,,241,,241,241,241',
+'241,241,241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241',
+'241,241,241,241,241,241,241,,241,241,241,,241,241,241,241,241,,,,,,',
+',,,,,,,,,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,,241,,,,,241',
+'241,241,241,,241,241,241,241,,,,,241,241,,,,844,844,844,241,844,241',
+'241,241,844,844,241,241,,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,,844,844,844,844',
+',,,,844,844,,,,245,245,245,844,245,844,844,844,245,245,844,844,,245',
+',245,245,245,245,245,245,245,,,,,,245,245,245,245,245,245,245,,,245',
+',,,,,,245,,,245,245,245,245,245,245,245,245,,245,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',
+',,,250,250,250,249,250,249,249,249,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,,,,251,251,251,250,251,250',
+'250,250,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,,,,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,,,,260,260,260',
+'259,260,259,259,259,260,260,259,259,,260,,260,260,260,260,260,260,260',
+',,,,,260,260,260,260,260,260,260,,,260,,,,,,,260,,,260,260,260,260,260',
+'260,260,260,,260,260,260,,260,260,260,260,260,,,,,,,,,,,,,,,,,,,,260',
+',,260,,,260,260,,,260,,,,,,260,,,,,,,,,260,,,,,260,260,260,260,,260',
+'260,260,260,,,,,260,260,,,,261,261,261,260,261,260,260,260,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,,,,262',
+'262,262,261,262,261,261,261,262,262,261,261,,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,,,,263,263,263,262,263,262,262,262',
+'263,263,262,262,,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,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,,,,265,265,265,264,265,264',
+'264,264,265,265,264,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,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,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,,,,271,271,271',
+'266,271,266,266,266,271,271,266,266,,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,,,,824,824,824,271,824,271,271,271,824,824,271',
+'271,,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,824,824,,824',
+'824,824,824,824,,,,,,,,,,,,,,,,,,,,824,,,824,,,824,824,,,824,,,,,,824',
+',,,,,,,,824,,,,,824,824,824,824,,824,824,824,824,,,,,824,824,,,,779',
+'779,779,824,779,824,824,824,779,779,824,824,,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,,,,765,765,765,779,765,779,779,779',
+'765,765,779,779,,765,,765,765,765,765,765,765,765,,,,,,765,765,765,765',
+'765,765,765,,,765,,,,,,,765,,,765,765,765,765,765,765,765,765,,765,765',
+'765,,765,765,765,765,765,,,,,,,,,,,,,,,,,,,,765,,,765,,,765,765,,,765',
+',765,,,,765,,,,,,,,,765,,,,,765,765,765,765,,765,765,765,765,,,,,765',
+'765,,,,287,287,287,765,287,765,765,765,287,287,765,765,,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,,,,745,745,745,287,745',
+'287,287,287,745,745,287,287,,745,,745,745,745,745,745,745,745,,,,,,745',
+'745,745,745,745,745,745,,,745,,,,,,,745,,,745,745,745,745,745,745,745',
+'745,,745,745,745,,745,745,745,745,745,,,,,,,,,,,,,,,,,,,,745,,,745,',
+',745,745,,,745,,,,,,745,,,,,,,,,745,,,,,745,745,745,745,,745,745,745',
+'745,,,,,745,745,,,,742,742,742,745,742,745,745,745,742,742,745,745,',
+'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,,,,294,294',
+'294,742,294,742,742,742,294,294,742,742,,294,,294,294,294,294,294,294',
+'294,,,,,,294,294,294,294,294,294,294,,,294,,,,,,,294,,,294,294,294,294',
+'294,294,294,294,294,294,294,294,,294,294,294,294,294,,,,,,,,,,,,,,,',
+',,,,294,,,294,,,294,294,,,294,,294,,294,,294,,,294,,,,,,294,,,,,294',
+'294,294,294,,294,294,294,294,,,,,294,294,,,,295,295,295,294,295,294',
+'294,294,295,295,294,294,,295,,295,295,295,295,295,295,295,,,,,,295,295',
+'295,295,295,295,295,,,295,,,,,,,295,,,295,295,295,295,295,295,295,295',
+'295,295,295,295,,295,295,295,295,295,,,,,,,,,,,,,,,,,,,,295,,,295,,',
+'295,295,,,295,,295,,295,,295,,,295,,,,,,295,,,,,295,295,295,295,,295',
+'295,295,295,,,,,295,295,,,,303,303,303,295,303,295,295,295,303,303,295',
+'295,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303,303,303,303',
+',,303,,,,,,,303,,,303,303,303,303,303,303,303,303,303,303,303,303,,303',
+'303,303,303,303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303,,,303,,303,,303',
+',303,,,303,,,,,,303,,,,,303,303,303,303,,303,303,303,303,,,,,303,303',
+'303,,,733,733,733,303,733,303,303,303,733,733,303,303,,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,733,733,,,,,733,733,,,,310,310,310',
+'733,310,733,733,733,310,310,733,733,,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,,,,686,686,686,310,686,310,310,310,686,686,310',
+'310,,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,,,,312',
+'312,312,686,312,686,686,686,312,312,686,686,,312,,312,312,312,312,312',
+'312,312,,,,,,312,312,312,312,312,312,312,,,312,,,,,,,312,,,312,312,312',
+'312,312,312,312,312,,312,312,312,,312,312,312,312,312,,,,,,,,,,,,,,',
+',,,,,312,,,312,,,312,312,,,312,,,,,,312,,,,,,,,,312,,,,,312,312,312',
+'312,,312,312,312,312,,,,,312,312,,,,315,315,315,312,315,312,312,312',
+'315,315,312,312,,315,,315,315,315,315,315,315,315,,,,,,315,315,315,315',
+'315,315,315,,,315,,,,,,,315,,,315,315,315,315,315,315,315,315,,315,315',
+'315,,315,315,315,315,315,,,,,,,,,,,,,,,,,,,,315,,,315,,,315,315,,,315',
+',,,,,315,,,,,,,,,315,,,,,315,315,315,315,,315,315,315,315,,,,,315,315',
+',,,316,316,316,315,316,315,315,315,316,316,315,315,,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,316,316,,316,316,316,316,316,,,,,,',
+',,,,,,,,,,,,,316,,,316,,,316,316,,,316,,,,,,316,,,,,,,,,316,,,,,316',
+'316,316,316,,316,316,316,316,,,,,316,316,,,,685,685,685,316,685,316',
+'316,316,685,685,316,316,,685,,685,685,685,685,685,685,685,,,,,,685,685',
+'685,685,685,685,685,,,685,,,,,,,685,,,685,685,685,685,685,685,685,685',
+',685,685,685,,685,685,685,685,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685',
+'685,,,685,,,,,,685,,,,,,,,,685,,,,,685,685,685,685,,685,685,685,685',
+',,,,685,685,,,,,,,685,,685,685,685,,,685,685,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,,,,,321,321,321,321,,321,321,321,321,',
+',,,321,321,,,,681,681,681,321,681,321,321,321,681,681,321,321,,681,',
+'681,681,681,681,681,681,681,,,,,,681,681,681,681,681,681,681,,,681,',
+',,,,,681,,,681,681,681,681,681,681,681,681,,681,681,681,,681,681,681',
+'681,681,,,,,,,,,,,,,,,,,,,,681,,,681,,,681,681,,,681,,,,,,681,,,,,,',
+',,681,,,,,681,681,681,681,,681,681,681,681,,,,,681,681,,,,680,680,680',
+'681,680,681,681,681,680,680,681,681,,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,,,,679,679,679,680,679,680,680,680,679,679,680',
+'680,,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,679',
+',,,678,678,678,679,678,679,679,679,678,678,679,679,,678,,678,678,678',
+'678,678,678,678,,,,,,678,678,678,678,678,678,678,,,678,,,,,,,678,,,678',
+'678,678,678,678,678,678,678,678,678,678,678,,678,678,678,678,678,,,',
+',,,,,,,,,,,,,,,,678,,,678,,,678,678,,,678,,678,,678,,678,,,678,,,,,',
+'678,,,,,678,678,678,678,,678,678,678,678,,,,,678,678,,,,218,218,218',
+'678,218,678,678,678,218,218,678,678,,218,,218,218,218,218,218,218,218',
+',,,,,218,218,218,218,218,218,218,,,218,,,,,,,218,,,218,218,218,218,218',
+'218,218,218,,218,218,218,,218,218,,,218,,,,,,,,,,,,,,,,,,,,218,,,218',
+',,218,218,,,218,,218,,,,,,,,,,,,,,,,,,218,218,218,218,,218,218,218,218',
+',,,,218,218,,,,221,221,221,218,221,218,218,218,221,221,,,,221,,221,221',
+'221,221,221,221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,,,221',
+',,221,221,221,221,221,221,221,221,,221,221,221,,221,221,,,221,,,,,,',
+',,,,,,,,,,,,,221,,,221,,,221,221,,,221,,221,,,,,,,,,,,,,,,,,,221,221',
+'221,221,,221,221,221,221,,,,,221,221,,,,553,553,553,221,553,221,221',
+'221,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,,,,',
+',,,,,,,,,,,,,,,553,553,553,553,,553,553,553,553,,,,,553,553,,,,78,78',
+'78,553,78,553,553,553,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,78,,78,78,78,,78,78',
+',,78,,,,,,,,,,,,,,,,,,,,78,,,78,,,78,78,,,78,,,,,,,,,,,,,,,,,,,,78,78',
+'78,78,,78,78,78,78,,,,,78,78,,,,544,544,544,78,544,78,78,78,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,,,,348,348,348,544',
+'348,544,544,544,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,348,348,,,,,348,348',
+',,,1103,1103,1103,348,1103,348,348,348,1103,1103,,,,1103,,1103,1103',
+'1103,1103,1103,1103,1103,,,,,,1103,1103,1103,1103,1103,1103,1103,,,1103',
+',,,,,,1103,,,1103,1103,1103,1103,1103,1103,1103,1103,,1103,1103,1103',
+',1103,1103,,,1103,,,,,,,,,,,,,,,,,,,,1103,,,1103,,,1103,1103,,,1103',
+',,,,,,,,,,,,,,,,,,,1103,1103,1103,1103,,1103,1103,1103,1103,,,,,1103',
+'1103,,,,1033,1033,1033,1103,1033,1103,1103,1103,1033,1033,,,,1033,,1033',
+'1033,1033,1033,1033,1033,1033,,,,,,1033,1033,1033,1033,1033,1033,1033',
+',,1033,,,,,,,1033,,,1033,1033,1033,1033,1033,1033,1033,1033,,1033,1033',
+'1033,,1033,1033,,,1033,,,,,,,,,,,,,,,,,,,,1033,,,1033,,,1033,1033,,',
+'1033,,,,,,,,,,,,,,,,,,,,1033,1033,1033,1033,,1033,1033,1033,1033,,,',
+',1033,1033,,,,77,77,77,1033,77,1033,1033,1033,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,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,77,76,77,77,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,76,,,,1023,1023,1023,76,1023,76,76,76,1023',
+'1023,,,,1023,,1023,1023,1023,1023,1023,1023,1023,,,,,,1023,1023,1023',
+'1023,1023,1023,1023,,,1023,,,,,,,1023,,,1023,1023,1023,1023,1023,1023',
+'1023,1023,,1023,1023,1023,,1023,1023,,,1023,,,,,,,,,,,,,,,,,,,,1023',
+',,1023,,,1023,1023,,,1023,,,,,,,,,,,,,,,,,,,,1023,1023,1023,1023,,1023',
+'1023,1023,1023,,,,,1023,1023,,,,759,759,759,1023,759,1023,1023,1023',
+'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,,,,38,38,38',
+'759,38,759,759,759,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,,,1038,,1038,1038,1038,1038',
+'1038,,,,,,,,,1038,,38,38,38,38,,38,38,38,38,,,,,38,38,,,,38,,1038,38',
+',38,38,38,748,748,748,,748,1038,1038,,748,748,1038,,,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,,,,329,329,329,748,329,748,748,748,329',
+'329,,,,329,,329,329,329,329,329,329,329,,,,,,329,329,329,329,329,329',
+'329,,,329,,,,,,,329,,,329,329,329,329,329,329,329,329,,329,329,329,',
+'329,329,,,329,,,,,,,,,,,,,,,,,,,,329,,,329,,,329,329,,,329,,,777,,777',
+'777,777,777,777,,,,,,,,,777,,329,329,329,329,,329,329,329,329,,,,,329',
+'329,,,,329,,777,329,,329,329,329,37,37,37,,37,777,777,,37,37,777,,,37',
+',37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37,,,,,,,37,,,37,37',
+'37,37,37,37,37,37,,37,37,37,,37,37,,,37,,,,,,,,,,,,,,,,,,,,37,,,37,',
+',37,37,,,37,,37,,,,,,,,,,,,,,,,,,37,37,37,37,,37,37,37,37,,,,,37,37',
+',,,,,,37,,37,37,37,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,423,423',
+',,,,,,,,,,,,,423,423,,423,423,423,423,423,423,423,423,423,423,423,423',
+',,423,423,,,,,,,,,,,,,,423,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8',
+'8,8,8,,,,8,8,8,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8',
+',8,8,8,8,8,8,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,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,665,,,665,665,,,,665,665,665',
+'665,,,,,,,,,,,,,,665,665,,665,665,665,665,665,665,665,665,665,665,665',
+'665,,,665,665,875,875,875,875,,,1182,,1182,1182,1182,1182,1182,665,',
+',875,875,875,875,,1182,,875,875,,,,,875,875,,,875,875,,,,,,,,,1182,',
+',,,,,,,,875,1182,1182,875,,,1182,875,,,875,,875,,,,,,,875,,,,,,,875',
+',,,875,875,875,875,,875,875,875,875,,,,,875,875,1200,1200,1200,1200',
+',,875,,875,875,875,,,875,875,,1200,1200,1200,1200,,,1036,1200,1036,1036',
+'1036,1036,1036,1200,1200,,,1200,,,,1036,,,,,,,,,,,,,,,,1200,,,1200,',
+',1036,1200,,,1200,,,,,1036,1036,1036,1036,,,,1036,,,,1200,,,,1200,1200',
+'1200,1200,,1200,1200,1200,1200,,,,,1200,1200,1001,1001,1001,1001,,,1200',
+',1200,1200,1200,,,1200,1200,,1001,1001,1001,1001,,,1094,1001,1094,1094',
+'1094,1094,1094,1001,1001,,,1001,,,,1094,,,,,,,,,,,,,,,,1001,,,1001,',
+',1094,1001,,,1001,,,,,1094,1094,1094,1094,,,,1094,,,,1001,,,,1001,1001',
+'1001,1001,,1001,1001,1001,1001,,,,,1001,1001,,,,,,,1001,,1001,1001,1001',
+',,1001,1001,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,725,,,725,725,,,,725,725,725,725,,,,,,',
+',,,,,,,725,725,,725,725,725,725,725,725,725,725,725,725,725,725,,,725',
+'484,484,484,484,,,1041,,1041,1041,1041,1041,1041,,,,484,484,484,484',
+',1041,,484,,,,,,484,484,,,484,,,,,,,,,,1041,,,,,,,,,,484,1041,1041,484',
+',,1041,484,,,484,,,,,,,,,,,,,,,,484,,,,484,484,484,484,,484,484,484',
+'484,,,,,484,484,1124,1124,1124,1124,,,484,,484,484,484,,,484,484,,1124',
+'1124,1124,1124,,,363,1124,363,363,363,363,363,1124,1124,,,1124,,,,363',
+',,,,,,,,,,,,,,,1124,,,1124,,,363,1124,,,1124,,1124,,,363,363,363,363',
+',,,363,,,,1124,,,,1124,1124,1124,1124,,1124,1124,1124,1124,,,,,1124',
+'1124,1138,1138,1138,1138,,,1124,,1124,1124,1124,,,1124,1124,,1138,1138',
+'1138,1138,,,1097,1138,1097,1097,1097,1097,1097,1138,1138,,,1138,,,,1097',
+',,,,,,,,,,,,,,,1138,,,1138,,,1097,1138,,,1138,,,,,1097,1097,1097,1097',
+',,,1097,,,,1138,,,,1138,1138,1138,1138,,1138,1138,1138,1138,,,,,1138',
+'1138,1140,1140,1140,1140,,,1138,,1138,1138,1138,,,1138,1138,,1140,1140',
+'1140,1140,,,1043,1140,1043,1043,1043,1043,1043,1140,1140,,,1140,,,,1043',
+',,,,,,,,,,,,,,,1140,,,1140,,,1043,1140,,,1140,,1140,,,,,1043,1043,,',
+',1043,,,,1140,,,,1140,1140,1140,1140,,1140,1140,1140,1140,,,,,1140,1140',
+'1176,1176,1176,1176,,,1140,,1140,1140,1140,,,1140,1140,,1176,1176,1176',
+'1176,,,1099,1176,1099,1099,1099,1099,1099,1176,1176,,,1176,,,,1099,',
+',,,,,,,,,,,,,,1176,,,1176,,,1099,1176,,,1176,,,,,,,1099,1099,,,,1099',
+',,,1176,,,,1176,1176,1176,1176,,1176,1176,1176,1176,,,,,1176,1176,889',
+'889,889,889,,,1176,,1176,1176,1176,,,1176,1176,,889,889,889,889,,,1186',
+'889,1186,1186,1186,1186,1186,889,889,,,889,,,,1186,,,,,,,,,,,,,,,,889',
+',,889,,,1186,889,,,889,,,,,,,1186,1186,,,,1186,,,,889,,,,889,889,889',
+'889,,889,889,889,889,,,,,889,889,881,881,881,881,,,889,,889,889,889',
+',,889,889,,881,881,881,881,,,1212,881,1212,1212,1212,1212,1212,881,881',
+',,881,,,,1212,,,,,,,,,,,,,,,,881,,,881,,,1212,881,,,881,,881,,,,,1212',
+'1212,,,,1212,,,,881,,,,881,881,881,881,,881,881,881,881,,,,,881,881',
+'871,871,871,871,,,881,,881,881,881,,,881,881,,871,871,871,871,,,1180',
+'871,1180,1180,1180,1180,1180,871,871,,,871,,,,1180,,,,,,,,,,,,,,,,871',
+',,871,,,1180,871,,,871,,,,,1180,1180,1180,1180,,,,1180,,,,871,,,,871',
+'871,871,871,,871,871,871,871,,,,,871,871,874,874,874,874,,,871,,871',
+'871,871,,,871,871,,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,1084,1084,1084,1084,,',
+'874,,874,874,874,,,874,874,,1084,1084,1084,1084,,,1184,1084,1184,1184',
+'1184,1184,1184,1084,1084,,,1084,,,,1184,,,,,,,,,,,,,,,,1084,,,1084,',
+',1184,1084,,,1084,,,,,,,1184,1184,,,,1184,,,,1084,,,,1084,1084,1084',
+'1084,,1084,1084,1084,1084,,,,,1084,1084,985,985,985,985,,,1084,,1084',
+'1084,1084,,,1084,1084,,985,985,985,985,,,1159,985,1159,1159,1159,1159',
+'1159,985,985,,,985,,,,1159,,,,,,,,,,,,,,,,985,,,985,,,1159,985,,,985',
+',,,,,,1159,1159,,,,1159,,,,985,,,,985,985,985,985,,985,985,985,985,',
+',,,985,985,702,702,702,702,,,985,,985,985,985,,,985,985,,702,702,702',
+'702,,,642,702,642,642,642,642,642,702,702,,,702,,,,642,,,,,,,,,,,,,',
+',,702,,,702,,,642,702,,,702,,702,,,642,642,642,642,,,,642,,,,702,,,',
+'702,702,702,702,,702,702,702,702,,,,,702,702,702,953,953,953,953,,702',
+',702,702,702,,,702,702,,,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,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,24,24,,,24,24,,,,24',
+'24,24,24,,,,,,24,,,,,,,,24,24,,24,24,24,24,24,24,24,24,24,24,24,24,',
+',24,891,891,891,891,,,,404,,404,404,404,404,404,,,891,891,891,,,,404',
+',,,,,,891,891,,,891,708,708,708,708,,,,,,,404,404,,,,,708,708,708,404',
+'404,404,404,,,,404,,,708,708,,,708,,,,,,,,,,,,,,,,891,891,891,891,,891',
+'891,891,891,,,,,891,891,,,,,,,891,,891,891,891,,,,,,,,,708,708,708,708',
+',708,708,708,708,,,,,708,708,890,890,890,890,,,708,,708,708,708,,,,',
+',890,890,890,1157,1157,,,1157,,,,,,890,890,1157,1157,890,1157,1157,1157',
+'1157,1157,1157,1157,,,1157,1157,,,,1157,1157,1157,1157,,,,,,1157,,,',
+',,,,1157,1157,,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157',
+'1157,,,1157,890,890,890,890,,890,890,890,890,,,,,890,890,672,672,,,672',
+',890,,890,890,890,,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,635,635,672,,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,558,558,635,,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',
+'634,634,558,,634,,,,,,,,634,634,,634,634,634,634,634,634,634,,,634,634',
+',,,634,634,634,634,,,,,,634,,,,,,,,634,634,,634,634,634,634,634,634',
+'634,634,634,634,634,634,557,557,634,,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,478,478,557,,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,548,548,478,,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,628,628,548,,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,290,290,628,,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,225,225,290,,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,627,627,225,,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,477,477,627,,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,477,547,547,477,,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,1152,1152,547,,1152,,,,,,,,1152,1152',
+',1152,1152,1152,1152,1152,1152,1152,,,1152,1152,,,,1152,1152,1152,1152',
+',,,,,1152,,,,,,,,1152,1152,,1152,1152,1152,1152,1152,1152,1152,1152',
+'1152,1152,1152,1152,1156,1156,1152,,1156,,,,,,,,1156,1156,,1156,1156',
+'1156,1156,1156,1156,1156,,,1156,1156,,,,1156,1156,1156,1156,,,,,,1156',
+',,,,,,,1156,1156,,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156',
+'1156,1156,673,673,1156,,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,224,224,673,,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' ]
+ racc_action_check = arr = ::Array.new(28164, 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 = [
+ 3830, 1471, nil, 62, nil, 5256, 1079, 1168, 24697, 24825,
+ 1162, nil, 1068, 1061, 1114, 815, 1085, 1080, 587, 248,
+ nil, -41, 5780, 2390, 26779, 1050, nil, 339, nil, 5,
+ 5921, 6031, 6165, 6296, 6427, nil, 3542, 24430, 24021, nil,
+ 921, 390, 614, 984, 6558, 6689, 128, 6820, 6951, 522,
+ 7082, 792, 831, 804, 850, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 7485, nil, 7626, 7757, 7888, -15,
+ nil, 8150, 8281, nil, nil, 8412, 23628, 23497, 22842, nil,
+ nil, nil, nil, nil, nil, 589, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 471, nil, nil, 583, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 794,
+ nil, 8829, nil, nil, nil, nil, 8972, 9103, 9234, 9365,
+ 9508, nil, 2390, nil, 687, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 573, nil, 3110, 9770, 9901, 22449, 14708,
+ 14839, 22580, 14970, 15101, 28049, 27622, nil, nil, 15363, 15494,
+ 15625, nil, nil, 933, 74, 108, 344, 109, 167, 220,
+ nil, 16411, 4118, 131, nil, 16673, 16804, 16935, 17066, 17197,
+ 17328, 17459, 17590, 17721, 17852, 17983, 18114, 18245, 18376, 18507,
+ 18638, 18769, 18900, 19031, 19162, 19293, 19424, nil, nil, nil,
+ nil, 19555, nil, nil, 409, 444, 475, 504, 556, 557,
+ 559, -50, -32, 198, nil, nil, nil, 20079, nil, nil,
+ 27561, nil, nil, 1255, 20472, 20603, nil, nil, nil, nil,
+ nil, nil, nil, 20734, nil, 3254, nil, 1211, 1219, nil,
+ 20996, 1281, 21258, nil, nil, 21389, 21520, nil, nil, 370,
+ nil, 21794, 1223, 1283, 1273, 1526, 1291, 1333, 1291, 24291,
+ 950, 1221, 1110, 1083, 1383, 1077, nil, 1383, 1346, 6,
+ -60, 208, nil, nil, nil, 278, 140, 287, 23104, nil,
+ 98, 864, 6296, 6165, 777, nil, 851, 12283, nil, 12414,
+ 819, 2822, 358, 25560, 899, 2246, 2102, 1367, 916, nil,
+ 485, 600, 988, 1017, 687, 1094, nil, 849, 2534, 14,
+ -11, 14166, 1238, 4262, 291, 1189, 1072, 551, 943, 777,
+ 1264, 1087, 1286, nil, nil, 1085, 1229, 398, nil, 844,
+ nil, 1210, 12545, nil, 26850, nil, 178, 405, 293, 281,
+ 392, -41, -25, 400, nil, nil, nil, nil, nil, nil,
+ nil, nil, 1212, 24569, nil, nil, nil, nil, 1207, nil,
+ 1273, 1178, 14577, 1176, nil, nil, 1101, nil, 266, 280,
+ 1202, nil, nil, 2678, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 2822, 1098, nil, 1093, 1091, 356, 277,
+ 14443, nil, nil, nil, 805, 0, 1113, nil, nil, 14307,
+ 14029, nil, nil, nil, 10, nil, 1108, 27744, 27378, 13888,
+ -31, 13757, 13626, 13495, 25459, 4406, 4550, 1133, 1277, 1040,
+ 1036, 1035, 1025, 6427, 5870, 5983, 4694, 4838, 4982, 5113,
+ 4262, 5256, 1353, 1388, 5387, 5518, 3398, 5649, nil, -14,
+ nil, 13365, nil, nil, nil, nil, 13224, 944, 931, 926,
+ nil, nil, nil, 922, nil, nil, 13093, nil, 12962, nil,
+ 12831, nil, 170, nil, nil, nil, 12688, 935, nil, 910,
+ 904, nil, nil, 900, 22973, 860, 5113, 27805, 27439, 849,
+ 898, nil, nil, 22711, 798, nil, 12152, 27317, 27195, 12021,
+ 5780, 3974, 11890, 11759, 828, 822, nil, nil, 662, 549,
+ 544, 539, 505, nil, 498, 481, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 460, 699, nil, nil, 11628,
+ nil, nil, nil, 11, nil, nil, nil, 519, nil, nil,
+ 509, 374, 400, 11497, 510, 481, 320, 351, nil, 11366,
+ nil, nil, 11235, nil, nil, nil, 3398, 333, nil, 4694,
+ 2, 255, 162, 80, 44, 11104, 10973, 27683, 27500, 1231,
+ nil, nil, 939, nil, 27256, 27134, 10842, nil, nil, 24,
+ 4838, nil, 26540, nil, nil, nil, nil, 1004, nil, nil,
+ nil, 1345, nil, nil, 174, nil, 176, nil, nil, 1319,
+ nil, 1318, nil, nil, nil, 24953, nil, 10711, 1292, 10568,
+ 10437, 10306, 27073, 27988, 10175, 10032, 389, 1328, 22318, 22187,
+ 22056, 21925, 1295, nil, nil, 21651, 21127, 1261, nil, nil,
+ nil, 169, 142, 139, 695, 1210, 1245, nil, 1218, nil,
+ nil, 294, 26537, -81, nil, 771, nil, nil, 26896, 7485,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, 1277, 258, nil, 1199, 25376, nil, 1325, nil, 1309,
+ -21, nil, nil, 20865, nil, 1232, 1237, 1338, nil, 1216,
+ nil, 1263, 20341, nil, nil, 20210, nil, 25, 24160, 1229,
+ nil, 1235, 941, 1373, 1281, 1517, 443, 1300, 1257, 23890,
+ nil, 1328, 20, 2966, 1382, 19948, nil, nil, 802, nil,
+ nil, 1238, nil, nil, 716, 13365, nil, 24338, nil, 19817,
+ nil, 1080, nil, 1309, 1315, 1427, 1319, nil, nil, nil,
+ nil, nil, nil, 13384, 3110, nil, nil, nil, nil, 512,
+ 820, nil, 1446, nil, nil, nil, nil, nil, 1452, 1454,
+ nil, nil, 53, 1335, 1661, 1805, 1949, 479, 3974, 2093,
+ 966, nil, 1357, 1958, 19686, nil, 50, -22, 32, nil,
+ nil, nil, nil, nil, 2966, nil, nil, nil, nil, nil,
+ nil, nil, nil, 52, 16542, 110, 138, 114, 249, 361,
+ nil, 4118, 16280, nil, 256, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 16149, 16018, 15887, 15756, -23,
+ 464, 26145, 97, 199, 26243, 25037, 341, -75, 432, 436,
+ nil, 26047, nil, 442, 454, 538, 571, nil, 487, 25949,
+ 26994, 26862, nil, nil, nil, nil, nil, 15232, nil, nil,
+ 538, nil, nil, 550, 538, nil, nil, 13329, 2678, nil,
+ nil, nil, nil, 545, 253, nil, nil, 9639, 704, nil,
+ 2534, 591, 639, nil, nil, 609, nil, 608, 610, nil,
+ 615, nil, 704, nil, 624, 642, nil, 651, nil, nil,
+ 660, 1224, 1512, nil, nil, 8686, nil, 790, nil, 8555,
+ 814, nil, nil, 26636, 8019, 1094, 2237, 858, nil, 860,
+ 347, 4982, nil, nil, nil, nil, 759, 806, 777, 776,
+ 219, nil, nil, 7344, 7213, nil, nil, nil, nil, 793,
+ 794, 799, 797, nil, nil, 26439, nil, nil, -18, nil,
+ nil, 809, 814, 815, nil, nil, nil, 862, 829, -34,
+ nil, 25233, nil, 859, nil, nil, -66, nil, nil, 3830,
+ 4550, nil, nil, 860, 886, nil, 888, 889, 891, nil,
+ 919, 899, 886, 23759, nil, nil, nil, 3686, nil, 3686,
+ nil, nil, 26, 23366, nil, nil, 25138, nil, 24068, nil,
+ nil, 25446, nil, 25756, nil, nil, nil, nil, 915, 916,
+ 3542, nil, 42, nil, 38, 771, 257, nil, nil, nil,
+ nil, 177, nil, nil, nil, 1060, 1814, 1670, 1571, nil,
+ nil, nil, nil, nil, 720, 993, 247, nil, nil, nil,
+ nil, nil, nil, 951, 26341, 954, nil, nil, 136, nil,
+ nil, 859, nil, nil, 25236, nil, nil, 25658, nil, 25854,
+ nil, nil, 983, 23235, 667, 1048, nil, 1382, 39, 69,
+ 665, 1052, -7, nil, 1003, 1017, 1030, 1032, 809, 1542,
+ 4406, nil, 5649, 5518, 25557, nil, nil, nil, nil, 1060,
+ 1166, 650, nil, nil, nil, nil, nil, nil, 25655, 1050,
+ 25753, 1051, nil, nil, 1055, 1057, 1059, 1060, nil, 1063,
+ nil, 555, 27866, nil, 1193, 5387, 27927, 26994, 6, 26442,
+ nil, nil, nil, nil, 1075, 825, 3254, nil, nil, nil,
+ 1085, nil, nil, nil, 1580, 1088, 25851, nil, nil, nil,
+ 26148, nil, 25024, nil, 26344, nil, 25952, nil, nil, 1158,
+ 1161, nil, 1121, -9, -10, 68, -1, 1174, nil, 324,
+ 25135, nil, 1236, 1239, 1335, 1336, 8, nil, nil, nil,
+ nil, 1342, 26050, nil, nil, nil, nil, 732, nil ]
+
+racc_action_default = [
+ -3, -726, -1, -711, -4, -726, -7, -726, -726, -726,
+ -726, -30, -726, -726, -35, -36, -726, -726, -726, -307,
+ -52, -713, -726, -59, -726, -67, -68, -69, -73, -284,
+ -284, -284, -320, -347, -348, -85, -12, -89, -97, -99,
+ -726, -610, -611, -726, -726, -726, -726, -726, -726, -237,
+ -726, -713, -623, -623, -255, -298, -299, -300, -301, -302,
+ -303, -304, -305, -306, -699, -309, -313, -725, -689, -328,
+ -330, -726, -726, -61, -61, -711, -726, -726, -726, -349,
+ -350, -352, -409, -550, -551, -552, -553, -574, -556, -557,
+ -576, -578, -561, -566, -570, -572, -588, -589, -590, -574,
+ -592, -594, -595, -596, -597, -697, -599, -600, -698, -602,
+ -603, -604, -605, -606, -607, -608, -609, -614, -615, -726,
+ -2, -712, -721, -722, -723, -6, -726, -726, -726, -726,
+ -726, -8, -3, -18, -726, -128, -129, -130, -131, -132,
+ -133, -134, -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, -200, -201, -202, -203, -204, -205,
+ -206, -207, -208, -23, -135, -12, -726, -726, -726, -726,
+ -726, -726, -726, -274, -726, -726, -709, -710, -726, -726,
+ -713, -714, -56, -726, -610, -611, -726, -307, -726, -726,
+ -243, -726, -12, -726, -57, -220, -221, -726, -726, -726,
+ -726, -726, -726, -726, -726, -726, -726, -726, -726, -726,
+ -726, -726, -726, -726, -726, -726, -726, -256, -257, -258,
+ -259, -726, -63, -64, -726, -128, -129, -168, -169, -170,
+ -186, -191, -198, -201, -610, -611, -687, -726, -418, -420,
+ -726, -707, -708, -74, -274, -726, -327, -424, -433, -435,
+ -80, -430, -81, -713, -82, -262, -279, -288, -288, -283,
+ -726, -289, -726, -574, -691, -726, -726, -83, -84, -711,
+ -13, -726, -16, -726, -87, -12, -713, -726, -90, -93,
+ -12, -105, -106, -726, -726, -113, -320, -323, -713, -726,
+ -623, -623, -347, -348, -351, -431, -726, -95, -726, -101,
+ -317, -726, -222, -223, -593, -231, -232, -726, -244, -726,
+ -622, -12, -645, -645, -622, -12, -12, -311, -713, -263,
+ -718, -718, -726, -726, -718, -726, -329, -60, -59, -726,
+ -726, -726, -12, -12, -711, -726, -712, -114, -115, -726,
+ -726, -122, -726, -362, -363, -123, -124, -726, -126, -726,
+ -307, -618, -726, -343, -645, -554, -726, -726, -726, -726,
+ -726, -726, -726, -726, 1219, -5, -724, -24, -25, -26,
+ -27, -28, -726, -726, -20, -21, -22, -136, -726, -31,
+ -34, -294, -726, -726, -293, -32, -726, -41, -726, -307,
+ -49, -51, -209, -267, -289, -39, -40, -53, -54, -37,
+ -38, -42, -210, -267, -713, -275, -288, -288, -700, -701,
+ -284, -428, -702, -703, -701, -700, -284, -427, -429, -702,
+ -703, -48, -217, -55, -713, -326, -726, -726, -726, -274,
+ -317, -726, -726, -726, -726, -218, -219, -224, -225, -226,
+ -227, -228, -229, -233, -234, -235, -236, -238, -239, -240,
+ -241, -242, -245, -246, -247, -248, -713, -260, -65, -713,
+ -439, -284, -700, -701, -71, -75, -646, -713, -288, -713,
+ -285, -437, -439, -713, -322, -280, -726, -281, -726, -286,
+ -726, -290, -726, -694, -696, -11, -712, -15, -17, -713,
+ -86, -315, -102, -91, -726, -713, -274, -726, -726, -112,
+ -726, -622, -593, -726, -98, -103, -726, -726, -726, -726,
+ -261, -249, -726, -726, -542, -726, -375, -376, -713, -630,
+ -713, -686, -686, -628, -630, -630, -644, -646, -647, -648,
+ -649, -650, -651, -652, -653, -654, -726, -656, -658, -660,
+ -665, -667, -668, -671, -676, -678, -679, -681, -682, -683,
+ -726, -726, -630, -726, -726, -726, -713, -726, -264, -720,
+ -719, -266, -720, -318, -319, -690, -12, -353, -354, -12,
+ -726, -726, -726, -726, -726, -726, -274, -726, -726, -121,
+ -61, -123, -124, -125, -726, -726, -274, -339, -616, -726,
+ -12, -410, -645, -413, -555, -575, -580, -726, -582, -558,
+ -577, -726, -579, -560, -726, -563, -726, -565, -568, -726,
+ -569, -726, -591, -9, -19, -726, -29, -726, -297, -726,
+ -726, -274, -726, -726, -726, -726, -432, -726, -276, -278,
+ -726, -726, -76, -273, -425, -726, -726, -78, -426, -325,
+ -715, -700, -701, -700, -701, -713, -58, -459, -461, -463,
+ -466, -523, -713, -478, -481, -516, -521, -522, -726, -726,
+ -526, -527, -528, -529, -530, -531, -532, -533, -534, -535,
+ -536, -726, -726, -540, -726, -726, -688, -726, -440, -70,
+ -421, -437, -269, -276, -271, -726, -399, -726, -321, -288,
+ -287, -291, -726, -692, -693, -726, -14, -88, -726, -94,
+ -100, -713, -108, -110, -272, -109, -111, -726, -96, -726,
+ -216, -230, -713, -251, -725, -725, -345, -619, -726, -637,
+ -621, -726, -626, -627, -726, -726, -640, -726, -642, -726,
+ -364, -726, -366, -368, -371, -374, -713, -659, -669, -670,
+ -680, -684, -624, -726, -253, -346, -310, -312, -314, -718,
+ -725, -355, -725, -62, -356, -357, -333, -334, -726, -726,
+ -445, -336, -726, -713, -117, -119, -118, -120, -12, -123,
+ -124, -127, -713, -12, -726, -341, -726, -726, -713, -581,
+ -584, -585, -586, -587, -12, -559, -562, -564, -567, -571,
+ -573, -137, -33, -295, -726, -713, -700, -701, -701, -700,
+ -50, -268, -726, -716, -288, -44, -212, -45, -213, -77,
+ -46, -215, -47, -214, -79, -726, -726, -726, -726, -432,
+ -726, -726, -464, -465, -726, -726, -726, -483, -713, -713,
+ -477, -484, -490, -726, -493, -497, -726, -480, -726, -726,
+ -519, -520, -524, -525, -537, -124, -538, -726, -66, -419,
+ -399, -423, -422, -726, -713, -434, -400, -713, -12, -436,
+ -282, -292, -695, -92, -107, -104, -324, -726, -725, -360,
+ -12, -543, -725, -544, -545, -713, -629, -630, -630, -657,
+ -686, -666, -671, -685, -630, -630, -677, -630, -654, -672,
+ -713, -726, -726, -373, -655, -726, -265, -726, -358, -726,
+ -726, -335, -337, -726, -726, -12, -116, -726, -432, -726,
+ -726, -12, -344, -411, -414, -416, -403, -726, -726, -296,
+ -432, -43, -211, -277, -726, -460, -462, -470, -474, -713,
+ -713, -713, -502, -504, -505, -508, -509, -574, -512, -514,
+ -515, -713, -713, -713, -539, -475, -476, -500, -485, -488,
+ -491, -726, -496, -713, -574, -717, -713, -517, -518, -250,
+ -12, -72, -270, -686, -686, -380, -382, -382, -382, -398,
+ -726, -713, -654, -662, -663, -674, -438, -252, -10, -12,
+ -549, -361, -726, -726, -547, -620, -726, -633, -726, -635,
+ -625, -726, -638, -726, -641, -643, -365, -367, -369, -372,
+ -254, -331, -726, -332, -726, -450, -453, -456, -457, -458,
+ -291, -725, -338, -340, -617, -726, -12, -12, -726, -412,
+ -583, -467, -468, -469, -503, -507, -726, -511, -513, -471,
+ -472, -473, -492, -486, -726, -494, -498, -479, -726, -482,
+ -441, -726, -378, -379, -383, -389, -391, -726, -394, -726,
+ -396, -401, -726, -726, -661, -726, -548, -12, -610, -611,
+ -726, -726, -307, -546, -630, -630, -630, -630, -726, -726,
+ -12, -446, -726, -726, -454, -442, -443, -444, -342, -726,
+ -726, -713, -405, -407, -408, -501, -506, -510, -726, -489,
+ -726, -686, -664, -381, -382, -382, -382, -382, -675, -382,
+ -402, -673, -726, -317, -542, -274, -726, -726, -317, -726,
+ -631, -634, -636, -639, -370, -725, -12, -451, -452, -455,
+ -493, -415, -417, -404, -726, -487, -726, -495, -499, -377,
+ -726, -386, -726, -388, -726, -392, -726, -395, -397, -316,
+ -704, -541, -713, -700, -701, -704, -316, -630, -359, -725,
+ -726, -406, -382, -382, -382, -382, -432, -632, -447, -448,
+ -449, -494, -726, -384, -387, -390, -393, -382, -385 ]
+
+clist = [
+'42,224,229,289,272,42,306,306,306,406,291,328,138,138,376,624,764,297',
+'301,124,273,413,369,809,285,585,585,743,138,565,633,454,359,604,605',
+'527,42,332,332,519,141,141,947,452,382,383,460,466,930,472,676,878,232',
+'344,344,133,214,131,121,879,340,340,434,435,327,347,42,585,735,6,354',
+'379,380,515,6,384,388,285,285,1017,120,616,619,772,773,887,326,918,307',
+'307,307,124,344,344,344,780,554,324,17,340,340,340,517,17,365,341,341',
+'570,1085,608,611,743,511,615,568,601,377,377,576,576,377,42,786,370',
+'908,950,417,418,419,420,42,290,42,451,17,367,1047,394,936,471,922,308',
+'308,308,341,341,341,1049,967,696,929,1028,385,2,892,893,643,1148,360',
+'364,576,304,317,318,17,1132,746,293,300,302,1134,377,377,377,377,929',
+'371,374,743,1170,932,125,981,993,527,927,740,213,740,430,6,1139,423',
+'441,1003,1177,727,306,441,421,484,6,654,656,441,401,403,803,737,274',
+'927,725,461,731,665,42,477,357,388,17,372,388,730,979,991,286,373,1020',
+'17,470,17,980,992,392,344,532,637,344,366,606,1148,340,42,428,340,1175',
+'429,440,368,823,961,640,440,808,1048,1019,928,291,440,1095,1021,1059',
+'1131,934,447,448,1144,821,306,306,327,1201,433,433,473,474,1134,306',
+'903,446,641,928,450,988,988,422,341,695,1010,341,780,869,749,963,943',
+'988,404,415,880,460,466,758,472,827,452,585,1066,1211,826,1067,1057',
+'510,521,17,1047,17,547,940,522,550,17,42,555,1164,900,42,17,297,1125',
+'332,42,1054,509,301,557,124,1007,1008,740,740,17,1102,1208,953,1166',
+'344,1055,914,332,607,518,307,340,327,751,896,543,1058,327,307,975,42',
+'988,976,344,42,42,877,1141,754,552,340,627,538,536,539,874,760,508,754',
+'545,620,42,42,1126,1087,324,875,886,889,537,324,365,740,828,1018,535',
+'341,576,936,124,1135,1136,1,308,1032,405,1198,407,956,621,622,308,408',
+'409,410,341,411,958,17,412,672,829,17,520,929,377,138,17,834,824,585',
+'523,931,813,677,998,1142,585,776,778,970,1040,,822,,,639,683,754,780',
+'780,,306,688,141,585,754,,17,,623,859,17,17,461,910,864,,978,664,,743',
+'1169,995,996,929,,904,845,17,17,470,988,718,,,724,,,,959,,,460,466,913',
+',,683,932,856,858,,,,861,863,,994,,,,925,955,,,,555,,306,,1209,,1114',
+'1092,1093,555,,933,,,933,,,461,42,,946,877,877,,,,332,461,,,,,,,470',
+'332,1006,,1086,,,,344,,470,,,,,340,929,344,1022,,,,,,340,,,,,910,1145',
+'569,,1146,,1079,1080,1081,,855,857,,,,860,862,682,1210,306,818,,,687',
+',1191,762,,,306,923,341,,,461,42,792,1056,42,1023,341,,461,,,,780,780',
+'1065,,,470,740,17,739,804,,470,1086,42,,,,800,306,441,802,,729,1075',
+',,1179,,825,441,441,,,461,441,441,,,1015,1014,42,1202,138,,,,972,42',
+'902,677,470,1090,,,812,,677,888,,856,858,863,861,,1127,,1086,,1178,',
+'141,,585,440,,718,,,272,,901,718,718,440,440,841,,17,440,440,17,799',
+',924,898,555,,,,,,,138,,1178,677,915,1107,1130,842,,17,,,,683,850,,688',
+',,332,,650,652,655,655,1120,1086,1121,1022,,332,1022,,,971,344,17,,',
+'17,,,340,17,,,344,,,17,17,,,340,17,17,,,854,1206,877,,,1037,1039,677',
+'972,,,,1042,1044,,1045,677,1023,,,1023,,966,1023,,1023,,,,341,,42,,',
+'433,,42,960,,677,341,441,,13,,,,42,13,,,,,,,854,1022,,,957,,,933,,,1015',
+'1014,677,1015,1014,1015,1014,677,677,,968,,,,13,,,377,,718,,1030,718',
+'718,,1034,,,713,718,440,,,,,,966,718,718,718,,1023,,1023,13,1023,,1023',
+',,,,,,393,,42,1076,,,,,,,17,,,,42,17,,,,1023,1088,,,,,,17,,,,1026,,1015',
+'1014,1015,1014,1015,1014,1015,1014,,,1031,1052,17,13,,718,712,42,,,',
+',13,42,13,1192,,,,,,,1015,1014,677,677,677,,1064,,754,1160,1161,1162',
+'1163,1061,888,718,,,,,,,,,377,,935,837,937,837,,718,966,,18,,17,,,18',
+'42,,,,,,,,17,,,,,285,,,233,,,42,,,,1109,,,233,233,233,344,18,333,333',
+',,13,340,436,445,344,,449,436,17,716,,340,1106,436,17,,,1207,,,,42,42',
+',,18,,13,,,233,233,,,233,389,399,399,,718,,,,,,,341,,1156,1129,,,,713',
+',,341,,285,713,713,,42,17,,,,1173,,,,,,,344,42,,1167,1168,718,18,340',
+'17,1016,306,233,233,233,233,18,1154,18,,718,,718,,,,461,,,,1165,,,13',
+',,,13,470,,,,13,470,,,17,17,42,377,377,475,,341,712,677,,,718,,712,712',
+',,,,,,,,,,,13,,,1199,13,13,,,,718,,,,,17,,,,,,,13,13,,,,,17,18,233,438',
+'389,233,233,389,438,233,,,,,438,233,233,,,,,,,,524,,,,18,,,,,,,,,,,1115',
+',1116,,,1117,,17,540,,713,,,713,713,716,,,,,713,716,716,,,,,,713,713',
+'713,1096,1098,1100,233,,,,,,,233,233,,,,,,,,233,710,,,,,,,,,,1147,,1149',
+',,,,18,,,,18,,,,333,18,,,,,,,712,,,712,712,,,,713,,712,333,,,,,,19,712',
+'712,712,,19,,18,13,,,18,18,,,,,,,,,,1197,713,,,,233,18,18,,,,,,,19,335',
+'335,713,,,,1203,,1204,,1205,233,,,,,,,689,,,1181,1183,1185,1187,,1188',
+',712,19,,,,,,,,,1217,391,400,400,,,,,716,,,716,716,13,,726,13,,716,',
+',,712,732,,734,716,716,716,738,,,,,,,,13,712,,,1213,1214,1215,1216,747',
+'19,713,,,233,750,,,,19,1218,19,,,,,,,13,,,436,,,,13,,,767,,770,436,436',
+',,,436,436,,,,713,,,716,,,710,,,,,,710,710,713,,713,,,,18,,,,,797,,',
+'333,,233,,,,712,716,,333,,,,,,,,,233,,,,,716,713,19,,439,391,,,391,439',
+',,,,,439,,719,,,,,,712,,713,,,,19,,,,,,,,712,,712,,,,,,,,,,18,,,18,',
+',,,,,233,,,,,,,,,,233,,,,18,,712,,13,,,,,13,716,,,,,,,,,,13,,,,,,712',
+'18,,,438,233,,,18,19,,,436,19,438,438,,335,19,438,438,,,,716,710,,,710',
+'710,,916,,,,710,335,,716,,716,,,710,710,710,,,,19,,,,19,19,944,,,,,',
+',,,,,,,13,,19,19,,,,,716,,,,13,,333,,,,,,,,,,,333,,,,,,,716,,,,,,,710',
+',,,,,,,13,,,,,,13,,711,,,,,,,,,,,,,719,,,710,,977,719,719,,,,,,,,,18',
+',,710,,18,233,,,,,,715,,,,18,,13,,,1012,,,,,,,,,,,,,438,,,13,,,,1113',
+'1035,,,,,,,,,,,,,,,1046,,,,,,,,,,,,,,,19,,13,13,,,,,335,,,,,,710,,,335',
+'18,,,,,,1071,1072,1073,,,,18,,,,,,,,,,,29,,13,,,29,,,,,1089,,,710,,13',
+',,233,,,,29,,18,,,710,,710,18,,29,29,29,,29,,,19,719,,19,719,719,,,',
+',,719,,,,,,,,719,719,719,13,,19,,710,29,,,,833,29,29,,,29,711,,,18,',
+',711,711,,,,,,710,19,,1104,439,,,,19,18,,,,1110,439,439,,,,439,439,',
+',,,,,,715,,,,29,719,715,715,,29,29,29,29,29,,29,,,18,18,,,,,,,,,,,,',
+',,,,,719,,,,,,,,,,,,,,,,719,335,1151,,717,,18,,,,,,335,,,,,,,18,,233',
+'233,,,,,,,,,,,,311,311,311,,,,,,,,,29,29,29,,29,29,,29,29,233,,,,29',
+'29,29,,,,,18,,,,311,375,19,29,,,711,19,,711,711,,,,719,,711,,19,,,,',
+',711,711,711,,,,,,,,,,439,41,,,,,41,,,,,715,29,,715,715,,,719,29,29',
+'715,,,,284,,,29,715,715,715,719,,719,,,41,331,331,,,,,,,29,,,,29,,711',
+',,29,19,,,,,,,,,,,41,19,,719,,,714,,,,387,284,284,,,,,711,,29,,,,29',
+'29,,715,719,,,,,,711,,,19,,,29,29,29,19,,,,431,444,,,717,,,311,,41,717',
+'717,715,,29,,,,41,,41,,,,,,,,715,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,400',
+',,,,,19,,,,1112,,711,,,,,,,,311,311,,,,,,,,311,,,,29,,,529,,531,,,533',
+'534,19,19,41,,,387,,,387,711,715,,,,,,,,,,,,,711,,711,,,,41,,,,,,,,400',
+',,,19,,,,,,29,,,715,,,,19,,,29,,,,711,,,715,,715,,,,,,717,29,,717,717',
+'714,,,,,717,714,714,711,,,,,717,717,717,,,,,,,,19,,715,,,,,,41,,,,41',
+',,668,331,41,,,,,,,,,715,29,,,29,,,,,331,,29,,,,,,,,,,29,41,,,29,41',
+'41,717,,,,,,,,311,,,,,,,41,41,,,,,,,,29,,,29,29,,,29,717,,,,,29,29,',
+',,29,29,,,,,717,,,,,,,741,,375,,744,,,,,,,,,,,,,,,,311,,,,,,,,,,,,,',
+',,,714,,,714,714,,,,,,714,,,,,,,,714,714,714,,,,,,787,,,,,,,,,,,,,717',
+',,,,,,741,,,375,,,,,,,,,,,,,444,311,,,,,,,,,,311,,,,41,,717,,,714,29',
+',331,,,29,29,,,,717,331,717,,,,29,,,,,,,843,,311,,,,,,714,741,375,29',
+'32,,,,,32,,,,,,,714,717,,,,,,,,,32,,,,,,,,,,32,32,32,,32,717,,41,,,41',
+',,,,,,,,,741,,,29,,,,,,911,,41,912,,32,29,,,,32,32,,,32,,,,,,,,,921',
+',,,,,41,,,,,714,29,41,939,,,,29,,,,,,29,,,,,,,,,,,,,32,,,,,32,32,32',
+'32,32,,32,,,714,,,,,,,,,,,,,,714,,714,,,,,,29,,,,,,969,,,,,,,,331,,',
+',,29,,,,,,331,,,,,714,,,,,,,,,,,,,,,,,,,,,,,,714,,29,29,32,32,32,,32',
+'32,,32,32,,,,,32,32,32,,,,,,,,,,,41,32,,,,41,,,,,,,,29,,,41,,,,,,,,',
+',29,,29,29,,,1060,,,,,,,,,,,,,,32,,,,,375,,32,32,,,,,,,29,32,,,,,,,',
+',,29,,,,,,,,32,,,,32,,,,,32,41,,,,,,,,,,,,41,,,,,,,,,,,,,,,,,,32,,,',
+'32,32,,,,,,,,,,,,41,,,32,32,32,41,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,41,,,,,,,,,,,,,284,,,,,,41,,,,1108,,,,,,,,,,,,,,,,,',
+'311,,,,,32,,,,,,,,,,41,41,,,,,,,,,,,,,,,,,,,,,,,,,,23,,,,,23,,,,,284',
+',,,41,,,,,,32,,240,,,,,41,,,32,,,,,,23,,,,,,,,352,353,32,355,356,,358',
+',,,,,,,,,,,,,,,23,,,,,378,378,41,,378,,,,,,,,,,,,,,,,,,,,,,,,,32,,,32',
+',,,,,,32,,,,,,,,,,32,23,,,32,,378,378,378,378,23,,23,,,,,,,,,,,,,,,',
+',,,32,,,32,32,,,32,,,,,,32,32,,,,32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,23,,443,,378,378,,453,,,,,,453,378,378,,,,,,,,,,,240',
+'23,,,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500',
+'501,502,503,504,505,506,,,,,507,,,,,,,,,,,,,,,,378,,,,,,,,,,,,,,,32',
+',,,,32,32,,,,,,,,,,32,,,23,,,,23,,,,,23,,,,,,32,,,,,,,,,,,,,,,,,,,,',
+'560,,561,,23,,,,23,23,,,,,,,,,,,,,,,378,23,23,,,,,,,,,32,,,,,,,,,,378',
+',32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,32,,,,,,32,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,453,453,453,,,,,,,,,,,32,,,,,,,,,,,,,,,,,,,32,,,353',
+',,,,,,,,,,,,,,,,,,,23,,,,,,,,,,,,,,32,32,,,,,453,,,761,,,378,763,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,794,32,,32,32,,,,,,,,,23,,,23',
+',,,,,,,,,,,,,,,,,,,32,23,,,,,,,,,,32,,,,,,,,,,,,,,,,,23,,,453,,,,23',
+'851,,,,,453,453,,,,453,453,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,23,,,,,23,378,,,,,,,,,,23,,,,,,,,,,,,,,,,,,453',
+',,,,,,,,,,,,453,453,453,453,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1009,,,,,,,',
+',,,23,,,,,,,,,1027,,,23,,,,,,,,,,,,,,,,,,,,,,,,,1050,,,,378,,,,,,23',
+',,,,,23,,,,,,,,,,,,,453,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,23,,,,,,',
+',,,,,,,,,,,,23,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,23,23,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,23,,,,,,,,,,,,,23,,378,378,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,23' ]
+ racc_goto_table = arr = ::Array.new(4471, 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 = [
+'70,34,36,150,44,70,50,50,50,190,34,66,73,73,104,109,11,88,88,113,42',
+'190,84,110,70,219,219,228,73,9,71,32,36,9,9,91,70,70,70,89,75,75,108',
+'77,40,40,53,53,127,77,33,167,21,81,81,16,16,8,6,168,45,45,23,23,10,67',
+'70,219,56,7,78,18,18,55,7,18,70,70,70,137,4,107,107,131,131,179,63,12',
+'85,85,85,113,81,81,81,122,68,62,30,45,45,45,32,30,114,46,46,89,184,86',
+'86,228,53,86,149,149,26,26,214,214,26,70,123,85,139,12,18,18,18,18,70',
+'48,70,29,30,7,121,20,224,29,196,87,87,87,46,46,46,124,141,38,220,13',
+'4,2,194,194,149,225,80,80,214,61,61,61,30,143,15,54,54,54,144,26,26',
+'26,26,220,87,87,228,185,192,5,170,170,91,218,92,17,92,24,7,184,27,19',
+'170,185,153,50,19,7,39,7,204,204,19,72,72,41,153,47,218,49,88,58,76',
+'70,34,82,70,30,83,70,90,167,167,102,103,141,30,73,30,168,168,111,81',
+'190,112,81,115,116,225,45,70,10,45,184,21,21,117,118,119,120,21,109',
+'125,129,138,34,21,134,135,170,142,138,26,26,137,71,50,50,10,143,85,85',
+'26,26,144,50,56,20,145,138,20,192,192,2,46,32,139,46,122,33,68,146,122',
+'192,147,5,33,53,53,68,77,148,77,219,151,184,9,152,168,154,156,30,121',
+'30,34,123,157,36,30,70,66,124,160,70,30,88,161,70,70,162,26,88,34,113',
+'194,194,92,92,30,141,163,164,165,81,166,33,70,36,85,85,45,10,32,71,67',
+'169,10,85,172,70,192,174,81,70,70,38,127,53,78,45,34,8,6,63,175,77,48',
+'53,63,18,70,70,12,179,62,176,180,181,7,62,114,92,149,138,4,46,214,224',
+'113,187,188,1,87,197,200,108,201,33,10,10,87,202,203,206,46,207,33,30',
+'208,34,209,30,61,220,26,73,30,210,213,219,61,222,32,36,183,223,219,217',
+'217,33,131,,32,,,26,88,53,122,122,,50,88,75,219,53,,30,,4,55,30,30,88',
+'91,55,,33,16,,228,167,33,33,220,,89,32,30,30,73,192,70,,,36,,,,9,,,53',
+'53,68,,,88,192,77,77,,,,77,77,,71,,,,89,107,,,,66,,50,,12,,138,131,131',
+'66,,132,,,132,,,88,70,,86,38,38,,,,70,88,,,,,,,73,70,38,,183,,,,81,',
+'73,,,,,45,220,81,219,,,,,,45,,,,,91,138,136,,138,,33,33,33,,29,29,,',
+',29,29,54,110,50,40,,,54,,11,26,,,50,23,46,,,88,70,113,38,70,221,46',
+',88,,,,122,122,9,,,73,92,30,87,113,,73,183,70,,,,10,50,19,10,,54,38',
+',,131,,113,19,19,,,88,19,19,,,132,126,70,138,73,,,,77,70,104,36,73,9',
+',,85,,36,36,,77,77,77,77,,109,,183,,183,,75,,219,21,,70,,,44,,150,70',
+'70,21,21,16,,30,21,21,30,87,,84,42,66,,,,,,,73,,183,36,66,107,9,7,,30',
+',,,88,7,,88,,,70,,205,205,205,205,107,183,107,219,,70,219,,,29,81,30',
+',,30,,,45,30,,,81,,,30,30,,,45,30,30,,,87,33,38,,,217,217,36,77,,,,217',
+'217,,217,36,221,,,221,,36,221,,221,,,,46,,70,,,85,,70,18,,36,46,19,',
+'22,,,,70,22,,,,,,,87,219,,,10,,,132,,,132,126,36,132,126,132,126,36',
+'36,,10,,,,22,,,26,,70,,84,70,70,,84,,,97,70,21,,,,,,36,70,70,70,,221',
+',221,22,221,,221,,,,,,,22,,70,190,,,,,,,30,,,,70,30,,,,221,190,,,,,',
+'30,,,,10,,132,126,132,126,132,126,132,126,,,10,18,30,22,,70,96,70,,',
+',,22,70,22,32,,,,,,,132,126,36,36,36,,113,,53,217,217,217,217,10,36',
+'70,,,,,,,,,26,,136,205,136,205,,70,36,,31,,30,,,31,70,,,,,,,,30,,,,',
+'70,,,31,,,70,,,,70,,,31,31,31,81,31,31,31,,,22,45,22,22,81,,22,22,30',
+'100,,45,10,22,30,,,217,,,,70,70,,,31,,22,,,31,31,,,31,31,31,31,,70,',
+',,,,,46,,34,10,,,,97,,,46,,70,97,97,,70,30,,,,36,,,,,,,81,70,,18,18',
+'70,31,45,30,136,50,31,31,31,31,31,10,31,,70,,70,,,,88,,,,10,,,22,,,',
+'22,73,,,,22,73,,,30,30,70,26,26,64,,46,96,36,,,70,,96,96,,,,,,,,,,,',
+'22,,,10,22,22,,,,70,,,,,30,,,,,,,22,22,,,,,30,31,31,31,31,31,31,31,31',
+'31,,,,,31,31,31,,,,,,,,64,,,,31,,,,,,,,,,,136,,136,,,136,,30,64,,97',
+',,97,97,100,,,,,97,100,100,,,,,,97,97,97,133,133,133,31,,,,,,,31,31',
+',,,,,,,31,94,,,,,,,,,,136,,136,,,,,31,,,,31,,,,31,31,,,,,,,96,,,96,96',
+',,,97,,96,31,,,,,,35,96,96,96,,35,,31,22,,,31,31,,,,,,,,,,136,97,,,',
+'31,31,31,,,,,,,35,35,35,97,,,,136,,136,,136,31,,,,,,,64,,,133,133,133',
+'133,,133,,96,35,,,,,,,,,136,35,35,35,,,,,100,,,100,100,22,,64,22,,100',
+',,,96,64,,64,100,100,100,64,,,,,,,,22,96,,,133,133,133,133,64,35,97',
+',,31,64,,,,35,133,35,,,,,,,22,,,22,,,,22,,,64,,64,22,22,,,,22,22,,,',
+'97,,,100,,,94,,,,,,94,94,97,,97,,,,31,,,,,64,,,31,,31,,,,96,100,,31',
+',,,,,,,,31,,,,,100,97,35,,35,35,,,35,35,,,,,,35,,106,,,,,,96,,97,,,',
+'35,,,,,,,,96,,96,,,,,,,,,,31,,,31,,,,,,,31,,,,,,,,,,31,,,,31,,96,,22',
+',,,,22,100,,,,,,,,,,22,,,,,,96,31,,,31,31,,,31,35,,,22,35,31,31,,35',
+'35,31,31,,,,100,94,,,94,94,,64,,,,94,35,,100,,100,,,94,94,94,,,,35,',
+',,35,35,64,,,,,,,,,,,,,22,,35,35,,,,,100,,,,22,,31,,,,,,,,,,,31,,,,',
+',,100,,,,,,,94,,,,,,,,22,,,,,,22,,95,,,,,,,,,,,,,106,,,94,,64,106,106',
+',,,,,,,,31,,,94,,31,31,,,,,,99,,,,31,,22,,,64,,,,,,,,,,,,,31,,,22,,',
+',22,64,,,,,,,,,,,,,,,64,,,,,,,,,,,,,,,35,,22,22,,,,,35,,,,,,94,,,35',
+'31,,,,,,64,64,64,,,,31,,,,,,,,,,,57,,22,,,57,,,,,64,,,94,,22,,,31,,',
+',57,,31,,,94,,94,31,,57,57,57,,57,,,35,106,,35,106,106,,,,,,106,,,,',
+',,,106,106,106,22,,35,,94,57,,,,35,57,57,,,57,95,,,31,,,95,95,,,,,,94',
+'35,,31,35,,,,35,31,,,,31,35,35,,,,35,35,,,,,,,,99,,,,57,106,99,99,,57',
+'57,57,57,57,,57,,,31,31,,,,,,,,,,,,,,,,,,106,,,,,,,,,,,,,,,,106,35,31',
+',101,,31,,,,,,35,,,,,,,31,,31,31,,,,,,,,,,,,28,28,28,,,,,,,,,57,57,57',
+',57,57,,57,57,31,,,,57,57,57,,,,,31,,,,28,28,35,57,,,95,35,,95,95,,',
+',106,,95,,35,,,,,,95,95,95,,,,,,,,,,35,69,,,,,69,,,,,99,57,,99,99,,',
+'106,57,57,99,,,,69,,,57,99,99,99,106,,106,,,69,69,69,,,,,,,57,,,,57',
+',95,,,57,35,,,,,,,,,,,69,35,,106,,,98,,,,69,69,69,,,,,95,,57,,,,57,57',
+',99,106,,,,,,95,,,35,,,57,57,57,35,,,,28,28,,,101,,,28,,69,101,101,99',
+',57,,,,69,,69,,,,,,,,99,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,35,,,,,,35,,',
+',35,,95,,,,,,,,28,28,,,,,,,,28,,,,57,,,28,,28,,,28,28,35,35,69,,,69',
+',,69,95,99,,,,,,,,,,,,,95,,95,,,,69,,,,,,,,35,,,,35,,,,,,57,,,99,,,',
+'35,,,57,,,,95,,,99,,99,,,,,,101,57,,101,101,98,,,,,101,98,98,95,,,,',
+'101,101,101,,,,,,,,35,,99,,,,,,69,,,,69,,,28,69,69,,,,,,,,,99,57,,,57',
+',,,,69,,57,,,,,,,,,,57,69,,,57,69,69,101,,,,,,,,28,,,,,,,69,69,,,,,',
+',,57,,,57,57,,,57,101,,,,,57,57,,,,57,57,,,,,101,,,,,,,28,,28,,28,,',
+',,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,98,,,98,98,,,,,,98,,,,,,,,98,98,98,',
+',,,,28,,,,,,,,,,,,,101,,,,,,,28,,,28,,,,,,,,,,,,,28,28,,,,,,,,,,28,',
+',,69,,101,,,98,57,,69,,,57,57,,,,101,69,101,,,,57,,,,,,,28,,28,,,,,',
+'98,28,28,57,60,,,,,60,,,,,,,98,101,,,,,,,,,60,,,,,,,,,,60,60,60,,60',
+'101,,69,,,69,,,,,,,,,,28,,,57,,,,,,28,,69,28,,60,57,,,,60,60,,,60,,',
+',,,,,,28,,,,,,69,,,,,98,57,69,28,,,,57,,,,,,57,,,,,,,,,,,,,60,,,,,60',
+'60,60,60,60,,60,,,98,,,,,,,,,,,,,,98,,98,,,,,,57,,,,,,28,,,,,,,,69,',
+',,,57,,,,,,69,,,,,98,,,,,,,,,,,,,,,,,,,,,,,,98,,57,57,60,60,60,,60,60',
+',60,60,,,,,60,60,60,,,,,,,,,,,69,60,,,,69,,,,,,,,57,,,69,,,,,,,,,,57',
+',57,57,,,28,,,,,,,,,,,,,,60,,,,,28,,60,60,,,,,,,57,60,,,,,,,,,,57,,',
+',,,,,60,,,,60,,,,,60,69,,,,,,,,,,,,69,,,,,,,,,,,,,,,,,,60,,,,60,60,',
+',,,,,,,,,,69,,,60,60,60,69,,,,,,,,,,,,,,,,,,60,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,69,,,,,,,,,,,,,69,,,,,,69,,,,69,,,,,,,,,,,,,,,,,,28,,,,,60',
+',,,,,,,,,69,69,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,37,,,,,69,,,,69,,,,,',
+'60,,37,,,,,69,,,60,,,,,,37,,,,,,,,37,37,60,37,37,,37,,,,,,,,,,,,,,,',
+'37,,,,,37,37,69,,37,,,,,,,,,,,,,,,,,,,,,,,,,60,,,60,,,,,,,60,,,,,,,',
+',,60,37,,,60,,37,37,37,37,37,,37,,,,,,,,,,,,,,,,,,,60,,,60,60,,,60,',
+',,,,60,60,,,,60,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,37',
+',37,37,,37,,,,,,37,37,37,,,,,,,,,,,37,37,,,37,37,37,37,37,37,37,37,37',
+'37,37,37,37,37,37,37,37,37,37,37,37,37,,,,,37,,,,,,,,,,,,,,,,37,,,,',
+',,,,,,,,,,60,,,,,60,60,,,,,,,,,,60,,,37,,,,37,,,,,37,,,,,,60,,,,,,,',
+',,,,,,,,,,,,,37,,37,,37,,,,37,37,,,,,,,,,,,,,,,37,37,37,,,,,,,,,60,',
+',,,,,,,,37,,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,60,,,,,,60,,,,,,60,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,37,37,,,,,,,,,,,60,,,,,,,,,,,,,,,,,',
+',60,,,37,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,60,60,,,,,37,,,37,,,37,37',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,60,,,,,,,,,,,,37,60,,60,60,,,,,,,,,37,,,37',
+',,,,,,,,,,,,,,,,,,,60,37,,,,,,,,,,60,,,,,,,,,,,,,,,,,37,,,37,,,,37,37',
+',,,,37,37,,,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,37,,,,,37,37,,,,,,,,,,37,,,,,,,,,,,,,,,,,,37,,,,,,,,,',
+',,,37,37,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,37,,,,,,,,,37',
+',,37,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,37,,,,,,37,,,,,,37,,,,,,,,,,,,,37',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,37,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,37,,,,,,,,,,,,,37,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,37' ]
+ racc_goto_check = arr = ::Array.new(4471, 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, 403, 153, nil, 77, 176, 55, 69, 50, -332,
+ 28, -548, -677, -767, nil, -370, 47, 178, 0, -24,
+ 61, 30, 830, -154, -27, nil, 45, 59, 2107, -89,
+ 98, 1004, -192, -404, -17, 1358, -19, 3304, -335, -44,
+ -29, -413, -4, nil, -20, 23, 68, 185, 104, -297,
+ -26, nil, nil, -178, 138, -220, -453, 1935, -301, nil,
+ 2788, 129, 61, 50, 939, nil, -26, 27, -252, 2211,
+ 0, -367, 128, 4, nil, 32, -213, -179, 24, nil,
+ 106, 16, 168, 153, -45, 56, -261, 109, -12, -255,
+ -289, -273, -340, nil, 824, 1309, 470, 396, 1799, 1350,
+ 570, 1625, 201, 158, -55, nil, 1104, -298, -758, -370,
+ -600, 157, -165, 16, 51, 173, -128, 182, -388, -575,
+ -152, -805, -491, -464, -795, -687, -241, -723, nil, -652,
+ nil, -488, -242, 272, -757, -647, 221, -828, -512, -612,
+ nil, -680, -806, -903, -898, -124, -534, 214, -338, -248,
+ -22, -658, -656, -314, 23, nil, 14, 19, nil, nil,
+ -404, -733, -622, -857, -467, -777, -607, -651, -643, -596,
+ -692, nil, -510, nil, -508, -325, -314, nil, nil, -618,
+ -315, -315, nil, -445, -893, -945, nil, -673, -672, nil,
+ -78, nil, -591, nil, -554, nil, -625, -517, nil, nil,
+ 321, 318, 322, 322, -207, 343, 322, 323, 325, -225,
+ -219, nil, nil, -208, -244, nil, nil, -135, -583, -337,
+ -618, -287, -338, -654, -637, -940, nil, nil, -501 ]
+
+racc_goto_default = [
+ nil, nil, nil, 3, nil, 4, 386, 322, nil, nil,
+ 564, nil, 948, nil, 319, 320, nil, nil, nil, 11,
+ 12, 20, 238, nil, nil, 14, 15, nil, 16, 437,
+ 239, 351, nil, nil, 635, 237, 476, 305, 997, nil,
+ nil, nil, nil, 381, 140, 52, 53, nil, nil, nil,
+ 25, 26, 27, 757, nil, nil, nil, 339, nil, 28,
+ 336, 455, 35, nil, nil, 37, 40, 39, nil, 234,
+ 235, 398, nil, 463, 139, 84, nil, 442, 100, 49,
+ 551, 54, 271, nil, 919, 456, nil, 457, 468, nil,
+ 684, 525, 309, 295, 55, 56, 57, 58, 59, 60,
+ 61, 62, 63, nil, 296, 69, 70, nil, nil, nil,
+ nil, nil, nil, 617, 361, nil, nil, nil, nil, nil,
+ nil, 782, 584, nil, 783, 784, 572, 566, 567, 1143,
+ 1013, nil, 573, nil, nil, nil, 602, nil, 575, nil,
+ 906, nil, nil, nil, 582, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 467, nil, nil, 736, 728,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 882,
+ nil, 697, 706, 698, 699, nil, nil, 700, 701, nil,
+ nil, nil, 881, 883, nil, 884, 982, 983, 984, 985,
+ nil, 989, 593, 990, 705, 707, nil, nil, 83, 85,
+ 86, nil, nil, nil, nil, 645, nil, nil, nil, nil,
+ nil, 96, 97, nil, 926, 363, 571, 769, 574, 938,
+ 587, 589, 590, 1024, 594, 1025, 597, 600, 314 ]
+
+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, 174, :_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,
+ 1, 154, :_reduce_none,
+ 3, 172, :_reduce_37,
+ 3, 172, :_reduce_38,
+ 3, 172, :_reduce_39,
+ 3, 172, :_reduce_40,
+ 3, 166, :_reduce_41,
+ 3, 166, :_reduce_42,
+ 6, 166, :_reduce_43,
+ 5, 166, :_reduce_44,
+ 5, 166, :_reduce_45,
+ 5, 166, :_reduce_46,
+ 5, 166, :_reduce_47,
+ 3, 166, :_reduce_48,
+ 1, 176, :_reduce_none,
+ 3, 176, :_reduce_50,
+ 1, 176, :_reduce_none,
+ 1, 173, :_reduce_none,
+ 3, 173, :_reduce_53,
+ 3, 173, :_reduce_54,
+ 3, 173, :_reduce_55,
+ 2, 173, :_reduce_56,
+ 0, 186, :_reduce_57,
+ 4, 173, :_reduce_58,
+ 1, 173, :_reduce_none,
+ 1, 165, :_reduce_none,
+ 0, 190, :_reduce_61,
+ 3, 187, :_reduce_62,
+ 1, 189, :_reduce_63,
+ 2, 192, :_reduce_64,
+ 0, 196, :_reduce_65,
+ 5, 193, :_reduce_66,
+ 1, 168, :_reduce_none,
+ 1, 168, :_reduce_none,
+ 1, 198, :_reduce_none,
+ 4, 198, :_reduce_70,
+ 0, 205, :_reduce_71,
+ 4, 202, :_reduce_72,
+ 1, 204, :_reduce_none,
+ 2, 197, :_reduce_74,
+ 3, 197, :_reduce_75,
+ 4, 197, :_reduce_76,
+ 5, 197, :_reduce_77,
+ 4, 197, :_reduce_78,
+ 5, 197, :_reduce_79,
+ 2, 197, :_reduce_80,
+ 2, 197, :_reduce_81,
+ 2, 197, :_reduce_82,
+ 2, 197, :_reduce_83,
+ 2, 197, :_reduce_84,
+ 1, 167, :_reduce_85,
+ 3, 167, :_reduce_86,
+ 1, 210, :_reduce_87,
+ 3, 210, :_reduce_88,
+ 1, 209, :_reduce_none,
+ 2, 209, :_reduce_90,
+ 3, 209, :_reduce_91,
+ 5, 209, :_reduce_92,
+ 2, 209, :_reduce_93,
+ 4, 209, :_reduce_94,
+ 2, 209, :_reduce_95,
+ 4, 209, :_reduce_96,
+ 1, 209, :_reduce_97,
+ 3, 209, :_reduce_98,
+ 1, 213, :_reduce_none,
+ 3, 213, :_reduce_100,
+ 2, 212, :_reduce_101,
+ 3, 212, :_reduce_102,
+ 1, 215, :_reduce_103,
+ 3, 215, :_reduce_104,
+ 1, 214, :_reduce_105,
+ 1, 214, :_reduce_106,
+ 4, 214, :_reduce_107,
+ 3, 214, :_reduce_108,
+ 3, 214, :_reduce_109,
+ 3, 214, :_reduce_110,
+ 3, 214, :_reduce_111,
+ 2, 214, :_reduce_112,
+ 1, 214, :_reduce_113,
+ 1, 169, :_reduce_114,
+ 1, 169, :_reduce_115,
+ 4, 169, :_reduce_116,
+ 3, 169, :_reduce_117,
+ 3, 169, :_reduce_118,
+ 3, 169, :_reduce_119,
+ 3, 169, :_reduce_120,
+ 2, 169, :_reduce_121,
+ 1, 169, :_reduce_122,
+ 1, 218, :_reduce_123,
+ 1, 218, :_reduce_none,
+ 2, 219, :_reduce_125,
+ 1, 219, :_reduce_126,
+ 3, 219, :_reduce_127,
+ 1, 191, :_reduce_none,
+ 1, 191, :_reduce_none,
+ 1, 191, :_reduce_none,
+ 1, 191, :_reduce_none,
+ 1, 191, :_reduce_none,
+ 1, 163, :_reduce_133,
+ 1, 163, :_reduce_none,
+ 1, 164, :_reduce_135,
+ 0, 223, :_reduce_136,
+ 4, 164, :_reduce_137,
+ 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_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_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, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 3, 184, :_reduce_209,
+ 3, 184, :_reduce_210,
+ 6, 184, :_reduce_211,
+ 5, 184, :_reduce_212,
+ 5, 184, :_reduce_213,
+ 5, 184, :_reduce_214,
+ 5, 184, :_reduce_215,
+ 4, 184, :_reduce_216,
+ 3, 184, :_reduce_217,
+ 3, 184, :_reduce_218,
+ 3, 184, :_reduce_219,
+ 2, 184, :_reduce_220,
+ 2, 184, :_reduce_221,
+ 2, 184, :_reduce_222,
+ 2, 184, :_reduce_223,
+ 3, 184, :_reduce_224,
+ 3, 184, :_reduce_225,
+ 3, 184, :_reduce_226,
+ 3, 184, :_reduce_227,
+ 3, 184, :_reduce_228,
+ 3, 184, :_reduce_229,
+ 4, 184, :_reduce_230,
+ 2, 184, :_reduce_231,
+ 2, 184, :_reduce_232,
+ 3, 184, :_reduce_233,
+ 3, 184, :_reduce_234,
+ 3, 184, :_reduce_235,
+ 3, 184, :_reduce_236,
+ 1, 184, :_reduce_none,
+ 3, 184, :_reduce_238,
+ 3, 184, :_reduce_239,
+ 3, 184, :_reduce_240,
+ 3, 184, :_reduce_241,
+ 3, 184, :_reduce_242,
+ 2, 184, :_reduce_243,
+ 2, 184, :_reduce_244,
+ 3, 184, :_reduce_245,
+ 3, 184, :_reduce_246,
+ 3, 184, :_reduce_247,
+ 3, 184, :_reduce_248,
+ 3, 184, :_reduce_249,
+ 6, 184, :_reduce_250,
+ 4, 184, :_reduce_251,
+ 6, 184, :_reduce_252,
+ 4, 184, :_reduce_253,
+ 6, 184, :_reduce_254,
+ 1, 184, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 3, 226, :_reduce_260,
+ 3, 226, :_reduce_261,
+ 1, 175, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 2, 230, :_reduce_none,
+ 4, 230, :_reduce_265,
+ 2, 230, :_reduce_266,
+ 1, 224, :_reduce_none,
+ 3, 224, :_reduce_268,
+ 3, 235, :_reduce_269,
+ 5, 235, :_reduce_270,
+ 3, 235, :_reduce_271,
+ 0, 237, :_reduce_272,
+ 1, 237, :_reduce_none,
+ 0, 179, :_reduce_274,
+ 1, 179, :_reduce_none,
+ 2, 179, :_reduce_none,
+ 4, 179, :_reduce_277,
+ 2, 179, :_reduce_278,
+ 1, 208, :_reduce_279,
+ 2, 208, :_reduce_280,
+ 2, 208, :_reduce_281,
+ 4, 208, :_reduce_282,
+ 1, 208, :_reduce_283,
+ 0, 240, :_reduce_284,
+ 2, 201, :_reduce_285,
+ 2, 239, :_reduce_286,
+ 2, 238, :_reduce_287,
+ 0, 238, :_reduce_288,
+ 1, 232, :_reduce_289,
+ 2, 232, :_reduce_290,
+ 3, 232, :_reduce_291,
+ 4, 232, :_reduce_292,
+ 1, 171, :_reduce_293,
+ 1, 171, :_reduce_none,
+ 3, 170, :_reduce_295,
+ 4, 170, :_reduce_296,
+ 2, 170, :_reduce_297,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_308,
+ 0, 262, :_reduce_309,
+ 4, 228, :_reduce_310,
+ 0, 263, :_reduce_311,
+ 4, 228, :_reduce_312,
+ 0, 264, :_reduce_313,
+ 4, 228, :_reduce_314,
+ 3, 228, :_reduce_315,
+ 3, 228, :_reduce_316,
+ 2, 228, :_reduce_317,
+ 3, 228, :_reduce_318,
+ 3, 228, :_reduce_319,
+ 1, 228, :_reduce_320,
+ 4, 228, :_reduce_321,
+ 3, 228, :_reduce_322,
+ 1, 228, :_reduce_323,
+ 5, 228, :_reduce_324,
+ 4, 228, :_reduce_325,
+ 3, 228, :_reduce_326,
+ 2, 228, :_reduce_327,
+ 1, 228, :_reduce_none,
+ 2, 228, :_reduce_329,
+ 1, 228, :_reduce_none,
+ 6, 228, :_reduce_331,
+ 6, 228, :_reduce_332,
+ 4, 228, :_reduce_333,
+ 4, 228, :_reduce_334,
+ 5, 228, :_reduce_335,
+ 4, 228, :_reduce_336,
+ 5, 228, :_reduce_337,
+ 6, 228, :_reduce_338,
+ 0, 265, :_reduce_339,
+ 6, 228, :_reduce_340,
+ 0, 266, :_reduce_341,
+ 7, 228, :_reduce_342,
+ 0, 267, :_reduce_343,
+ 5, 228, :_reduce_344,
+ 4, 228, :_reduce_345,
+ 4, 228, :_reduce_346,
+ 1, 228, :_reduce_347,
+ 1, 228, :_reduce_348,
+ 1, 228, :_reduce_349,
+ 1, 228, :_reduce_350,
+ 1, 178, :_reduce_none,
+ 1, 207, :_reduce_352,
+ 1, 254, :_reduce_none,
+ 1, 254, :_reduce_none,
+ 2, 254, :_reduce_355,
+ 1, 188, :_reduce_none,
+ 1, 188, :_reduce_none,
+ 1, 255, :_reduce_none,
+ 5, 255, :_reduce_359,
+ 1, 159, :_reduce_none,
+ 2, 159, :_reduce_361,
+ 1, 258, :_reduce_none,
+ 1, 258, :_reduce_none,
+ 1, 268, :_reduce_364,
+ 3, 268, :_reduce_365,
+ 1, 271, :_reduce_366,
+ 3, 271, :_reduce_367,
+ 1, 270, :_reduce_none,
+ 3, 270, :_reduce_369,
+ 5, 270, :_reduce_370,
+ 1, 270, :_reduce_371,
+ 3, 270, :_reduce_372,
+ 2, 272, :_reduce_373,
+ 1, 272, :_reduce_374,
+ 1, 273, :_reduce_none,
+ 1, 273, :_reduce_none,
+ 4, 276, :_reduce_377,
+ 2, 276, :_reduce_378,
+ 2, 276, :_reduce_379,
+ 1, 276, :_reduce_380,
+ 2, 280, :_reduce_381,
+ 0, 280, :_reduce_382,
+ 1, 281, :_reduce_none,
+ 6, 282, :_reduce_384,
+ 8, 282, :_reduce_385,
+ 4, 282, :_reduce_386,
+ 6, 282, :_reduce_387,
+ 4, 282, :_reduce_388,
+ 2, 282, :_reduce_none,
+ 6, 282, :_reduce_390,
+ 2, 282, :_reduce_391,
+ 4, 282, :_reduce_392,
+ 6, 282, :_reduce_393,
+ 2, 282, :_reduce_394,
+ 4, 282, :_reduce_395,
+ 2, 282, :_reduce_396,
+ 4, 282, :_reduce_397,
+ 1, 282, :_reduce_none,
+ 0, 286, :_reduce_399,
+ 1, 286, :_reduce_400,
+ 3, 287, :_reduce_401,
+ 4, 287, :_reduce_402,
+ 1, 288, :_reduce_403,
+ 4, 288, :_reduce_404,
+ 1, 289, :_reduce_405,
+ 3, 289, :_reduce_406,
+ 1, 290, :_reduce_407,
+ 1, 290, :_reduce_none,
+ 0, 294, :_reduce_409,
+ 0, 295, :_reduce_410,
+ 5, 253, :_reduce_411,
+ 4, 292, :_reduce_412,
+ 1, 292, :_reduce_413,
+ 0, 298, :_reduce_414,
+ 4, 293, :_reduce_415,
+ 0, 299, :_reduce_416,
+ 4, 293, :_reduce_417,
+ 0, 301, :_reduce_418,
+ 4, 297, :_reduce_419,
+ 2, 199, :_reduce_420,
+ 4, 199, :_reduce_421,
+ 5, 199, :_reduce_422,
+ 5, 199, :_reduce_423,
+ 2, 252, :_reduce_424,
+ 4, 252, :_reduce_425,
+ 4, 252, :_reduce_426,
+ 3, 252, :_reduce_427,
+ 3, 252, :_reduce_428,
+ 3, 252, :_reduce_429,
+ 2, 252, :_reduce_430,
+ 1, 252, :_reduce_431,
+ 4, 252, :_reduce_432,
+ 0, 303, :_reduce_433,
+ 4, 251, :_reduce_434,
+ 0, 304, :_reduce_435,
+ 4, 251, :_reduce_436,
+ 0, 305, :_reduce_437,
+ 3, 203, :_reduce_438,
+ 0, 306, :_reduce_439,
+ 0, 307, :_reduce_440,
+ 4, 300, :_reduce_441,
+ 5, 256, :_reduce_442,
+ 1, 308, :_reduce_443,
+ 1, 308, :_reduce_none,
+ 0, 311, :_reduce_445,
+ 0, 312, :_reduce_446,
+ 7, 257, :_reduce_447,
+ 1, 310, :_reduce_448,
+ 1, 310, :_reduce_none,
+ 1, 309, :_reduce_450,
+ 3, 309, :_reduce_451,
+ 3, 309, :_reduce_452,
+ 1, 313, :_reduce_none,
+ 2, 313, :_reduce_454,
+ 3, 313, :_reduce_455,
+ 1, 313, :_reduce_456,
+ 1, 313, :_reduce_457,
+ 1, 313, :_reduce_458,
+ 1, 185, :_reduce_none,
+ 3, 318, :_reduce_460,
+ 1, 318, :_reduce_none,
+ 3, 320, :_reduce_462,
+ 1, 320, :_reduce_none,
+ 1, 322, :_reduce_464,
+ 1, 323, :_reduce_465,
+ 1, 321, :_reduce_none,
+ 4, 321, :_reduce_467,
+ 4, 321, :_reduce_468,
+ 4, 321, :_reduce_469,
+ 3, 321, :_reduce_470,
+ 4, 321, :_reduce_471,
+ 4, 321, :_reduce_472,
+ 4, 321, :_reduce_473,
+ 3, 321, :_reduce_474,
+ 3, 321, :_reduce_475,
+ 3, 321, :_reduce_476,
+ 2, 321, :_reduce_477,
+ 0, 327, :_reduce_478,
+ 4, 321, :_reduce_479,
+ 2, 321, :_reduce_480,
+ 0, 328, :_reduce_481,
+ 4, 321, :_reduce_482,
+ 1, 314, :_reduce_483,
+ 1, 314, :_reduce_484,
+ 2, 314, :_reduce_485,
+ 3, 314, :_reduce_486,
+ 5, 314, :_reduce_487,
+ 2, 314, :_reduce_488,
+ 4, 314, :_reduce_489,
+ 1, 314, :_reduce_none,
+ 2, 329, :_reduce_491,
+ 3, 329, :_reduce_492,
+ 1, 316, :_reduce_493,
+ 3, 316, :_reduce_494,
+ 5, 315, :_reduce_495,
+ 2, 332, :_reduce_496,
+ 1, 332, :_reduce_497,
+ 1, 331, :_reduce_498,
+ 3, 331, :_reduce_499,
+ 1, 330, :_reduce_none,
+ 3, 317, :_reduce_501,
+ 1, 317, :_reduce_502,
+ 2, 317, :_reduce_503,
+ 1, 317, :_reduce_504,
+ 1, 333, :_reduce_505,
+ 3, 333, :_reduce_506,
+ 2, 335, :_reduce_507,
+ 1, 335, :_reduce_508,
+ 1, 336, :_reduce_509,
+ 3, 336, :_reduce_510,
+ 2, 338, :_reduce_511,
+ 1, 338, :_reduce_512,
+ 2, 340, :_reduce_513,
+ 1, 334, :_reduce_none,
+ 1, 334, :_reduce_none,
+ 1, 324, :_reduce_none,
+ 3, 324, :_reduce_517,
+ 3, 324, :_reduce_518,
+ 2, 324, :_reduce_519,
+ 2, 324, :_reduce_520,
+ 1, 324, :_reduce_none,
+ 1, 324, :_reduce_none,
+ 1, 324, :_reduce_none,
+ 2, 324, :_reduce_524,
+ 2, 324, :_reduce_525,
+ 1, 341, :_reduce_none,
+ 1, 341, :_reduce_none,
+ 1, 341, :_reduce_none,
+ 1, 341, :_reduce_none,
+ 1, 341, :_reduce_none,
+ 1, 341, :_reduce_none,
+ 1, 341, :_reduce_none,
+ 1, 341, :_reduce_none,
+ 1, 341, :_reduce_534,
+ 1, 341, :_reduce_none,
+ 1, 319, :_reduce_536,
+ 2, 342, :_reduce_537,
+ 2, 325, :_reduce_538,
+ 3, 325, :_reduce_539,
+ 1, 325, :_reduce_540,
+ 6, 158, :_reduce_541,
+ 0, 158, :_reduce_542,
+ 1, 343, :_reduce_543,
+ 1, 343, :_reduce_none,
+ 1, 343, :_reduce_none,
+ 2, 344, :_reduce_546,
+ 1, 344, :_reduce_none,
+ 2, 160, :_reduce_548,
+ 1, 160, :_reduce_none,
+ 1, 241, :_reduce_none,
+ 1, 241, :_reduce_none,
+ 1, 242, :_reduce_552,
+ 1, 346, :_reduce_553,
+ 2, 346, :_reduce_554,
+ 3, 347, :_reduce_555,
+ 1, 347, :_reduce_556,
+ 1, 347, :_reduce_557,
+ 3, 243, :_reduce_558,
+ 4, 244, :_reduce_559,
+ 3, 245, :_reduce_560,
+ 0, 350, :_reduce_561,
+ 3, 350, :_reduce_562,
+ 1, 351, :_reduce_563,
+ 2, 351, :_reduce_564,
+ 3, 247, :_reduce_565,
+ 0, 353, :_reduce_566,
+ 3, 353, :_reduce_567,
+ 3, 246, :_reduce_568,
+ 3, 248, :_reduce_569,
+ 0, 354, :_reduce_570,
+ 3, 354, :_reduce_571,
+ 0, 355, :_reduce_572,
+ 3, 355, :_reduce_573,
+ 0, 337, :_reduce_574,
+ 2, 337, :_reduce_575,
+ 0, 348, :_reduce_576,
+ 2, 348, :_reduce_577,
+ 0, 349, :_reduce_578,
+ 2, 349, :_reduce_579,
+ 1, 352, :_reduce_580,
+ 2, 352, :_reduce_581,
+ 0, 357, :_reduce_582,
+ 4, 352, :_reduce_583,
+ 1, 356, :_reduce_584,
+ 1, 356, :_reduce_585,
+ 1, 356, :_reduce_586,
+ 1, 356, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 358, :_reduce_590,
+ 3, 359, :_reduce_591,
+ 1, 345, :_reduce_592,
+ 2, 345, :_reduce_593,
+ 1, 225, :_reduce_594,
+ 1, 225, :_reduce_595,
+ 1, 225, :_reduce_596,
+ 1, 225, :_reduce_597,
+ 1, 216, :_reduce_598,
+ 1, 216, :_reduce_599,
+ 1, 216, :_reduce_600,
+ 1, 216, :_reduce_601,
+ 1, 216, :_reduce_602,
+ 1, 217, :_reduce_603,
+ 1, 217, :_reduce_604,
+ 1, 217, :_reduce_605,
+ 1, 217, :_reduce_606,
+ 1, 217, :_reduce_607,
+ 1, 217, :_reduce_608,
+ 1, 217, :_reduce_609,
+ 1, 249, :_reduce_610,
+ 1, 249, :_reduce_611,
+ 1, 177, :_reduce_612,
+ 1, 177, :_reduce_613,
+ 1, 182, :_reduce_614,
+ 1, 182, :_reduce_615,
+ 0, 360, :_reduce_616,
+ 4, 259, :_reduce_617,
+ 0, 259, :_reduce_618,
+ 3, 227, :_reduce_619,
+ 5, 227, :_reduce_620,
+ 3, 227, :_reduce_621,
+ 1, 261, :_reduce_none,
+ 0, 362, :_reduce_623,
+ 3, 261, :_reduce_624,
+ 4, 361, :_reduce_625,
+ 2, 361, :_reduce_626,
+ 2, 361, :_reduce_627,
+ 1, 361, :_reduce_628,
+ 2, 364, :_reduce_629,
+ 0, 364, :_reduce_630,
+ 6, 296, :_reduce_631,
+ 8, 296, :_reduce_632,
+ 4, 296, :_reduce_633,
+ 6, 296, :_reduce_634,
+ 4, 296, :_reduce_635,
+ 6, 296, :_reduce_636,
+ 2, 296, :_reduce_637,
+ 4, 296, :_reduce_638,
+ 6, 296, :_reduce_639,
+ 2, 296, :_reduce_640,
+ 4, 296, :_reduce_641,
+ 2, 296, :_reduce_642,
+ 4, 296, :_reduce_643,
+ 1, 296, :_reduce_644,
+ 0, 296, :_reduce_645,
+ 1, 236, :_reduce_646,
+ 1, 291, :_reduce_647,
+ 1, 291, :_reduce_648,
+ 1, 291, :_reduce_649,
+ 1, 291, :_reduce_650,
+ 1, 269, :_reduce_none,
+ 1, 269, :_reduce_652,
+ 1, 366, :_reduce_653,
+ 1, 367, :_reduce_654,
+ 3, 367, :_reduce_655,
+ 1, 283, :_reduce_656,
+ 3, 283, :_reduce_657,
+ 1, 368, :_reduce_658,
+ 2, 369, :_reduce_659,
+ 1, 369, :_reduce_660,
+ 2, 370, :_reduce_661,
+ 1, 370, :_reduce_662,
+ 1, 277, :_reduce_663,
+ 3, 277, :_reduce_664,
+ 1, 363, :_reduce_665,
+ 3, 363, :_reduce_666,
+ 1, 339, :_reduce_none,
+ 1, 339, :_reduce_none,
+ 2, 275, :_reduce_669,
+ 2, 274, :_reduce_670,
+ 1, 274, :_reduce_671,
+ 3, 371, :_reduce_672,
+ 3, 372, :_reduce_673,
+ 1, 284, :_reduce_674,
+ 3, 284, :_reduce_675,
+ 1, 365, :_reduce_676,
+ 3, 365, :_reduce_677,
+ 1, 373, :_reduce_none,
+ 1, 373, :_reduce_none,
+ 2, 285, :_reduce_680,
+ 1, 285, :_reduce_681,
+ 1, 374, :_reduce_none,
+ 1, 374, :_reduce_none,
+ 2, 279, :_reduce_684,
+ 2, 278, :_reduce_685,
+ 0, 278, :_reduce_686,
+ 1, 194, :_reduce_none,
+ 3, 194, :_reduce_688,
+ 0, 250, :_reduce_689,
+ 2, 250, :_reduce_none,
+ 1, 234, :_reduce_691,
+ 3, 234, :_reduce_692,
+ 3, 375, :_reduce_693,
+ 2, 375, :_reduce_694,
+ 4, 375, :_reduce_695,
+ 2, 375, :_reduce_696,
+ 1, 206, :_reduce_none,
+ 1, 206, :_reduce_none,
+ 1, 206, :_reduce_none,
+ 1, 200, :_reduce_none,
+ 1, 200, :_reduce_none,
+ 1, 200, :_reduce_none,
+ 1, 200, :_reduce_none,
+ 1, 302, :_reduce_none,
+ 1, 302, :_reduce_none,
+ 1, 302, :_reduce_none,
+ 1, 195, :_reduce_none,
+ 1, 195, :_reduce_none,
+ 1, 181, :_reduce_709,
+ 1, 181, :_reduce_710,
+ 0, 151, :_reduce_none,
+ 1, 151, :_reduce_none,
+ 0, 183, :_reduce_none,
+ 1, 183, :_reduce_none,
+ 2, 211, :_reduce_715,
+ 2, 180, :_reduce_716,
+ 2, 326, :_reduce_717,
+ 0, 233, :_reduce_none,
+ 1, 233, :_reduce_none,
+ 1, 233, :_reduce_none,
+ 1, 260, :_reduce_721,
+ 1, 260, :_reduce_none,
+ 1, 153, :_reduce_none,
+ 2, 153, :_reduce_none,
+ 0, 231, :_reduce_725 ]
+
+racc_reduce_n = 726
+
+racc_shift_n = 1219
+
+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",
+ "rassign",
+ "expr",
+ "@1",
+ "arg_value",
+ "command_rhs",
+ "var_lhs",
+ "primary_value",
+ "opt_call_args",
+ "rbracket",
+ "call_op",
+ "backref",
+ "opt_nl",
+ "arg",
+ "p_expr",
+ "@2",
+ "expr_value_do",
+ "do",
+ "def_name",
+ "@3",
+ "fname",
+ "defn_head",
+ "defs_head",
+ "singleton",
+ "dot_or_colon",
+ "@4",
+ "command",
+ "block_command",
+ "block_call",
+ "operation2",
+ "command_args",
+ "cmd_brace_block",
+ "brace_body",
+ "fcall",
+ "@5",
+ "operation",
+ "k_return",
+ "call_args",
+ "mlhs_basic",
+ "mlhs_inner",
+ "rparen",
+ "mlhs_head",
+ "mlhs_item",
+ "mlhs_node",
+ "mlhs_post",
+ "user_variable",
+ "keyword_variable",
+ "cname",
+ "cpath",
+ "op",
+ "reswords",
+ "symbol",
+ "@6",
+ "arg_rhs",
+ "simple_numeric",
+ "rel_expr",
+ "f_paren_args",
+ "primary",
+ "relop",
+ "aref_args",
+ "none",
+ "args",
+ "trailer",
+ "assocs",
+ "paren_args",
+ "args_forward",
+ "opt_paren_args",
+ "opt_block_arg",
+ "block_arg",
+ "@7",
+ "literal",
+ "strings",
+ "xstring",
+ "regexp",
+ "words",
+ "qwords",
+ "symbols",
+ "qsymbols",
+ "var_ref",
+ "assoc_list",
+ "brace_block",
+ "method_call",
+ "lambda",
+ "then",
+ "if_tail",
+ "case_body",
+ "p_case_body",
+ "for_var",
+ "superclass",
+ "term",
+ "f_arglist",
+ "@8",
+ "@9",
+ "@10",
+ "@11",
+ "@12",
+ "@13",
+ "f_marg",
+ "f_norm_arg",
+ "f_margs",
+ "f_marg_list",
+ "f_rest_marg",
+ "f_any_kwrest",
+ "f_kwrest",
+ "f_no_kwarg",
+ "block_args_tail",
+ "f_block_kwarg",
+ "opt_f_block_arg",
+ "f_block_arg",
+ "opt_block_args_tail",
+ "excessed_comma",
+ "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",
+ "@14",
+ "@15",
+ "f_args",
+ "do_block",
+ "@16",
+ "@17",
+ "do_body",
+ "@18",
+ "operation3",
+ "@19",
+ "@20",
+ "@21",
+ "@22",
+ "@23",
+ "cases",
+ "p_top_expr",
+ "p_cases",
+ "@24",
+ "@25",
+ "p_top_expr_body",
+ "p_args",
+ "p_find",
+ "p_args_tail",
+ "p_kwargs",
+ "p_as",
+ "p_variable",
+ "p_alt",
+ "p_expr_basic",
+ "p_lparen",
+ "p_lbracket",
+ "p_value",
+ "p_const",
+ "rbrace",
+ "@26",
+ "@27",
+ "p_args_head",
+ "p_arg",
+ "p_args_post",
+ "p_rest",
+ "p_kwarg",
+ "p_any_kwrest",
+ "p_kw",
+ "p_kw_label",
+ "string_contents",
+ "p_kwrest",
+ "kwrest_mark",
+ "p_kwnorest",
+ "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",
+ "@28",
+ "ssym",
+ "dsym",
+ "@29",
+ "args_tail",
+ "@30",
+ "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
+
+# reduce 36 omitted
+
+def _reduce_37(val, _values, result)
+ result = @builder.rassign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_38(val, _values, result)
+ result = @builder.multi_rassign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_39(val, _values, result)
+ result = @builder.rassign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_40(val, _values, result)
+ result = @builder.multi_rassign(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
+
+def _reduce_42(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_43(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_44(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_45(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_46(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_47(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_48(val, _values, result)
+ @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 49 omitted
+
+def _reduce_50(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 51 omitted
+
+# reduce 52 omitted
+
+def _reduce_53(val, _values, result)
+ result = @builder.logical_op(:and, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_54(val, _values, result)
+ result = @builder.logical_op(:or, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_55(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[2], nil)
+
+ result
+end
+
+def _reduce_56(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[1], nil)
+
+ result
+end
+
+def _reduce_57(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_58(val, _values, result)
+ @lexer.in_kwarg = val[2]
+ result = @builder.in_match(val[0], val[1], val[3])
+
+ result
+end
+
+# reduce 59 omitted
+
+# reduce 60 omitted
+
+def _reduce_61(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_62(val, _values, result)
+ @lexer.cond.pop
+ result = [ val[1], val[2] ]
+
+ result
+end
+
+def _reduce_63(val, _values, result)
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ @current_arg_stack.push(nil)
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_64(val, _values, result)
+ @context.push(:def)
+
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+def _reduce_65(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_66(val, _values, result)
+ @context.push(:defs)
+
+ result = [ val[0], val[1], val[2], val[4] ]
+
+ result
+end
+
+# reduce 67 omitted
+
+# reduce 68 omitted
+
+# reduce 69 omitted
+
+def _reduce_70(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_71(val, _values, result)
+ @context.push(:block)
+
+ result
+end
+
+def _reduce_72(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.pop
+
+ result
+end
+
+# reduce 73 omitted
+
+def _reduce_74(val, _values, result)
+ result = @builder.call_method(nil, nil, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_75(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_76(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_77(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_78(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_79(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_80(val, _values, result)
+ result = @builder.keyword_cmd(:super, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_81(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_82(val, _values, result)
+ result = @builder.keyword_cmd(:return, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_83(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_84(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_85(val, _values, result)
+ result = @builder.multi_lhs(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_86(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_87(val, _values, result)
+ result = @builder.multi_lhs(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_88(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 89 omitted
+
+def _reduce_90(val, _values, result)
+ result = val[0].
+ push(val[1])
+
+ result
+end
+
+def _reduce_91(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1], val[2]))
+
+ result
+end
+
+def _reduce_92(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1], val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_93(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1]))
+
+ result
+end
+
+def _reduce_94(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1])).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_95(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_96(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_97(val, _values, result)
+ result = [ @builder.splat(val[0]) ]
+
+ result
+end
+
+def _reduce_98(val, _values, result)
+ result = [ @builder.splat(val[0]),
+ *val[2] ]
+
+ result
+end
+
+# reduce 99 omitted
+
+def _reduce_100(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_101(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_102(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_103(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_104(val, _values, result)
+ result = val[0] << val[2]
+
+ 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)
+ 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_109(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_110(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_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)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_115(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_116(val, _values, result)
+ result = @builder.index_asgn(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_117(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_118(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_119(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_120(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_fetch(val[0], val[1], val[2]))
+
+ result
+end
+
+def _reduce_121(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_global(val[0], val[1]))
+
+ result
+end
+
+def _reduce_122(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_123(val, _values, result)
+ diagnostic :error, :module_name_const, nil, val[0]
+
+ result
+end
+
+# reduce 124 omitted
+
+def _reduce_125(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_126(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_127(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 128 omitted
+
+# reduce 129 omitted
+
+# reduce 130 omitted
+
+# reduce 131 omitted
+
+# reduce 132 omitted
+
+def _reduce_133(val, _values, result)
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+# reduce 134 omitted
+
+def _reduce_135(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_136(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_137(val, _values, result)
+ result = val[0] << val[3]
+
+ result
+end
+
+# 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
+
+# reduce 200 omitted
+
+# reduce 201 omitted
+
+# reduce 202 omitted
+
+# reduce 203 omitted
+
+# reduce 204 omitted
+
+# reduce 205 omitted
+
+# reduce 206 omitted
+
+# reduce 207 omitted
+
+# reduce 208 omitted
+
+def _reduce_209(val, _values, result)
+ result = @builder.assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_210(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_211(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_212(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_213(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_214(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_215(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_216(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_217(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_218(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_219(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_220(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_221(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_222(val, _values, result)
+ result = @builder.range_inclusive(nil, val[0], val[1])
+
+ result
+end
+
+def _reduce_223(val, _values, result)
+ result = @builder.range_exclusive(nil, 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
+
+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.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_230(val, _values, result)
+ result = @builder.unary_op(val[0],
+ @builder.binary_op(
+ val[1], val[2], val[3]))
+
+ result
+end
+
+def _reduce_231(val, _values, result)
+ result = @builder.unary_op(val[0], val[1])
+
+ 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.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_236(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 237 omitted
+
+def _reduce_238(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_239(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_240(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_241(val, _values, result)
+ result = @builder.match_op(val[0], val[1], val[2])
+
+ result
+end
+
+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.not_op(val[0], nil, val[1], nil)
+
+ result
+end
+
+def _reduce_244(val, _values, result)
+ result = @builder.unary_op(val[0], val[1])
+
+ result
+end
+
+def _reduce_245(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_246(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_247(val, _values, result)
+ result = @builder.logical_op(:and, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_248(val, _values, result)
+ result = @builder.logical_op(:or, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_249(val, _values, result)
+ result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil)
+
+ result
+end
+
+def _reduce_250(val, _values, result)
+ result = @builder.ternary(val[0], val[1],
+ val[2], val[4], val[5])
+
+ result
+end
+
+def _reduce_251(val, _values, result)
+ result = @builder.def_endless_method(*val[0],
+ val[1], val[2], val[3])
+
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ @static_env.unextend
+ @context.pop
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_252(val, _values, result)
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_method(*val[0],
+ val[1], val[2], method_body)
+
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ @static_env.unextend
+ @context.pop
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_253(val, _values, result)
+ result = @builder.def_endless_singleton(*val[0],
+ val[1], val[2], val[3])
+
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ @static_env.unextend
+ @context.pop
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_254(val, _values, result)
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_singleton(*val[0],
+ val[1], val[2], method_body)
+
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ @static_env.unextend
+ @context.pop
+ @current_arg_stack.pop
+
+ result
+end
+
+# reduce 255 omitted
+
+# reduce 256 omitted
+
+# reduce 257 omitted
+
+# reduce 258 omitted
+
+# reduce 259 omitted
+
+def _reduce_260(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_261(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 262 omitted
+
+# reduce 263 omitted
+
+# reduce 264 omitted
+
+def _reduce_265(val, _values, result)
+ result = val[0] << @builder.associate(nil, val[2], nil)
+
+ result
+end
+
+def _reduce_266(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+
+ result
+end
+
+# reduce 267 omitted
+
+def _reduce_268(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_269(val, _values, result)
+ result = val
+
+ result
+end
+
+def _reduce_270(val, _values, result)
+ unless @static_env.declared_forward_args?
+ diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3]
+ end
+
+ result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]]
+
+ result
+end
+
+def _reduce_271(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_272(val, _values, result)
+ result = [ nil, [], nil ]
+
+ result
+end
+
+# reduce 273 omitted
+
+def _reduce_274(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 275 omitted
+
+# reduce 276 omitted
+
+def _reduce_277(val, _values, result)
+ result = val[0] << @builder.associate(nil, val[2], nil)
+
+ result
+end
+
+def _reduce_278(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+
+ result
+end
+
+def _reduce_279(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_280(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_281(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+ result.concat(val[1])
+
+ result
+end
+
+def _reduce_282(val, _values, result)
+ assocs = @builder.associate(nil, val[2], nil)
+ result = val[0] << assocs
+ result.concat(val[3])
+
+ result
+end
+
+def _reduce_283(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_284(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_285(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_286(val, _values, result)
+ result = @builder.block_pass(val[0], val[1])
+
+ result
+end
+
+def _reduce_287(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_288(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_289(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_290(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_291(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_292(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_293(val, _values, result)
+ result = @builder.array(nil, val[0], nil)
+
+ result
+end
+
+# reduce 294 omitted
+
+def _reduce_295(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_296(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_297(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+# reduce 298 omitted
+
+# reduce 299 omitted
+
+# reduce 300 omitted
+
+# reduce 301 omitted
+
+# reduce 302 omitted
+
+# reduce 303 omitted
+
+# reduce 304 omitted
+
+# reduce 305 omitted
+
+# reduce 306 omitted
+
+# reduce 307 omitted
+
+def _reduce_308(val, _values, result)
+ result = @builder.call_method(nil, nil, val[0])
+
+ result
+end
+
+def _reduce_309(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_310(val, _values, result)
+ @lexer.cmdarg.pop
+
+ result = @builder.begin_keyword(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_311(val, _values, result)
+ @lexer.state = :expr_endarg
+
+ result
+end
+
+def _reduce_312(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_313(val, _values, result)
+ @lexer.state = :expr_endarg
+
+ result
+end
+
+def _reduce_314(val, _values, result)
+ result = @builder.begin(val[0], nil, val[3])
+
+ result
+end
+
+def _reduce_315(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_316(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_317(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_318(val, _values, result)
+ result = @builder.array(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ result = @builder.associate(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ result = @builder.keyword_cmd(:return, val[0])
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2])
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0])
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ result = @builder.keyword_cmd(:defined?, val[0],
+ val[2], [ val[3] ], val[4])
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ result = @builder.not_op(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ result = @builder.not_op(val[0], val[1], nil, val[2])
+
+ result
+end
+
+def _reduce_327(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 328 omitted
+
+def _reduce_329(val, _values, result)
+ begin_t, args, body, end_t = val[1]
+ result = @builder.block(val[0],
+ begin_t, args, body, end_t)
+
+ result
+end
+
+# reduce 330 omitted
+
+def _reduce_331(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_332(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_333(val, _values, result)
+ result = @builder.loop(:while, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_334(val, _values, result)
+ result = @builder.loop(:until, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_335(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_336(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_337(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_338(val, _values, result)
+ result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5])
+
+ result
+end
+
+def _reduce_339(val, _values, result)
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ @context.push(:class)
+
+ result
+end
+
+def _reduce_340(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_341(val, _values, result)
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ @context.push(:sclass)
+
+ result
+end
+
+def _reduce_342(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_343(val, _values, result)
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @context.push(:module)
+
+ result
+end
+
+def _reduce_344(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
+ @context.pop
+
+ result
+end
+
+def _reduce_345(val, _values, result)
+ result = @builder.def_method(*val[0], val[1],
+ val[2], val[3])
+
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ @static_env.unextend
+ @context.pop
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_346(val, _values, result)
+ result = @builder.def_singleton(*val[0], val[1],
+ val[2], val[3])
+
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ @static_env.unextend
+ @context.pop
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_347(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_349(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 351 omitted
+
+def _reduce_352(val, _values, result)
+ if @context.in_class?
+ diagnostic :error, :invalid_return, nil, val[0]
+ end
+
+ result
+end
+
+# reduce 353 omitted
+
+# reduce 354 omitted
+
+def _reduce_355(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 356 omitted
+
+# reduce 357 omitted
+
+# reduce 358 omitted
+
+def _reduce_359(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 360 omitted
+
+def _reduce_361(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 362 omitted
+
+# reduce 363 omitted
+
+def _reduce_364(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_365(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_366(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_367(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 368 omitted
+
+def _reduce_369(val, _values, result)
+ result = val[0].
+ push(val[2])
+
+ result
+end
+
+def _reduce_370(val, _values, result)
+ result = val[0].
+ push(val[2]).
+ concat(val[4])
+
+ 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)
+ result = @builder.restarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_374(val, _values, result)
+ result = @builder.restarg(val[0])
+
+ result
+end
+
+# reduce 375 omitted
+
+# reduce 376 omitted
+
+def _reduce_377(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_378(val, _values, result)
+ result = val[0].concat(val[1])
+
+ 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] ]
+
+ result
+end
+
+def _reduce_381(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_382(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 383 omitted
+
+def _reduce_384(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_385(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 389 omitted
+
+def _reduce_390(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_391(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_392(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_393(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_394(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_395(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_396(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 398 omitted
+
+def _reduce_399(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_401(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_402(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_403(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_404(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_405(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_406(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_407(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 408 omitted
+
+def _reduce_409(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push
+ @context.push(:lambda)
+
+ result
+end
+
+def _reduce_410(val, _values, result)
+ @context.pop
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_411(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+ args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2]
+ begin_t, body, end_t = val[4]
+
+ @max_numparam_stack.pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ result
+end
+
+def _reduce_412(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_413(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_414(val, _values, result)
+ @context.push(:lambda)
+
+ 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(:lambda)
+
+ 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)
+ @context.push(:block)
+
+ result
+end
+
+def _reduce_419(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.pop
+
+ result
+end
+
+def _reduce_420(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_421(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_422(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_423(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_424(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_425(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_426(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_427(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_428(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_429(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_430(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_431(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_432(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_433(val, _values, result)
+ @context.push(:block)
+
+ result
+end
+
+def _reduce_434(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.pop
+
+ result
+end
+
+def _reduce_435(val, _values, result)
+ @context.push(:block)
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.pop
+
+ result
+end
+
+def _reduce_437(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push
+
+ result
+end
+
+def _reduce_438(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_439(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push
+
+ result
+end
+
+def _reduce_440(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_441(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_442(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_443(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 444 omitted
+
+def _reduce_445(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_446(val, _values, result)
+ @lexer.in_kwarg = val[1]
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]),
+ *val[6] ]
+
+ result
+end
+
+def _reduce_448(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 449 omitted
+
+def _reduce_450(val, _values, result)
+ result = [ val[0], nil ]
+
+ result
+end
+
+def _reduce_451(val, _values, result)
+ result = [ val[0], @builder.if_guard(val[1], val[2]) ]
+
+ result
+end
+
+def _reduce_452(val, _values, result)
+ result = [ val[0], @builder.unless_guard(val[1], val[2]) ]
+
+ result
+end
+
+# reduce 453 omitted
+
+def _reduce_454(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], val[1])
+ result = @builder.array_pattern(nil, [ item ], nil)
+
+ result
+end
+
+def _reduce_455(val, _values, result)
+ result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil)
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ result = @builder.find_pattern(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_457(val, _values, result)
+ result = @builder.array_pattern(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_458(val, _values, result)
+ result = @builder.hash_pattern(nil, val[0], nil)
+
+ result
+end
+
+# reduce 459 omitted
+
+def _reduce_460(val, _values, result)
+ result = @builder.match_as(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 461 omitted
+
+def _reduce_462(val, _values, result)
+ result = @builder.match_alt(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 463 omitted
+
+def _reduce_464(val, _values, result)
+ result = val[0]
+ @pattern_hash_keys.push
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ result = val[0]
+ @pattern_hash_keys.push
+
+ result
+end
+
+# reduce 466 omitted
+
+def _reduce_467(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_468(val, _values, result)
+ @pattern_hash_keys.pop
+ pattern = @builder.find_pattern(nil, val[2], nil)
+ result = @builder.const_pattern(val[0], val[1], pattern, val[3])
+
+ result
+end
+
+def _reduce_469(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_470(val, _values, result)
+ pattern = @builder.array_pattern(val[1], nil, val[2])
+ result = @builder.const_pattern(val[0], val[1], pattern, val[2])
+
+ result
+end
+
+def _reduce_471(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_472(val, _values, result)
+ @pattern_hash_keys.pop
+ pattern = @builder.find_pattern(nil, val[2], nil)
+ result = @builder.const_pattern(val[0], val[1], pattern, val[3])
+
+ result
+end
+
+def _reduce_473(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_474(val, _values, result)
+ pattern = @builder.array_pattern(val[1], nil, val[2])
+ result = @builder.const_pattern(val[0], val[1], pattern, val[2])
+
+ result
+end
+
+def _reduce_475(val, _values, result)
+ result = @builder.array_pattern(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_476(val, _values, result)
+ result = @builder.find_pattern(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_477(val, _values, result)
+ result = @builder.array_pattern(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_478(val, _values, result)
+ @pattern_hash_keys.push
+ result = @lexer.in_kwarg
+ @lexer.in_kwarg = false
+
+ result
+end
+
+def _reduce_479(val, _values, result)
+ @pattern_hash_keys.pop
+ @lexer.in_kwarg = val[1]
+ result = @builder.hash_pattern(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_480(val, _values, result)
+ result = @builder.hash_pattern(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_481(val, _values, result)
+ @pattern_hash_keys.push
+
+ result
+end
+
+def _reduce_482(val, _values, result)
+ @pattern_hash_keys.pop
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_483(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_484(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_485(val, _values, result)
+ result = [ *val[0], val[1] ]
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ match_rest = @builder.match_rest(val[1], val[2])
+ result = [ *val[0], match_rest ]
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ match_rest = @builder.match_rest(val[1], val[2])
+ result = [ *val[0], match_rest, *val[4] ]
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ result = [ *val[0], @builder.match_rest(val[1]) ]
+
+ result
+end
+
+def _reduce_489(val, _values, result)
+ result = [ *val[0], @builder.match_rest(val[1]), *val[3] ]
+
+ result
+end
+
+# reduce 490 omitted
+
+def _reduce_491(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], val[1])
+ result = [ item ]
+
+ result
+end
+
+def _reduce_492(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], val[2])
+ result = [ *val[0], last_item ]
+
+ result
+end
+
+def _reduce_493(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = [ val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = [ val[0], *val[2], val[4] ]
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ result = @builder.match_rest(val[0], val[1])
+
+ result
+end
+
+def _reduce_497(val, _values, result)
+ result = @builder.match_rest(val[0])
+
+ 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
+
+# reduce 500 omitted
+
+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]
+
+ result
+end
+
+def _reduce_504(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_505(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = [ *val[0], val[2] ]
+
+ result
+end
+
+def _reduce_507(val, _values, result)
+ result = @builder.match_pair(*val[0], val[1])
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ result = @builder.match_label(*val[0])
+
+ result
+end
+
+def _reduce_509(val, _values, result)
+ check_kwarg_name(val[0])
+ result = [:label, val[0]]
+
+ result
+end
+
+def _reduce_510(val, _values, result)
+ result = [:quoted, [val[0], val[1], val[2]]]
+
+ result
+end
+
+def _reduce_511(val, _values, result)
+ result = [ @builder.match_rest(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_512(val, _values, result)
+ result = [ @builder.match_rest(val[0], nil) ]
+
+ result
+end
+
+def _reduce_513(val, _values, result)
+ result = [ @builder.match_nil_pattern(val[0], val[1]) ]
+
+ result
+end
+
+# reduce 514 omitted
+
+# reduce 515 omitted
+
+# reduce 516 omitted
+
+def _reduce_517(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_518(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_519(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_520(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], nil)
+
+ result
+end
+
+# reduce 521 omitted
+
+# reduce 522 omitted
+
+# reduce 523 omitted
+
+def _reduce_524(val, _values, result)
+ result = @builder.range_inclusive(nil, val[0], val[1])
+
+ result
+end
+
+def _reduce_525(val, _values, result)
+ result = @builder.range_exclusive(nil, val[0], val[1])
+
+ result
+end
+
+# reduce 526 omitted
+
+# reduce 527 omitted
+
+# reduce 528 omitted
+
+# reduce 529 omitted
+
+# reduce 530 omitted
+
+# reduce 531 omitted
+
+# reduce 532 omitted
+
+# reduce 533 omitted
+
+def _reduce_534(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+# reduce 535 omitted
+
+def _reduce_536(val, _values, result)
+ result = @builder.match_var(val[0])
+
+ result
+end
+
+def _reduce_537(val, _values, result)
+ name = val[1][0]
+ unless static_env.declared?(name)
+ diagnostic :error, :undefined_lvar, { :name => name }, val[1]
+ end
+
+ lvar = @builder.accessible(@builder.ident(val[1]))
+ result = @builder.pin(val[0], lvar)
+
+ result
+end
+
+def _reduce_538(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_539(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_540(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_541(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_542(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_543(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 544 omitted
+
+# reduce 545 omitted
+
+def _reduce_546(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 547 omitted
+
+def _reduce_548(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 549 omitted
+
+# reduce 550 omitted
+
+# reduce 551 omitted
+
+def _reduce_552(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_553(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_554(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_555(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_556(val, _values, result)
+ string = @builder.string(val[0])
+ result = @builder.dedent_string(string, @lexer.dedent_level)
+
+ result
+end
+
+def _reduce_557(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_558(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_559(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_560(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_561(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_562(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_563(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_564(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_565(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_566(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_567(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_568(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_569(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_570(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_571(val, _values, result)
+ result = val[0] << @builder.string_internal(val[1])
+
+ result
+end
+
+def _reduce_572(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_573(val, _values, result)
+ result = val[0] << @builder.symbol_internal(val[1])
+
+ result
+end
+
+def _reduce_574(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_575(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_576(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_577(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_578(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_579(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_580(val, _values, result)
+ result = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_581(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_582(val, _values, result)
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+
+ result
+end
+
+def _reduce_583(val, _values, result)
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_584(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_585(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_586(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 587 omitted
+
+# reduce 588 omitted
+
+# reduce 589 omitted
+
+def _reduce_590(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_591(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_592(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_593(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_594(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_595(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_596(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.rational(val[0])
+
+ result
+end
+
+def _reduce_597(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.complex(val[0])
+
+ result
+end
+
+def _reduce_598(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_599(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_600(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_601(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_602(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_603(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_604(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_605(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_606(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_607(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_608(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_609(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_610(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_611(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_612(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_613(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_614(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_615(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_616(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_617(val, _values, result)
+ result = [ val[0], val[2] ]
+
+ result
+end
+
+def _reduce_618(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_619(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_620(val, _values, result)
+ args = [ *val[1], @builder.forward_arg(val[3]) ]
+ result = @builder.args(val[0], args, val[4])
+
+ @static_env.declare_forward_args
+
+ result
+end
+
+def _reduce_621(val, _values, result)
+ result = @builder.forward_only_args(val[0], val[1], val[2])
+ @static_env.declare_forward_args
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+# reduce 622 omitted
+
+def _reduce_623(val, _values, result)
+ result = @lexer.in_kwarg
+ @lexer.in_kwarg = true
+
+ result
+end
+
+def _reduce_624(val, _values, result)
+ @lexer.in_kwarg = val[0]
+ result = @builder.args(nil, val[1], nil)
+
+ result
+end
+
+def _reduce_625(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_626(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_627(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_628(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_629(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_630(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_631(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_632(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_633(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_634(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_635(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_636(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_637(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_638(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_639(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_640(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_641(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_642(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_643(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_644(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_645(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_646(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_647(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_648(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_649(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_650(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 651 omitted
+
+def _reduce_652(val, _values, result)
+ @static_env.declare val[0][0]
+
+ @max_numparam_stack.has_ordinary_params!
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_653(val, _values, result)
+ @current_arg_stack.set(val[0][0])
+ result = val[0]
+
+ result
+end
+
+def _reduce_654(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_655(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_656(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_657(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_658(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_659(val, _values, result)
+ @current_arg_stack.set(nil)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_660(val, _values, result)
+ @current_arg_stack.set(nil)
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_661(val, _values, result)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_662(val, _values, result)
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_663(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_664(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_665(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_666(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 667 omitted
+
+# reduce 668 omitted
+
+def _reduce_669(val, _values, result)
+ result = [ @builder.kwnilarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_670(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_671(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ result
+end
+
+def _reduce_672(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_673(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_674(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_675(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_676(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_677(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 678 omitted
+
+# reduce 679 omitted
+
+def _reduce_680(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_681(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 682 omitted
+
+# reduce 683 omitted
+
+def _reduce_684(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_685(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_686(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 687 omitted
+
+def _reduce_688(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_689(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 690 omitted
+
+def _reduce_691(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_692(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_693(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_694(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_695(val, _values, result)
+ result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_696(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# reduce 697 omitted
+
+# reduce 698 omitted
+
+# reduce 699 omitted
+
+# reduce 700 omitted
+
+# reduce 701 omitted
+
+# reduce 702 omitted
+
+# reduce 703 omitted
+
+# reduce 704 omitted
+
+# reduce 705 omitted
+
+# reduce 706 omitted
+
+# reduce 707 omitted
+
+# reduce 708 omitted
+
+def _reduce_709(val, _values, result)
+ result = [:dot, val[0][1]]
+
+ result
+end
+
+def _reduce_710(val, _values, result)
+ result = [:anddot, val[0][1]]
+
+ result
+end
+
+# reduce 711 omitted
+
+# reduce 712 omitted
+
+# reduce 713 omitted
+
+# reduce 714 omitted
+
+def _reduce_715(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_716(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_717(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 718 omitted
+
+# reduce 719 omitted
+
+# reduce 720 omitted
+
+def _reduce_721(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 722 omitted
+
+# reduce 723 omitted
+
+# reduce 724 omitted
+
+def _reduce_725(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby28
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby30.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby30.rb
new file mode 100644
index 000000000..c587cd2f9
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby30.rb
@@ -0,0 +1,8096 @@
+# -*- 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 Ruby30 < Parser::Base
+
+
+ def version
+ 30
+ end
+
+ def default_encoding
+ Encoding::UTF_8
+ end
+
+ def endless_method_name(name_t)
+ if !%w[=== == != <= >=].include?(name_t[0]) && name_t[0].end_with?('=')
+ diagnostic :error, :endless_setter, nil, name_t
+ end
+ end
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ @max_numparam_stack.push(static: true)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ @max_numparam_stack.pop
+ end
+
+ def try_declare_numparam(node)
+ 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_max_numparam_stack = max_numparam_stack.stack.dup
+
+ # ignore current block scope
+ raw_max_numparam_stack.pop
+
+ raw_max_numparam_stack.reverse_each do |outer_scope|
+ if outer_scope[:static]
+ # found an outer scope that can't have numparams
+ # like def/class/etc
+ break
+ else
+ outer_scope_has_numparams = outer_scope[:value] > 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
+ # like proc { _1; proc { proc { proc { _2 }} }}
+ # with numparams, so we need to continue
+ end
+ end
+ end
+
+ static_env.declare(name)
+ max_numparam_stack.register(name[1].to_i)
+
+ true
+ else
+ false
+ end
+ end
+##### State transition tables begin ###
+
+clist = [
+'-707,680,617,1083,870,965,-120,-707,-707,-707,221,222,805,-707,-707',
+'-606,-707,104,105,870,231,-113,-606,-116,-707,-707,660,1150,658,-716',
+'866,-119,-118,1153,-114,1078,-707,-707,617,-707,-707,-707,-707,-707',
+'-112,-119,232,617,617,920,1124,-118,426,1077,624,-117,870,428,427,810',
+'-117,232,810,-115,-113,-501,-707,-707,-707,-707,-707,-707,-707,-707',
+'-707,-707,-707,-707,-707,-707,-606,-112,-707,-707,-707,1084,685,-707',
+'-703,-117,-707,-120,659,-707,657,106,107,-704,-707,232,-707,229,-707',
+'-707,232,-707,-707,-707,-707,-707,-602,-707,-707,-707,964,-111,126,-602',
+'-602,-602,126,125,-602,-602,-602,125,-602,-707,-704,-106,-707,-707,-107',
+'-707,-602,-707,-602,-602,-602,-113,-110,-109,-707,-105,-113,-116,-602',
+'-602,617,-602,-602,-602,-602,-602,-116,-114,126,-115,-117,954,-120,125',
+'-112,-119,-108,126,126,-112,-119,-118,125,125,-106,-104,-118,232,-602',
+'-602,-602,-602,-602,-602,-602,-602,-602,-602,-602,-602,-602,-602,-103',
+'617,-602,-602,-602,-106,-602,-602,301,852,-602,352,126,-602,-602,479',
+'-602,125,-602,-120,-602,-716,-602,-602,-120,-602,-602,-602,-602,-602',
+'-314,-602,1158,-602,301,221,222,-314,-314,-314,920,-703,624,-314,-314',
+'-106,-314,-602,-106,1159,-602,-602,-602,-602,-314,-602,-716,-602,221',
+'222,-106,232,-602,949,920,-602,-314,-314,-114,-314,-314,-314,-314,-314',
+'-120,788,126,221,222,1043,-107,125,-116,-114,366,-115,-117,-116,-114',
+'301,-115,-117,232,789,1043,300,-314,-314,-314,-314,-314,-314,-314,-314',
+'-314,-314,-314,-314,-314,-314,301,1043,-314,-314,-314,-611,684,-314',
+'351,126,-314,300,-611,-314,125,-105,104,105,-314,126,-314,-611,-314',
+'-314,125,-314,-314,-314,-314,-314,-728,-314,-707,-314,290,-703,-107',
+'865,679,-707,-707,-707,232,296,-707,-707,-707,-314,-707,126,-314,-314',
+'1171,-314,125,-314,-707,-707,-707,-707,-707,232,-314,1172,296,-118,300',
+'-108,-707,-707,-611,-707,-707,-707,-707,-707,-107,-612,1176,-107,-98',
+'-105,645,-605,-612,645,774,300,1180,645,-605,-107,-84,-612,106,107,-115',
+'-115,-707,-707,-707,-707,-707,-707,-707,-707,-707,-707,-707,-707,-707',
+'-707,366,555,-707,-707,-707,645,867,-707,1182,-105,-707,630,-105,-707',
+'-707,631,-707,1184,-707,555,-707,-108,-707,-707,-105,-707,-707,-707',
+'-707,-707,-612,-707,-707,-707,647,646,-605,647,646,643,645,647,646,645',
+'836,1186,645,-707,-110,645,-707,-707,-707,-707,1137,-707,-728,-707,1137',
+'-314,-119,-108,-707,-614,-108,-116,-314,-314,-314,647,646,-314,-314',
+'-314,227,-314,-108,1186,-119,838,630,547,-604,-314,895,-314,-314,-314',
+'876,-604,545,974,-701,872,765,-314,-314,873,-314,-314,-314,-314,-314',
+'223,647,646,643,647,646,643,647,646,648,647,646,656,852,-613,126,126',
+'1119,745,-113,125,125,-314,-314,-314,-314,-314,-314,-314,-314,-314,-314',
+'-314,-314,-314,-314,228,-613,-314,-314,-314,-602,868,-314,-604,1200',
+'-314,-114,-602,-314,-314,645,-314,-701,-314,1176,-314,-602,-314,-314',
+'-105,-314,-314,-314,-314,-314,126,-314,220,-314,630,125,-114,-112,895',
+'582,-701,579,578,577,587,580,680,-314,-103,-607,-314,-314,-314,-314',
+'590,-314,-607,-314,-704,-707,-112,679,-314,1122,1123,-118,-707,-707',
+'-707,-703,-602,609,-707,-707,611,-707,585,221,222,647,646,652,-610,-707',
+'-707,595,594,598,597,-610,949,920,591,-108,90,-707,-707,232,-707,-707',
+'-707,-707,-707,219,-614,-117,91,582,-106,579,578,577,587,580,-607,645',
+'92,218,232,135,-115,232,590,1043,1174,-707,-707,-707,-707,-707,-707',
+'-707,-707,-707,-707,-707,-707,-707,-707,1212,229,-707,-707,-707,585',
+'685,-707,-610,1186,-707,645,-104,-707,595,594,598,597,-707,1186,-707',
+'591,-707,-707,-113,-707,-707,-707,-707,-707,-314,-707,-707,-707,890',
+'891,1186,-314,-314,-314,647,646,661,-314,-314,-608,-314,-707,-111,122',
+'-707,-707,-608,-107,-314,-707,-609,-602,598,597,-120,576,-707,-609,-602',
+'-116,-314,-314,1176,-314,-314,-314,-314,-314,1186,647,646,650,582,227',
+'579,578,577,587,580,-599,627,129,130,131,132,133,-599,590,232,625,-314',
+'-314,-314,-314,-314,-314,-314,-314,-314,-314,-314,-314,-314,-314,-608',
+'733,-314,-314,-314,585,684,-314,221,222,-314,-609,-602,-314,595,594',
+'598,597,-314,232,-314,591,-314,-314,232,-314,-314,-314,-314,-314,-599',
+'-314,609,-314,228,611,254,-599,-599,-599,-599,254,-599,-599,-599,227',
+'-599,-314,254,254,-314,-314,294,-109,-599,-314,-599,-599,-599,232,609',
+'576,-314,611,-98,-118,-599,-599,748,-599,-599,-599,-599,-599,232,-315',
+'561,227,609,-305,227,608,-315,759,226,765,-305,294,766,232,768,-315',
+'232,224,771,-305,-599,-599,-599,-599,-599,-599,-599,-599,-599,-599,-599',
+'-599,-599,-599,228,774,-599,-599,-599,775,-599,-599,227,254,-599,777',
+'779,-599,-599,1152,-599,689,-599,790,-599,791,-599,-599,635,-599,-599',
+'-599,-599,-599,-315,-599,228,-599,-305,228,129,130,131,132,133,251,-314',
+'793,296,253,252,-599,795,-314,-599,-599,-599,-599,-704,-599,227,-599',
+'-314,796,232,798,-599,672,678,-599,323,81,82,83,11,65,670,228,801,71',
+'72,677,232,806,75,-700,73,74,76,33,34,79,80,129,130,131,132,133,84,31',
+'30,114,113,115,116,807,582,21,579,578,577,-314,580,10,51,325,12,118',
+'117,119,108,64,110,109,111,228,112,120,121,-315,104,105,47,48,46,-314',
+'-315,-599,811,227,271,272,-314,781,-599,-315,557,-704,673,-700,669,-314',
+'785,-599,43,477,668,36,-287,835,66,67,227,839,68,840,38,666,665,1157',
+'50,-288,-700,662,254,853,270,269,1155,22,513,637,513,232,102,90,93,94',
+'870,95,97,96,98,986,-315,871,629,91,101,628,-314,894,-599,590,228,85',
+'251,92,106,107,253,252,44,45,323,81,82,83,11,65,870,897,418,71,72,899',
+'290,228,75,-707,73,74,76,33,34,79,80,624,905,907,909,591,84,31,30,114',
+'113,115,116,527,529,21,529,1004,759,232,613,10,51,325,12,118,117,119',
+'108,64,110,109,111,612,112,120,121,227,104,105,47,48,46,227,1152,-707',
+'296,-349,296,759,633,254,-707,635,-349,232,920,-703,602,635,-620,-707',
+'43,-349,941,36,942,232,66,67,227,562,68,920,38,951,952,476,50,582,-707',
+'579,578,577,254,580,477,22,232,558,552,232,102,90,93,94,296,95,97,96',
+'98,986,228,366,962,91,101,366,228,232,-707,590,-349,85,232,92,106,107',
+'-289,305,44,45,323,81,82,83,11,65,232,548,973,71,72,541,540,228,75,719',
+'73,74,76,33,34,79,80,246,232,-83,135,591,84,31,30,114,113,115,116,232',
+'232,21,1000,1004,1001,1002,1005,10,51,325,12,118,117,119,108,64,110',
+'109,111,529,112,120,121,527,104,105,47,48,46,254,258,259,260,261,271',
+'272,266,267,262,263,525,247,248,907,1011,264,265,232,43,3,245,36,587',
+'759,66,67,513,1029,68,-287,38,251,590,257,50,253,252,1033,249,250,270',
+'269,255,22,256,232,1036,1038,102,90,93,94,774,95,97,96,98,789,1041,1043',
+'1043,91,101,232,268,598,597,1051,1053,85,591,92,106,107,1062,1063,44',
+'45,323,81,82,83,11,65,1068,830,831,71,72,832,120,121,75,1069,73,74,76',
+'33,34,79,80,129,130,131,132,133,84,31,30,114,113,115,116,1070,-290,21',
+'232,232,232,1074,674,10,51,325,12,118,117,119,108,64,110,109,111,231',
+'112,120,121,232,104,105,47,48,46,254,258,259,260,261,271,272,266,267',
+'262,263,232,247,248,232,870,264,265,1082,43,481,480,36,232,1091,66,67',
+'774,1094,68,1097,38,251,1099,257,50,253,252,1101,249,250,270,269,255',
+'22,256,232,1103,478,102,90,93,94,1118,95,97,96,98,1119,1128,429,870',
+'91,101,1138,268,1140,-260,,,85,,92,106,107,,,44,45,323,81,82,83,11,65',
+',,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,',
+',21,,,,,945,10,51,325,12,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,47,48,46,254,258,259,260,261,271,272,266,267,262,263,,247,248',
+',,264,265,,43,,,36,587,,66,67,,,68,,38,251,590,257,50,253,252,,249,250',
+'270,269,255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,268,598',
+'597,,,85,591,92,106,107,,,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73',
+'74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,674,10,51,325',
+'12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,254',
+'258,259,260,261,271,272,266,267,262,263,,247,248,,,264,265,,43,,,36',
+',,66,67,,,68,,38,251,,257,50,253,252,,249,250,270,269,255,22,256,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,268,,,,,85,,92,106,107,,,44,45',
+'323,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30',
+'114,113,115,116,,,21,,,,,917,10,51,325,12,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,47,48,46,254,258,259,260,261,271,272,266,267',
+'262,263,,247,248,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253',
+'252,,249,250,270,269,255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,268,,,,,85,,92,106,107,,,44,45,323,81,82,83,11,65,,,,71,72,,,,75',
+',73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,1133,21,579,578',
+'577,,580,10,51,325,12,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,47,48,46,254,258,259,260,261,271,272,266,267,262,263,,247,248,,',
+'264,265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253,252,,249,250,270,269',
+'255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91,101,232,268,,,,,85,,92',
+'106,107,,,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79',
+'80,,,,,,84,31,30,114,113,115,116,,1133,21,579,578,577,,580,10,51,325',
+'12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,254',
+'258,259,260,261,271,272,266,267,262,263,,247,248,,,264,265,,43,,,36',
+',,66,67,,,68,,38,251,,257,50,253,252,,249,250,270,269,255,22,256,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,268,,,,,85,,92,106,107,,,44,45',
+'323,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30',
+'114,113,115,116,,,21,,,,,,10,51,325,12,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,254,258,259,260,261,271,272,266,267,262',
+'263,,247,248,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253,252',
+',249,250,270,269,255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',268,,,,,85,,92,106,107,,,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73',
+'74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,10,51,325',
+'12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,254',
+'258,259,260,261,271,272,266,267,262,263,,247,248,,,264,265,,43,,,36',
+',,66,67,,,68,,38,251,,257,50,253,252,,249,250,270,269,255,22,256,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,268,,,,,85,,92,106,107,,,44,45',
+'323,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30',
+'114,113,115,116,,,21,,,,,,10,51,325,12,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,254,258,259,260,261,271,272,266,267,262',
+'263,,247,248,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253,252',
+',249,250,270,269,255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',268,,,,,85,,92,106,107,,,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73',
+'74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,10,51,325',
+'12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,254',
+'258,259,260,261,271,272,266,267,262,263,,247,248,,,264,265,,43,,,327',
+',,66,67,,,68,,38,251,,257,50,253,252,,249,250,270,269,255,22,256,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,268,,,,,85,,92,106,107,,,44,45',
+'7,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30',
+'114,113,115,116,,,21,,,,,,10,51,9,12,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,254,258,259,260,261,271,272,266,267,262',
+'263,,247,248,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253,252',
+',249,250,270,269,255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',268,,,,,85,,92,106,107,,,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73',
+'74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,582,21,579,578,577',
+',580,10,51,325,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,582,,579,578,577,,580,,781,,582,,579,578,577,,580,785,,43,',
+',327,,,66,67,,254,68,,38,,,,50,,781,,582,,579,578,577,22,580,785,781',
+',102,90,93,94,,95,97,96,98,,,251,,91,101,253,252,,249,250,,85,,92,106',
+'107,,781,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79',
+'80,,,,,,84,31,30,114,113,115,116,,,21,,,254,,,10,51,325,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,254,258,259,260,261',
+'271,272,251,,262,263,253,252,,249,250,264,265,,43,,,36,,,66,67,,,68',
+',38,251,,257,50,253,252,,249,250,270,269,255,22,256,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,582,,579,578,577,85,580,92,106,107,,,44,45',
+'323,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,781,,,,,84,31',
+'30,114,113,115,116,,,21,,,,,,10,51,325,12,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,47,48,46,254,-729,-729,-729,-729,271,272,',
+',-729,-729,,,,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253,252',
+',249,250,270,269,255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,,,,85,,92,106,107,,,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73,74',
+'76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,10,51,325,12',
+'118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,254,-729',
+'-729,-729,-729,271,272,,,-729,-729,,,,,,264,265,,43,,,327,,,66,67,,',
+'68,,38,251,,257,50,253,252,,249,250,270,269,255,22,256,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,44,45,323,81,82,83',
+'11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115',
+'116,,,21,,,,,,10,51,325,12,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,47,48,46,254,-729,-729,-729,-729,271,272,,,-729,-729,,,,,,264',
+'265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253,252,,249,250,270,269,255',
+'22,256,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107',
+',,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,',
+',84,31,30,114,113,115,116,,,21,,,,,,10,51,325,12,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,47,48,46,254,-729,-729,-729,-729,271',
+'272,,,-729,-729,,,,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253',
+'252,,249,250,270,269,255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,,,,85,,92,106,107,,,44,45,7,81,82,83,11,65,,,,71,72,,,,75,,73',
+'74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,10,51,9,12',
+'118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,254,258',
+'259,260,261,271,272,266,267,262,263,,-729,-729,,,264,265,,43,,,36,,',
+'66,67,,,68,,38,251,,257,50,253,252,,249,250,270,269,255,22,256,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,44,45,323,81',
+'82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113',
+'115,116,,,21,,,,,,10,51,325,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,254,258,259,260,261,271,272,266,267,262,263,,-729',
+'-729,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253,252,,249,250',
+'270,269,255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85',
+',92,106,107,,,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34',
+'79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,10,51,325,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,254,258,259,260,261',
+'271,272,266,,262,263,,,,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257',
+'50,253,252,,249,250,270,269,255,22,256,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,,,,85,,92,106,107,,,44,45,323,81,82,83,11,65,,,,71,72',
+',,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,',
+'10,51,325,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47',
+'48,46,254,,,,,,,,,,,,,,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257',
+'50,253,252,,249,250,,,255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,,,,85,,92,106,107,,,44,45,323,81,82,83,11,65,,,,71,72,,,,75,',
+'73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,10,51,325',
+'12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,254',
+'258,259,260,261,271,272,266,267,262,263,,-729,-729,,,264,265,,43,,,36',
+',,66,67,,,68,,38,251,,257,50,253,252,,249,250,270,269,255,22,256,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,44,45,323',
+'81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114',
+'113,115,116,,,21,,,,,,10,51,325,12,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,47,48,46,254,-729,-729,-729,-729,271,272,,,-729,-729',
+',,,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253,252,,249,250',
+'270,269,255,22,256,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85',
+',92,106,107,,,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34',
+'79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,10,51,325,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,254,258,259,260,261',
+'271,272,266,267,262,263,,-729,-729,,,264,265,,43,,,36,,,66,67,,,68,',
+'38,251,,257,50,253,252,,249,250,270,269,255,22,256,,,,102,90,93,94,',
+'95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,44,45,323,81,82,83,11',
+'65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116',
+',,21,,,,,,10,51,325,12,118,117,119,108,64,110,109,111,,112,120,121,',
+'104,105,47,48,46,254,-729,-729,-729,-729,271,272,,,-729,-729,,,,,,264',
+'265,,43,,,36,,,66,67,,,68,,38,251,,257,50,253,252,,249,250,270,269,255',
+'22,256,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107',
+',,44,45,323,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,',
+',84,31,30,114,113,115,116,,,21,,,,,,10,51,325,12,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,47,48,46,254,,,,,,,,,,,,,,,,264,265',
+',43,,,36,,,66,67,,,68,,38,251,,257,50,253,252,,249,250,,,255,22,256',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116',
+',,21,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,254,,,,,,,,,,,,,,,,264,265,,237,,,243,,,66,67,,,68,,,251,,257',
+'50,253,252,,249,250,,,,22,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,',
+',,,,,85,,92,106,107,-270,,44,45,,,,-270,-270,-270,,,-270,-270,-270,',
+'-270,254,,,,,,,-270,-270,-270,,,,,,,264,265,,-270,-270,,-270,-270,-270',
+'-270,-270,,,,,,251,,511,460,253,252,512,249,250,,,,,,169,170,,166,148',
+'149,150,157,154,156,,,151,152,-270,,,171,172,158,159,-270,,,,,296,-270',
+',,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,-270',
+'-270,174,,,,,,,,,,,,,-270,,,-270,,,,,-270,81,82,83,11,65,,-270,,71,72',
+',,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,',
+'10,51,9,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48',
+'46,254,,,,,,,,,,,,,,,,264,265,,43,,,36,,,66,67,,,68,,38,251,,257,50',
+'253,252,,249,250,,,,22,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81',
+'82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84',
+'31,30,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111',
+'317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66',
+'67,,,68,,314,,312,,50,,,318,,,,,,242,,,,,102,315,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33',
+'34,79,80,,,,,,84,31,30,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,',
+',237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74',
+'76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,,51,,,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,',
+',,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-432,,44,45,,,,-432,-432,-432',
+',,-432,-432,-432,,-432,,,,,,,,-432,-432,-432,-432,,,,,,,,,-432,-432',
+',-432,-432,-432,-432,-432,,,,,,,,,,,,,,,,,,,,,,,-432,-432,-432,-432',
+'-432,-432,-432,-432,-432,-432,-432,-432,-432,-432,,,-432,-432,-432,',
+',-432,,296,-432,,,-432,-432,,-432,,-432,,-432,,-432,-432,,-432,-432',
+'-432,-432,-432,-321,-432,-432,-432,,,,-321,-321,-321,,,-321,-321,-321',
+',-321,-432,,,-432,-432,,-432,-321,-432,-321,-321,,,,,-432,,,,-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,,305,-321,,,-321,-321,,-321,,-321,,-321,,-321,-321,,-321,-321',
+'-321,-321,-321,,-321,,-321,,,,,,,,,,,,,,-321,,,-321,-321,,-321,,-321',
+'81,82,83,,65,,-321,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30',
+'114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,317',
+'112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,',
+',68,,314,,312,,50,,,318,,,,,,242,,,,,102,315,93,94,,95,97,96,98,,,,',
+'91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34',
+'79,80,,,,,,84,31,30,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,',
+'237,,,243,,,66,67,,,68,,314,,312,,50,,,318,,,,,,242,,,,,102,315,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75',
+',73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244,,,,,,,51,',
+',118,117,119,108,64,110,109,111,317,112,120,121,,104,105,47,48,46,,',
+',,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,314,,312,,50,,,318,,,,,,242',
+',,,,102,315,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116',
+',,21,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,22',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115',
+'116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,',
+',,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,',
+',50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339',
+'347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67',
+',,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,',
+',,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243',
+',,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79',
+'80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,,,,85,,92,106,107,-306,,44,45,,,,-306,-306,-306,,,-306',
+'-306,-306,,-306,,,,,,,,-306,,-306,-306,-306,,,,114,113,115,116,-306',
+'-306,,-306,-306,-306,-306,-306,,,,,118,117,119,,,,,,,,,,,104,105,,,348',
+'-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,,102,90,93,94,,95,97,96,98,,,',
+'-306,91,101,-306,-306,-306,-306,,-306,85,-306,92,106,107,,-306,81,82',
+'83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113',
+'115,116,,,21,,,,,,10,51,,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,',
+',50,,,,,,,,,22,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339',
+'347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111',
+'317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66',
+'67,,,68,,314,,,,50,,,318,,,,,,242,,,,,102,315,93,94,,95,97,96,98,,,',
+',91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345',
+'79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,',
+'237,,,243,,,66,67,,,68,,,,,,50,,,318,,,,,,242,,,,,102,315,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73',
+'74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,,51,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,',
+',,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75',
+',73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,,51,,',
+'118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,',
+',,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45',
+',75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,,51',
+',,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,',
+',,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,126,,,,,125,85,,92,106,107,,,44,45,81',
+'82,83,11,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113',
+'115,116,,,21,,,,,,10,51,9,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,',
+',50,,,,,,,,,22,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,418,85',
+',92,106,107,,,44,45,81,82,83,,65,,,,71,72,,,,75,,73,74,76,33,34,79,80',
+',,,,,84,31,30,114,113,115,116,,,21,,,,,,,51,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243',
+',,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34,79',
+'80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,,51,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,',
+'243,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90,93,94,,95,97,96,98,,',
+',,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34',
+'79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344',
+'345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,',
+',237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,,,,85,,92,106,107,,,44,45,81,82,83,11,65,,,,71,72',
+',,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,',
+'10,51,,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48',
+'46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21',
+',,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48',
+'46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,232,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115',
+'116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,',
+',,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,',
+',50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339',
+'347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67',
+',,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,',
+',,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243',
+',,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79',
+'80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344',
+'345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,',
+',237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74',
+'76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,',
+',,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75',
+',73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,',
+'51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,',
+',,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,',
+'244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115',
+'116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,',
+',,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,',
+',50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339',
+'347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67',
+',,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,',
+',,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243',
+',,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79',
+'80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344',
+'345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,',
+',237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74',
+'76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,',
+',,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75',
+',73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,',
+'51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,',
+',,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,',
+'244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115',
+'116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,',
+',,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,',
+',50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339',
+'347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67',
+',,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,',
+',,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243',
+',,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79',
+'80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344',
+'345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,',
+',237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74',
+'76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,',
+',,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75',
+',73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,',
+'51,,,118,117,119,108,64,110,109,111,317,112,120,121,,104,105,47,48,46',
+',,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,312,,50,,,318,,,,,,242',
+',,,,102,315,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115',
+'116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,742,,,,50,,',
+',,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65',
+'92,106,107,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113',
+'115,116,,,21,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50',
+',,,,,,,,22,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65',
+'92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,',
+',50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30',
+'114,113,115,116,,,21,,,,,,,51,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68',
+',,,,,50,,,,,,,,,22,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84',
+'339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66',
+'67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34,79,80,',
+',,,,84,31,30,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110',
+'109,111,317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243',
+',,66,67,,,68,,314,,312,,50,,,318,,,,,,242,,,,,102,315,93,94,,95,97,96',
+'98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,515,,75,,73,74,76',
+'33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,',
+',,,,237,,,243,,,66,67,,,68,,314,,312,,50,,,318,,,,,,242,,,,,102,315',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44',
+'45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244,,,',
+',,,51,,,118,117,119,108,64,110,109,111,317,112,120,121,,104,105,47,48',
+'46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,314,,312,,50,,,318,,,',
+',,242,,,,,102,315,93,94,,95,97,96,98,,,,,91,101,232,,,81,82,83,85,65',
+'92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,',
+',50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339',
+'347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67',
+',,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,',
+',,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243',
+',,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79',
+'80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344',
+'345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,',
+',237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,,,,85,,92,106,107,,,44,45,81,82,83,11,65,,,,71,72',
+',,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,',
+'10,51,,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48',
+'46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116',
+',,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115',
+'116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,',
+',,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,',
+',50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339',
+'347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67',
+',,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34,79,80,,,',
+',,84,31,30,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66',
+'67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80',
+',,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,',
+'243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,',
+',,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33',
+'34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344',
+'345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,',
+',237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74',
+'76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,',
+',,,,,,,,,237,,,243,561,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45',
+',75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,',
+',,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48',
+'46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116',
+',,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,434,,,,50,,,,,,',
+',,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,',
+',50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339',
+'347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67',
+',,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34,79,80,,,',
+',,84,31,30,114,113,115,116,,,21,,,,,,,51,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66',
+'67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80',
+',,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64',
+'110,109,111,317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,742,,312,,50,,,318,,,,,,242,,,,,102,315,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,515,,75,,73',
+'74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244,,,,,,,51,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,',
+',,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75',
+',73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,,51,,',
+'118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,',
+',,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45',
+',75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244,,,,,,',
+'51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,',
+',,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244',
+',,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48',
+'46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244',
+',,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48',
+'46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116',
+',,244,,,,,,,51,,,118,117,119,108,64,110,109,111,317,112,120,121,,104',
+'105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,312,,50,,',
+'318,,,,,,242,,,,,102,315,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85',
+'65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347',
+'114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,317',
+'112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,',
+',68,,742,,312,,50,,,318,,,,,,242,,,,,102,315,93,94,,95,97,96,98,,,,',
+'91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345',
+'79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,,,,85,,92,106,107,,,44,45,81,82,83,11,65,,,,71,72,,,,75',
+',73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,10,51',
+',12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,',
+',,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44',
+'45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244,,,',
+',,,51,,,118,117,119,108,64,110,109,111,317,112,120,121,,104,105,47,48',
+'46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,314,,312,,50,,,318,,,',
+',,242,,,,,102,315,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113',
+'115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50',
+',,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85',
+'65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347',
+'114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68',
+',844,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,',
+',,85,,92,106,107,,,44,45,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,33',
+'34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,10,51,,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,',
+',43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22,,,,,102,90,93,94,,95,97,96',
+'98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76',
+'344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,',
+',,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73',
+'74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244,,,,,,,51,,,118',
+'117,119,108,64,110,109,111,317,112,120,121,,104,105,47,48,46,,,,,,,',
+',,,,,,,,,,,,237,,,243,,,66,67,,,68,,314,,312,,50,,,318,,,,,,242,,,,',
+'102,315,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244',
+',,,,,,51,,,118,117,119,108,64,110,109,111,317,112,120,121,,104,105,47',
+'48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,314,,312,,50,,,318',
+',,,,,242,,,,,102,315,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65',
+'92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,314',
+',,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84',
+'339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109',
+'111,317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,',
+',66,67,,,68,,,,,,50,,,318,,,,,,242,,,,,102,315,93,94,,95,97,96,98,,',
+',,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344',
+'345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,',
+',,,,237,,,243,,,66,67,,,68,,742,,,,50,,,318,,,,,,242,,,,,102,315,93',
+'94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-270,,44,45,,,,-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,,296,-270,,,-270,-270,,-270,,-270,,-270,,-270,-270,,-270',
+'-270,-270,-270,-270,,-270,-270,-270,,,,,,,,,,,,,,-270,,,-270,-270,,-270',
+',-270,81,82,83,,65,,-270,,71,72,,,,75,,73,74,76,344,345,79,80,,,,,,84',
+'339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66',
+'67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,,,,85,,92,106,107,-708,,44,45,,,,-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,,,-708,-708,-708,-708,,-708,-709,-708,,,,,-708',
+'-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,,81,82,83,-709,65,,,,71,72,,,,75,,73,74,76,344,345',
+'79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344',
+'345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,',
+',237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74',
+'76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,,,,,,51,,,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,',
+',,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73',
+'74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244,,,,,,,51,,,118',
+'117,119,108,64,110,109,111,317,112,120,121,,104,105,47,48,46,,,,,,,',
+',,,,,,,,,,,,237,,,243,,,66,67,,,68,,314,,312,,50,,,318,,,,,,242,,,,',
+'102,315,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116',
+',,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115',
+'116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,',
+',,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,',
+',50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84,339',
+'347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67',
+',,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,',
+',,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243',
+',,66,67,,,68,,,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34,79',
+'80,,,,,,84,31,30,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64',
+'110,109,111,317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237',
+',,243,,,66,67,,,68,,314,,312,,50,,,318,,,,,,242,,,,,102,315,93,94,,95',
+'97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,44,45,81,82,83,11,65,,,,71',
+'72,,,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,21,,',
+',,,10,51,325,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,418,85,,92,106,107,,,44',
+'45,81,82,83,,65,,,,71,72,,,,75,,73,74,76,344,345,79,80,,,,,,84,339,347',
+'114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68',
+',,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84',
+'339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109',
+'111,317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,',
+',66,67,,,68,,,,312,,50,,,318,,,,,,242,,,,,102,315,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344',
+'345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,,,,,51,,,118,117,119',
+'108,64,110,109,111,317,112,120,121,,104,105,47,48,46,,,,,,,,,,,,,,,',
+',,,,237,,,243,,,66,67,,,68,,742,,312,,50,,,318,,,,,,242,,,,,102,315',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,44',
+'45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244,,,',
+',,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48,46',
+',,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,434,,,,50,,,,,,,,,242,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116,,,244',
+',,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,47,48',
+'46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,434,,,,50,,,,,,,,,242',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116',
+',,21,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,22',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116',
+',,21,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,22',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116',
+',,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,,,,,50,,,,,,,,,242',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30,114,113,115,116',
+',,244,,,,,,,51,,,118,117,119,108,64,110,109,111,317,112,120,121,,104',
+'105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68,,314,,312,,50',
+',,318,,,,,,242,,,,,102,315,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31,30',
+'114,113,115,116,,,244,,,,,,,51,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68',
+',,,,,50,,,,,,,,,242,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,84,31',
+'30,114,113,115,116,,,21,,,,,,,51,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,47,48,46,,,,,,,,,,,,,,,,,,,,237,,,243,,,66,67,,,68',
+',,,,,50,,,,,,,,,22,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,44,45,,75,,73,74,76,344,345,79,80,,,,,,84',
+'339,347,114,113,115,116,,,244,,,,,,,340,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,,,348,,,,,,,,,,,,,,,,,,,,1105,,,243,,,66,67',
+',,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,,,,75,,73,74,76,344,345,79,80,,,,,,84,339',
+'347,114,113,115,116,,,244,,,,,,,340,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,,,348,,,,,,,,,,,,,,,,,,,,393,,,36,,,66,67,,,68',
+',38,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,,,,75,,73,74,76,344,345,79,80,,,,,,84,339,347',
+'114,113,115,116,,,244,,,,,,,340,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,,,348,,,,,,,,,,,,,,,,,,,,336,,,332,,,66,67,,,68,,,',
+',,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85',
+'65,92,106,107,71,72,,,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114',
+'113,115,116,,,244,,,,,,,340,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,,,348,,,,,,,,,,,,,,,,,,,,336,,,332,,,66,67,,,68,,,,,,,',
+',,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,,,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113',
+'115,116,,,244,,,,,,,340,,,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,,,348,,,,,,,,,,,,,,,,,,,,336,,,332,,,66,67,,,68,,,,,,,,,,,',
+',,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106',
+'107,71,72,,,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115',
+'116,,,244,,,,,,,340,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,,,348,,,,,,,,,,,,,,,,,,,,336,,,332,,,66,67,,,68,,331,,,,,,,,,,,',
+',,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106',
+'107,71,72,,,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115',
+'116,,,244,,,,,,,340,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,,,348,,,,,,,,,,,,,,,,,,,,336,,,332,,,66,67,,,68,,,,,,,,,,,,,,,,',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,,,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116',
+',,244,,,,,,,340,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+',,348,,,,,,,,,,,,,,,,,,,,1105,,,243,,,66,67,,,68,,,,,,,,,,,,,,,,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,,,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244',
+',,,,,,340,,,118,117,119,398,64,110,109,399,,112,120,121,,104,105,,,348',
+',,,,,,,,,,,,,,,,405,,,400,,,243,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+',,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244',
+',,,,,,340,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,348',
+',,,,,,,,,,,,,,,,,,,336,,,332,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,',
+'75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,',
+',,,340,,,118,117,119,398,64,110,109,399,,112,120,121,,104,105,,,348',
+',,,,,,,,,,,,,,,,,,,400,,,243,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,',
+'75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115,116,,,244,,,',
+',,,340,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,348',
+',,,,,,,,,,,,,,,,,,,336,,,243,,,66,67,,,68,,,582,,579,578,577,587,580',
+',,,,,,,,590,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,350,,585,85,,92',
+'106,107,81,82,83,,65,598,597,,71,72,591,,,75,,73,74,76,344,345,79,80',
+',,,,,84,339,347,114,113,115,116,,,244,,,,,,,340,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,,,348,,,,,,,,,,,,,,,,,,,,336,,,243',
+',,66,67,,,68,,,582,,579,578,577,587,580,,,,,,,,,590,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,543,,585,85,,92,106,107,81,82,83,,65,598,597',
+',71,72,591,,,75,,73,74,76,344,345,79,80,,,,,,84,339,347,114,113,115',
+'116,,,244,,,,,,,340,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,,,348,,,,,,,,,,,,,,,,,,,,1111,,,243,,,66,67,,,68,,,,,,,,,,,,,,,',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,185,196',
+'186,209,182,202,192,191,212,213,207,190,189,184,210,214,215,194,183',
+'197,201,203,195,188,,,,204,211,206,205,198,208,193,181,200,199,,,,,',
+'180,187,178,179,175,176,177,138,140,,,139,,,,,,,,169,170,,166,148,149',
+'150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,,,,,,,,,163,162,,147',
+'168,165,164,173,160,161,155,153,145,167,146,,,174,102,,,,,,,,,,,,,,101',
+'185,196,186,209,182,202,192,191,212,213,207,190,189,184,210,214,215',
+'194,183,197,201,203,195,188,,,,204,211,206,205,198,208,193,181,200,199',
+',,,,,180,187,178,179,175,176,177,138,140,137,,139,,,,,,,,169,170,,166',
+'148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,,,,,,,,,163',
+'162,,147,168,165,164,173,160,161,155,153,145,167,146,,,174,102,,,,,',
+',,,,,,,,101,185,196,186,209,182,202,192,191,212,213,207,190,189,184',
+'210,214,215,194,183,197,201,203,195,188,,,,204,211,206,205,198,208,193',
+'181,200,199,,,,,,180,187,178,179,175,176,177,138,140,,,139,,,,,,,,169',
+'170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,',
+',,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,,,174',
+'102,,,,,,,,,,,,,,101,185,196,186,209,182,202,192,191,212,213,207,190',
+'189,184,210,214,215,194,183,197,201,203,195,188,,,,204,211,206,205,198',
+'208,193,181,200,199,,,,,,180,187,178,179,175,176,177,138,140,,,139,',
+',,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158',
+'159,,,,,,,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167',
+'146,,,174,102,,,,,,,,,,,,,,101,185,196,186,209,182,202,192,191,212,213',
+'207,190,189,184,210,214,215,194,183,197,201,203,195,188,,,,204,211,206',
+'284,283,285,282,181,200,199,,,,,,180,187,178,179,279,280,281,277,140',
+'110,109,278,,112,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152',
+',,,171,172,158,159,,,,,,289,,,,,,,,163,162,,147,168,165,164,173,160',
+'161,155,153,145,167,146,,,174,114,113,115,116,,,,,,,,,,,,,118,117,119',
+'719,,,582,722,579,578,577,587,580,104,105,,,348,,,,590,,,,,,,,,,,,,',
+',,721,,,703,,,585,701,,,702,,,,,595,594,598,597,,,,591,,,,720,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,',
+'707,708,,118,117,119,719,,,582,722,579,578,577,587,580,104,105,,,348',
+',,,590,,,,,,,,,,,,,,,,721,,,703,,,585,701,,,702,,,,,595,594,598,597',
+',,,591,,,,720,,,,102,90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116',
+',,85,,92,106,107,,,707,708,,118,117,119,719,,,582,722,579,578,577,587',
+'580,104,105,,,348,,,,590,,,,,,,,,,,,,,,,721,,,703,,,585,701,,,702,,',
+',,,,598,597,,,,591,,,,720,,,,102,90,93,94,,95,97,96,98,,,,,91,101,114',
+'113,115,116,,,85,,92,106,107,,,707,708,,118,117,119,719,,,582,722,579',
+'578,577,587,580,104,105,,,348,,,,590,,,,,,,,,,,,,,,,721,,,703,,,585',
+'701,,,702,,,,,595,594,598,597,,,,591,,,,720,,,,102,90,93,94,,95,97,96',
+'98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,707,708,,118,117,119',
+'719,,,582,722,579,578,577,587,580,104,105,,,348,,,,590,,,,,,,,,,,,,',
+',,721,,,703,,,585,701,,,702,,,,,,,598,597,,,,591,,,,720,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,707,708',
+',118,117,119,719,,,582,722,579,578,577,587,580,104,105,,,348,,,,590',
+',,,,,,,,,,,,,,,721,,,703,,,585,701,,,702,,885,,,,,598,597,,,,591,,,',
+'720,,,,102,90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92',
+'106,107,,,707,708,,118,117,119,719,,,582,722,579,578,577,587,580,104',
+'105,,,348,,,,590,,,,,,,,,,,,,,,,721,,,703,,,585,701,,,702,,,,,,,598',
+'597,,,,591,,,,720,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,',
+'92,106,107,,,707,708,185,196,186,209,182,202,192,191,212,213,207,190',
+'189,184,210,214,215,194,183,197,201,203,195,188,,,,204,211,206,205,198',
+'208,193,181,200,199,,,,,,180,187,178,179,175,176,177,138,140,,,139,',
+',,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158',
+'159,,,,,,,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167',
+'146,,,174,114,113,115,116,,,582,,579,578,577,587,580,,,,118,117,119',
+'719,,590,,722,986,,,,,104,105,,,348,590,,,,,,,,,585,,,,,,,,,,721,598',
+'597,703,,,591,701,,,702,,885,,,,,,,591,,,,,,,720,,,,102,987,93,94,,95',
+'97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,707,708,,118',
+'117,119,719,,,582,722,579,578,577,587,580,104,105,,,348,,,,590,,,,,',
+',,,,,,,,,,721,,,703,,,585,701,,,702,,885,,,595,594,598,597,,,,591,,',
+',720,,,,102,90,93,94,,95,97,96,98,,,,,91,101,232,114,113,115,116,,85',
+',92,106,107,,,707,708,,,118,117,119,719,,,582,722,579,578,577,587,580',
+'104,105,,,348,,,,590,,,,,,,,,,,,,,,,721,,,703,,,585,701,,,702,,,,,595',
+'594,598,597,,,,591,,,,720,,,,102,90,93,94,,95,97,96,98,,,,,91,101,114',
+'113,115,116,,,85,,92,106,107,,,707,708,,118,117,119,719,,,582,722,579',
+'578,577,587,580,104,105,,,348,,,,590,,,,,,,,,,,,,,,,721,,,703,,,585',
+'701,,,702,,,,,595,594,598,597,,,,591,,,,720,,,,102,90,93,94,,95,97,96',
+'98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,707,708,,118,117,119',
+'719,,,582,722,579,578,577,587,580,104,105,,,348,,,,590,,,,,,,,,,,,,',
+',,721,,,703,,,585,701,,,702,,999,,,,,598,597,,,,591,,,,720,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,707',
+'708,,118,117,119,719,,,,722,986,,,,,104,105,,,348,590,,,,,,,,,,,,,,',
+',,,,721,,,703,,,,701,,,702,,885,,,,,,,591,,,,,,,720,,,,102,987,93,94',
+',95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,707,708,',
+'118,117,119,719,,,,722,986,,,,,104,105,,,348,590,,,,,,,,,,,,,,,,,,,721',
+',,703,,,,701,,,702,,885,,,,,,,591,,,,,,,720,,,,102,987,93,94,,95,97',
+'96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,707,708,,118,117',
+'119,719,,,582,722,579,578,577,587,580,104,105,,,348,,,,590,,,,,,,,,',
+',,,,,,721,,,703,,,585,701,,,702,,,,,,,598,597,,,,591,,,,720,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,707',
+'708,,118,117,119,719,,,582,722,579,578,577,587,580,104,105,,,348,,,',
+'590,,,,,,,,,,,,,,,,721,,,703,,,585,701,,,702,,,,,,,598,597,,,,591,,',
+',720,,,,102,90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92',
+'106,107,,,707,708,,118,117,119,719,,,,722,,,,,,104,105,,,348,,,,,,,',
+'114,113,115,116,,,,,,,,,721,,,703,118,117,119,701,,,702,,885,,,,,104',
+'105,,,348,,,,,720,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,',
+'92,106,107,,,707,708,582,,579,578,577,587,580,,,,,102,90,93,94,590,95',
+'97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,585,641,,,,118',
+'117,119,,595,594,598,597,,,,591,,104,105,,,348,114,113,115,116,,,,,',
+',,,,,,,118,117,119,,,,,,,,,,,104,105,,,348,,,,,,,,,,,,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,,,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,846,460,,,847,,85,,92,106,107,,169,170,,166',
+'148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,296,,,,,,',
+',163,162,,147,168,165,164,173,160,161,155,153,145,167,146,814,460,174',
+',815,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172',
+'158,159,,,,,,296,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153',
+'145,167,146,456,460,174,,457,,,,,,,,169,170,,166,148,149,150,157,154',
+'156,,,151,152,,,,171,172,158,159,,,,,,296,,,,,,,,163,162,,147,168,165',
+'164,173,160,161,155,153,145,167,146,463,467,174,,462,,,,,,,,169,170',
+',166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,296,',
+',,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,816,467',
+'174,,817,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171',
+'172,158,159,,,,,,296,,,,,,,,163,162,,147,168,165,164,173,160,161,155',
+'153,145,167,146,755,467,174,,756,,,,,,,,169,170,,166,148,149,150,157',
+'154,156,,,151,152,,,,171,172,158,159,,,,,,296,,,,,,,,163,162,,147,168',
+'165,164,173,160,161,155,153,145,167,146,690,460,174,,691,,,,,,,,169',
+'170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,296',
+',,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,1190',
+'467,174,,1189,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152',
+',,,171,172,158,159,,,,,,296,,,,,,,,163,162,,147,168,165,164,173,160',
+'161,155,153,145,167,146,819,467,174,,820,,,,,,,,169,170,,166,148,149',
+'150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,296,,,,,,,,163,162',
+',147,168,165,164,173,160,161,155,153,145,167,146,690,460,174,,691,,',
+',,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159',
+',,,,,296,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167',
+'146,692,467,174,,693,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151',
+'152,,,,171,172,158,159,,,,,,296,,,,,,,,163,162,,147,168,165,164,173',
+'160,161,155,153,145,167,146,752,460,174,,753,,,,,,,,169,170,,166,148',
+'149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,296,,,,,,,,163',
+'162,,147,168,165,164,173,160,161,155,153,145,167,146,511,460,174,,512',
+',,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158',
+'159,,,,,,296,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145',
+'167,146,1193,460,174,,1194,,,,,,,,169,170,,166,148,149,150,157,154,156',
+',,151,152,,,,171,172,158,159,,,,,,296,,,,,,,,163,162,,147,168,165,164',
+'173,160,161,155,153,145,167,146,692,467,174,,693,,,,,,,,169,170,,166',
+'148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,296,,,,,,',
+',163,162,,147,168,165,164,173,160,161,155,153,145,167,146,1195,467,174',
+',1196,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172',
+'158,159,,,,,,296,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153',
+'145,167,146,849,467,174,,848,,,,,,,,169,170,,166,148,149,150,157,154',
+'156,,,151,152,,,,171,172,158,159,,,,,,296,,,,,,,,163,162,,147,168,165',
+'164,173,160,161,155,153,145,167,146,,582,174,579,578,577,587,580,,582',
+',579,578,577,587,580,590,,,,,,,,590,,,,,,,,,,,,,,585,,,,,,,,585,595',
+'594,598,597,,,,591,595,594,598,597,,,,591' ]
+ racc_action_table = arr = ::Array.new(28007, 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 = [
+'849,847,1052,999,1056,827,394,849,849,849,762,762,619,849,849,285,849',
+'46,46,877,21,1109,285,816,849,849,415,1102,414,702,691,628,817,1105',
+'956,988,849,849,812,849,849,849,849,849,1108,1158,702,383,1032,1199',
+'1056,1196,137,988,622,815,1006,137,137,1199,847,21,622,814,391,877,849',
+'849,849,849,849,849,849,849,849,849,849,849,849,849,285,390,849,849',
+'849,999,849,849,816,691,849,1112,415,849,414,46,46,817,849,1006,849',
+'441,849,849,762,849,849,849,849,849,111,849,849,849,827,394,619,111',
+'111,111,1052,619,111,111,111,1052,111,849,1196,752,849,849,816,849,111',
+'849,111,111,111,1109,628,817,849,956,1109,849,111,111,1054,111,111,111',
+'111,111,1195,1206,812,1193,1194,812,441,812,1108,1158,815,383,1032,1108',
+'1158,1196,383,1032,814,391,1196,51,111,111,111,111,111,111,111,111,111',
+'111,111,111,111,111,390,382,111,111,111,752,111,111,730,970,111,43,321',
+'111,111,238,111,321,111,1112,111,872,111,111,1112,111,111,111,111,111',
+'848,111,1111,111,69,638,638,848,848,848,1061,1195,1061,848,848,752,848',
+'111,752,1114,111,111,111,111,848,111,873,111,472,472,752,872,111,800',
+'800,111,848,848,970,848,848,848,848,848,238,592,1054,508,508,1115,755',
+'1054,1195,1206,52,1193,1194,1195,1206,29,1193,1194,873,592,1116,730',
+'848,848,848,848,848,848,848,848,848,848,848,848,848,848,341,1117,848',
+'848,848,333,848,848,40,382,848,69,333,848,382,914,348,348,848,638,848',
+'333,848,848,638,848,848,848,848,848,52,848,692,848,25,755,755,690,846',
+'692,692,692,472,29,692,692,692,848,692,600,848,848,1129,848,600,848',
+'692,692,692,692,692,508,848,1130,341,848,29,753,692,692,333,692,692',
+'692,692,692,755,334,1139,755,747,914,653,284,334,1076,1141,341,1144',
+'1088,284,755,747,334,348,348,690,846,692,692,692,692,692,692,692,692',
+'692,692,692,692,692,692,53,352,692,692,692,655,692,692,1145,914,692',
+'400,914,692,692,400,692,1146,692,478,692,753,692,692,914,692,692,692',
+'692,692,334,692,692,692,653,653,284,1076,1076,1076,531,1088,1088,409',
+'653,1147,410,692,352,413,692,692,692,692,1076,692,53,692,1088,693,352',
+'753,692,236,753,692,693,693,693,655,655,693,693,693,335,693,753,1149',
+'478,655,876,335,283,693,876,693,693,693,700,283,335,869,399,700,1154',
+'693,693,700,693,693,693,693,693,17,531,531,531,409,409,409,410,410,410',
+'413,413,413,675,235,387,5,1164,531,236,387,5,693,693,693,693,693,693',
+'693,693,693,693,693,693,693,693,335,41,693,693,693,399,693,693,283,1170',
+'693,869,399,693,693,412,693,399,693,1175,693,399,693,693,675,693,693',
+'693,693,693,960,693,15,693,721,960,675,235,721,907,399,907,907,907,907',
+'907,457,693,41,282,693,693,693,693,907,693,282,693,1189,463,41,456,693',
+'1055,1055,693,463,463,463,1190,399,378,463,463,378,463,907,16,16,412',
+'412,412,281,463,463,907,907,907,907,281,1165,1165,907,457,88,463,463',
+'1192,463,463,463,463,463,14,42,457,88,366,456,366,366,366,366,366,282',
+'416,88,12,907,9,456,1131,366,1197,1131,463,463,463,463,463,463,463,463',
+'463,463,463,463,463,463,1202,19,463,463,463,366,463,463,281,1203,463',
+'411,42,463,366,366,366,366,463,1204,463,366,463,463,42,463,463,463,463',
+'463,462,463,463,463,704,704,1205,462,462,462,416,416,416,462,462,280',
+'462,463,19,3,463,463,280,463,462,463,279,278,774,774,19,366,463,279',
+'278,463,462,462,1211,462,462,462,462,462,1217,411,411,411,768,392,768',
+'768,768,768,768,277,392,371,371,371,371,371,277,768,516,392,462,462',
+'462,462,462,462,462,462,462,462,462,462,462,462,280,517,462,462,462',
+'768,462,462,381,381,462,279,278,462,768,768,768,768,462,518,462,768',
+'462,462,522,462,462,462,462,462,108,462,799,462,392,799,491,108,108',
+'108,277,490,108,108,108,276,108,462,489,488,462,462,276,462,108,462',
+'108,108,108,538,375,768,462,375,539,462,108,108,542,108,108,108,108',
+'108,544,548,549,18,374,337,27,374,548,553,18,563,337,27,564,567,568',
+'548,569,18,570,337,108,108,108,108,108,108,108,108,108,108,108,108,108',
+'108,276,571,108,108,108,573,108,108,1151,487,108,574,584,108,108,1151',
+'108,474,108,596,108,599,108,108,1151,108,108,108,108,108,548,108,18',
+'108,337,27,536,536,536,536,536,487,756,601,464,487,487,108,603,756,108',
+'108,108,108,756,108,440,108,756,604,605,606,108,440,455,108,818,818',
+'818,818,818,818,440,1151,616,818,818,454,452,620,818,398,818,818,818',
+'818,818,818,818,324,324,324,324,324,818,818,818,818,818,818,818,621',
+'585,818,585,585,585,756,585,818,818,818,818,818,818,818,818,818,818',
+'818,818,440,818,818,818,631,818,818,818,818,818,820,631,398,623,353',
+'49,49,820,585,398,631,353,820,442,398,438,820,585,398,818,353,435,818',
+'433,650,818,818,1110,658,818,660,818,432,430,1110,818,667,398,424,486',
+'676,49,49,1110,818,681,404,686,694,818,818,818,818,695,818,818,818,818',
+'1074,631,697,395,818,818,393,820,720,398,1074,353,818,486,818,818,818',
+'486,486,818,818,823,823,823,823,823,823,723,724,389,823,823,727,729',
+'1110,823,819,823,823,823,823,823,823,823,388,735,736,737,1074,823,823',
+'823,823,823,823,823,739,741,823,379,1074,749,751,377,823,823,823,823',
+'823,823,823,823,823,823,823,823,376,823,823,823,1104,823,823,823,823',
+'823,402,1104,819,754,54,757,758,402,761,819,1104,54,372,764,819,368',
+'402,364,819,823,54,783,823,784,786,823,823,234,362,823,802,823,808,809',
+'234,823,785,819,785,785,785,358,785,234,823,813,356,349,822,823,823',
+'823,823,347,823,823,823,823,886,1104,343,826,823,823,342,402,828,819',
+'886,54,823,340,823,823,823,843,339,823,823,834,834,834,834,834,834,845',
+'336,854,834,834,330,329,234,834,870,834,834,834,834,834,834,834,23,328',
+'326,325,886,834,834,834,834,834,834,834,878,879,834,883,886,884,885',
+'888,834,834,834,834,834,834,834,834,834,834,834,834,313,834,834,834',
+'310,834,834,834,834,834,23,23,23,23,23,23,23,23,23,23,23,309,23,23,900',
+'903,23,23,904,834,1,23,834,771,913,834,834,295,918,834,921,834,23,771',
+'23,834,23,23,922,23,23,23,23,23,834,23,925,927,928,834,834,834,834,930',
+'834,834,834,834,932,934,935,937,834,834,940,23,771,771,947,950,834,771',
+'834,834,834,957,959,834,834,1010,1010,1010,1010,1010,1010,966,646,646',
+'1010,1010,646,646,646,1010,967,1010,1010,1010,1010,1010,1010,1010,8',
+'8,8,8,8,1010,1010,1010,1010,1010,1010,1010,968,969,1010,979,980,981',
+'982,445,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010',
+'244,1010,1010,1010,991,1010,1010,1010,1010,1010,445,445,445,445,445',
+'445,445,445,445,445,445,992,445,445,993,997,445,445,998,1010,240,239',
+'1010,1003,1013,1010,1010,1014,1016,1010,1017,1010,445,1018,445,1010',
+'445,445,1020,445,445,445,445,445,1010,445,1021,1022,237,1010,1010,1010',
+'1010,1048,1010,1010,1010,1010,1049,1065,216,1075,1010,1010,1083,445',
+'1085,445,,,1010,,1010,1010,1010,,,1010,1010,615,615,615,615,615,615',
+',,,615,615,,,,615,,615,615,615,615,615,615,615,,,,,,615,615,615,615',
+'615,615,615,,,615,,,,,794,615,615,615,615,615,615,615,615,615,615,615',
+'615,,615,615,615,,615,615,615,615,615,794,794,794,794,794,794,794,794',
+'794,794,794,,794,794,,,794,794,,615,,,615,1091,,615,615,,,615,,615,794',
+'1091,794,615,794,794,,794,794,794,794,794,615,794,,,,615,615,615,615',
+',615,615,615,615,,,,,615,615,,794,1091,1091,,,615,1091,615,615,615,',
+',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,,,,,451,618,618,618',
+'618,618,618,618,618,618,618,618,618,,618,618,618,,618,618,618,618,618',
+'451,451,451,451,451,451,451,451,451,451,451,,451,451,,,451,451,,618',
+',,618,,,618,618,,,618,,618,451,,451,618,451,451,,451,451,451,451,451',
+'618,451,,,,618,618,618,618,,618,618,618,618,,,,,618,618,,451,,,,,618',
+',618,618,618,,,618,618,1029,1029,1029,1029,1029,1029,,,,1029,1029,,',
+',1029,,1029,1029,1029,1029,1029,1029,1029,,,,,,1029,1029,1029,1029,1029',
+'1029,1029,,,1029,,,,,763,1029,1029,1029,1029,1029,1029,1029,1029,1029',
+'1029,1029,1029,,1029,1029,1029,,1029,1029,1029,1029,1029,763,763,763',
+'763,763,763,763,763,763,763,763,,763,763,,,763,763,,1029,,,1029,,,1029',
+'1029,,,1029,,1029,763,,763,1029,763,763,,763,763,763,763,763,1029,763',
+',,,1029,1029,1029,1029,,1029,1029,1029,1029,,,,,1029,1029,,763,,,,,1029',
+',1029,1029,1029,,,1029,1029,218,218,218,218,218,218,,,,218,218,,,,218',
+',218,218,218,218,218,218,218,,,,,,218,218,218,218,218,218,218,,1174',
+'218,1174,1174,1174,,1174,218,218,218,218,218,218,218,218,218,218,218',
+'218,,218,218,218,,218,218,218,218,218,505,505,505,505,505,505,505,505',
+'505,505,505,,505,505,,,505,505,,218,,,218,,,218,218,,,218,,218,505,',
+'505,218,505,505,,505,505,505,505,505,218,505,,,,218,218,218,218,,218',
+'218,218,218,,,,,218,218,505,505,,,,,218,,218,218,218,,,218,218,1066',
+'1066,1066,1066,1066,1066,,,,1066,1066,,,,1066,,1066,1066,1066,1066,1066',
+'1066,1066,,,,,,1066,1066,1066,1066,1066,1066,1066,,1068,1066,1068,1068',
+'1068,,1068,1066,1066,1066,1066,1066,1066,1066,1066,1066,1066,1066,1066',
+',1066,1066,1066,,1066,1066,1066,1066,1066,851,851,851,851,851,851,851',
+'851,851,851,851,,851,851,,,851,851,,1066,,,1066,,,1066,1066,,,1066,',
+'1066,851,,851,1066,851,851,,851,851,851,851,851,1066,851,,,,1066,1066',
+'1066,1066,,1066,1066,1066,1066,,,,,1066,1066,,851,,,,,1066,,1066,1066',
+'1066,,,1066,1066,1067,1067,1067,1067,1067,1067,,,,1067,1067,,,,1067',
+',1067,1067,1067,1067,1067,1067,1067,,,,,,1067,1067,1067,1067,1067,1067',
+'1067,,,1067,,,,,,1067,1067,1067,1067,1067,1067,1067,1067,1067,1067,1067',
+'1067,,1067,1067,1067,,1067,1067,1067,1067,1067,307,307,307,307,307,307',
+'307,307,307,307,307,,307,307,,,307,307,,1067,,,1067,,,1067,1067,,,1067',
+',1067,307,,307,1067,307,307,,307,307,307,307,307,1067,307,,,,1067,1067',
+'1067,1067,,1067,1067,1067,1067,,,,,1067,1067,,307,,,,,1067,,1067,1067',
+'1067,,,1067,1067,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,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050,,1050',
+'1050,,,1050,1050,,639,,,639,,,639,639,,,639,,639,1050,,1050,639,1050',
+'1050,,1050,1050,1050,1050,1050,639,1050,,,,639,639,639,639,,639,639',
+'639,639,,,,,639,639,,1050,,,,,639,,639,639,639,,,639,639,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,560,560,560,560,560,560',
+'560,560,560,560,560,,560,560,,,560,560,,386,,,386,,,386,386,,,386,,386',
+'560,,560,386,560,560,,560,560,560,560,560,386,560,,,,386,386,386,386',
+',386,386,386,386,,,,,386,386,,560,,,,,386,,386,386,386,,,386,386,36',
+'36,36,36,36,36,,,,36,36,,,,36,,36,36,36,36,36,36,36,,,,,,36,36,36,36',
+'36,36,36,,,36,,,,,,36,36,36,36,36,36,36,36,36,36,36,36,,36,36,36,,36',
+'36,36,36,36,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,',
+'1009,1009,,,1009,1009,,36,,,36,,,36,36,,,36,,36,1009,,1009,36,1009,1009',
+',1009,1009,1009,1009,1009,36,1009,,,,36,36,36,36,,36,36,36,36,,,,,36',
+'36,,1009,,,,,36,,36,36,36,,,36,36,135,135,135,135,135,135,,,,135,135',
+',,,135,,135,135,135,135,135,135,135,,,,,,135,135,135,135,135,135,135',
+',,135,,,,,,135,135,135,135,135,135,135,135,135,135,135,135,,135,135',
+'135,,135,135,135,135,135,1027,1027,1027,1027,1027,1027,1027,1027,1027',
+'1027,1027,,1027,1027,,,1027,1027,,135,,,135,,,135,135,,,135,,135,1027',
+',1027,135,1027,1027,,1027,1027,1027,1027,1027,135,1027,,,,135,135,135',
+'135,,135,135,135,135,,,,,135,135,,1027,,,,,135,,135,135,135,,,135,135',
+'332,332,332,332,332,332,,,,332,332,,,,332,,332,332,332,332,332,332,332',
+',,,,,332,332,332,332,332,332,332,,941,332,941,941,941,,941,332,332,332',
+'332,332,332,332,332,332,332,332,332,,332,332,332,,332,332,332,332,332',
+'781,,781,781,781,,781,,941,,942,,942,942,942,,942,941,,332,,,332,,,332',
+'332,,502,332,,332,,,,332,,781,,1119,,1119,1119,1119,332,1119,781,942',
+',332,332,332,332,,332,332,332,332,,,502,,332,332,502,502,,502,502,,332',
+',332,332,332,,1119,332,332,385,385,385,385,385,385,,,,385,385,,,,385',
+',385,385,385,385,385,385,385,,,,,,385,385,385,385,385,385,385,,,385',
+',,501,,,385,385,385,385,385,385,385,385,385,385,385,385,,385,385,385',
+',385,385,385,385,385,503,503,503,503,503,503,503,501,,503,503,501,501',
+',501,501,503,503,,385,,,385,,,385,385,,,385,,385,503,,503,385,503,503',
+',503,503,503,503,503,385,503,,,,385,385,385,385,,385,385,385,385,,,',
+',385,385,,1118,,1118,1118,1118,385,1118,385,385,385,,,385,385,1120,1120',
+'1120,1120,1120,1120,,,,1120,1120,,,,1120,,1120,1120,1120,1120,1120,1120',
+'1120,1118,,,,,1120,1120,1120,1120,1120,1120,1120,,,1120,,,,,,1120,1120',
+'1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,,1120,1120,1120,,1120',
+'1120,1120,1120,1120,499,499,499,499,499,499,499,,,499,499,,,,,,499,499',
+',1120,,,1120,,,1120,1120,,,1120,,1120,499,,499,1120,499,499,,499,499',
+'499,499,499,1120,499,,,,1120,1120,1120,1120,,1120,1120,1120,1120,,,',
+',1120,1120,,,,,,,1120,,1120,1120,1120,,,1120,1120,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,500,500,500,500,500,500,500,,',
+'500,500,,,,,,500,500,,327,,,327,,,327,327,,,327,,327,500,,500,327,500',
+'500,,500,500,500,500,500,327,500,,,,327,327,327,327,,327,327,327,327',
+',,,,327,327,,,,,,,327,,327,327,327,,,327,327,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,908,908,,908,908,908,908,908,498,498,498,498,498,498,498,,,498',
+'498,,,,,,498,498,,908,,,908,,,908,908,,,908,,908,498,,498,908,498,498',
+',498,498,498,498,498,908,498,,,,908,908,908,908,,908,908,908,908,,,',
+',908,908,,,,,,,908,,908,908,908,,,908,908,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,496',
+'496,496,496,496,496,496,,,496,496,,,,,,496,496,,1166,,,1166,,,1166,1166',
+',,1166,,1166,496,,496,1166,496,496,,496,496,496,496,496,1166,496,,,',
+'1166,1166,1166,1166,,1166,1166,1166,1166,,,,,1166,1166,,,,,,,1166,,1166',
+'1166,1166,,,1166,1166,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2,2,,,,,,2',
+'2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,2,2,2,355,355',
+'355,355,355,355,355,355,355,355,355,,355,355,,,355,355,,2,,,2,,,2,2',
+',,2,,2,355,,355,2,355,355,,355,355,355,355,355,2,355,,,,2,2,2,2,,2,2',
+'2,2,,,,,2,2,,,,,,,2,,2,2,2,,,2,2,370,370,370,370,370,370,,,,370,370',
+',,,370,,370,370,370,370,370,370,370,,,,,,370,370,370,370,370,370,370',
+',,370,,,,,,370,370,370,370,370,370,370,370,370,370,370,370,,370,370',
+'370,,370,370,370,370,370,354,354,354,354,354,354,354,354,354,354,354',
+',354,354,,,354,354,,370,,,370,,,370,370,,,370,,370,354,,354,370,354',
+'354,,354,354,354,354,354,370,354,,,,370,370,370,370,,370,370,370,370',
+',,,,370,370,,,,,,,370,,370,370,370,,,370,370,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,504,504,504,504,504,504,504,504,,504',
+'504,,,,,,504,504,,369,,,369,,,369,369,,,369,,369,504,,504,369,504,504',
+',504,504,504,504,504,369,504,,,,369,369,369,369,,369,369,369,369,,,',
+',369,369,,,,,,,369,,369,369,369,,,369,369,920,920,920,920,920,920,,',
+',920,920,,,,920,,920,920,920,920,920,920,920,,,,,,920,920,920,920,920',
+'920,920,,,920,,,,,,920,920,920,920,920,920,920,920,920,920,920,920,',
+'920,920,920,,920,920,920,920,920,559,,,,,,,,,,,,,,,,559,559,,920,,,920',
+',,920,920,,,920,,920,559,,559,920,559,559,,559,559,,,559,920,559,,,',
+'920,920,920,920,,920,920,920,920,,,,,920,920,,,,,,,920,,920,920,920',
+',,920,920,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',
+'484,484,484,484,484,484,484,484,484,484,484,,484,484,,,484,484,,363',
+',,363,,,363,363,,,363,,363,484,,484,363,484,484,,484,484,484,484,484',
+'363,484,,,,363,363,363,363,,363,363,363,363,,,,,363,363,,,,,,,363,,363',
+'363,363,,,363,363,1107,1107,1107,1107,1107,1107,,,,1107,1107,,,,1107',
+',1107,1107,1107,1107,1107,1107,1107,,,,,,1107,1107,1107,1107,1107,1107',
+'1107,,,1107,,,,,,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107',
+'1107,,1107,1107,1107,,1107,1107,1107,1107,1107,497,497,497,497,497,497',
+'497,,,497,497,,,,,,497,497,,1107,,,1107,,,1107,1107,,,1107,,1107,497',
+',497,1107,497,497,,497,497,497,497,497,1107,497,,,,1107,1107,1107,1107',
+',1107,1107,1107,1107,,,,,1107,1107,,,,,,,1107,,1107,1107,1107,,,1107',
+'1107,955,955,955,955,955,955,,,,955,955,,,,955,,955,955,955,955,955',
+'955,955,,,,,,955,955,955,955,955,955,955,,,955,,,,,,955,955,955,955',
+'955,955,955,955,955,955,955,955,,955,955,955,,955,955,955,955,955,485',
+'485,485,485,485,485,485,485,485,485,485,,485,485,,,485,485,,955,,,955',
+',,955,955,,,955,,955,485,,485,955,485,485,,485,485,485,485,485,955,485',
+',,,955,955,955,955,,955,955,955,955,,,,,955,955,,,,,,,955,,955,955,955',
+',,955,955,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,961,,961,961,961,961,961',
+'495,495,495,495,495,495,495,,,495,495,,,,,,495,495,,961,,,961,,,961',
+'961,,,961,,961,495,,495,961,495,495,,495,495,495,495,495,961,495,,,',
+'961,961,961,961,,961,961,961,961,,,,,961,961,,,,,,,961,,961,961,961',
+',,961,961,243,243,243,243,243,243,,,,243,243,,,,243,,243,243,243,243',
+'243,243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,,243,243,243',
+'243,243,243,243,243,243,243,243,243,,243,243,243,,243,243,243,243,243',
+'506,,,,,,,,,,,,,,,,506,506,,243,,,243,,,243,243,,,243,,243,506,,506',
+'243,506,506,,506,506,,,506,243,506,,,,243,243,243,243,,243,243,243,243',
+',,,,243,243,,,,132,132,132,243,132,243,243,243,132,132,243,243,,132',
+',132,132,132,132,132,132,132,,,,,,132,132,132,132,132,132,132,,,132',
+',,,,,,132,,,132,132,132,132,132,132,132,132,,132,132,132,,132,132,132',
+'132,132,492,,,,,,,,,,,,,,,,492,492,,132,,,132,,,132,132,,,132,,,492',
+',492,132,492,492,,492,492,,,,132,,,,,132,132,132,132,,132,132,132,132',
+',,,,132,132,,,,,,,132,,132,132,132,510,,132,132,,,,510,510,510,,,510',
+'510,510,,510,494,,,,,,,510,510,510,,,,,,,494,494,,510,510,,510,510,510',
+'510,510,,,,,,494,,292,292,494,494,292,494,494,,,,,,292,292,,292,292',
+'292,292,292,292,292,,,292,292,510,,,292,292,292,292,510,,,,,510,510',
+',,,,,,292,292,,292,292,292,292,292,292,292,292,292,292,292,292,510,510',
+'292,,,,,,,,,,,,,510,,,510,,,,,510,7,7,7,7,7,,510,,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,493,,,,,,,,,,,,,,,,493,493,,7,,,7,,,7,7,,,7,,7,493,,493,7,493',
+'493,,493,493,,,,7,,,,,7,7,7,7,,7,7,7,7,,,,,7,7,,,,1155,1155,1155,7,1155',
+'7,7,7,1155,1155,7,7,,1155,,1155,1155,1155,1155,1155,1155,1155,,,,,,1155',
+'1155,1155,1155,1155,1155,1155,,,1155,,,,,,,1155,,,1155,1155,1155,1155',
+'1155,1155,1155,1155,1155,1155,1155,1155,,1155,1155,1155,1155,1155,,',
+',,,,,,,,,,,,,,,,,1155,,,1155,,,1155,1155,,,1155,,1155,,1155,,1155,,',
+'1155,,,,,,1155,,,,,1155,1155,1155,1155,,1155,1155,1155,1155,,,,,1155',
+'1155,,,,22,22,22,1155,22,1155,1155,1155,22,22,1155,1155,,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,,,,1123',
+'1123,1123,22,1123,22,22,22,1123,1123,22,22,,1123,,1123,1123,1123,1123',
+'1123,1123,1123,,,,,,1123,1123,1123,1123,1123,1123,1123,,,1123,,,,,,',
+'1123,,,1123,1123,1123,1123,1123,1123,1123,1123,,1123,1123,1123,,1123',
+'1123,1123,1123,1123,,,,,,,,,,,,,,,,,,,,1123,,,1123,,,1123,1123,,,1123',
+',,,,,1123,,,,,,,,,1123,,,,,1123,1123,1123,1123,,1123,1123,1123,1123',
+',,,,1123,1123,,,,,,,1123,,1123,1123,1123,30,,1123,1123,,,,30,30,30,',
+',30,30,30,,30,,,,,,,,30,30,30,30,,,,,,,,,30,30,,30,30,30,30,30,,,,,',
+',,,,,,,,,,,,,,,,,30,30,30,30,30,30,30,30,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,30,30,30,',
+',,31,31,31,,,31,31,31,,31,30,,,30,30,,30,31,30,31,31,,,,,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,32,32,32,,32,,31,,32',
+'32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32,32,32,32,32,32,,,32,,,,,,',
+'32,,,32,32,32,32,32,32,32,32,32,32,32,32,,32,32,32,32,32,,,,,,,,,,,',
+',,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32,,,32,,,,,,32,,,,,32,32,32,32',
+',32,32,32,32,,,,,32,32,,,,33,33,33,32,33,32,32,32,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,33,,,,,,,,,,,,,,,,,,,,33,,,33',
+',,33,33,,,33,,33,,33,,33,,,33,,,,,,33,,,,,33,33,33,33,,33,33,33,33,',
+',,,33,33,,,,34,34,34,33,34,33,33,33,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,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,',
+'34,,34,,34,,34,,,34,,,,,,34,,,,,34,34,34,34,,34,34,34,34,,,,,34,34,',
+',,1122,1122,1122,34,1122,34,34,34,1122,1122,34,34,,1122,,1122,1122,1122',
+'1122,1122,1122,1122,,,,,,1122,1122,1122,1122,1122,1122,1122,,,1122,',
+',,,,,1122,,,1122,1122,1122,1122,1122,1122,1122,1122,,1122,1122,1122',
+',1122,1122,1122,1122,1122,,,,,,,,,,,,,,,,,,,,1122,,,1122,,,1122,1122',
+',,1122,,,,,,1122,,,,,,,,,1122,,,,,1122,1122,1122,1122,,1122,1122,1122',
+'1122,,,,,1122,1122,,,,44,44,44,1122,44,1122,1122,1122,44,44,1122,1122',
+',44,,44,44,44,44,44,44,44,,,,,,44,44,44,44,44,44,44,,,44,,,,,,,44,,',
+'44,44,44,44,44,44,44,44,,44,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,,,,47,47,47',
+'45,47,45,45,45,47,47,45,45,,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,,,,48,48,48,47,48,47,47,47,48,48',
+'47,47,,48,,48,48,48,48,48,48,48,,,,,,48,48,48,48,48,48,48,,,48,,,,,',
+',48,,,48,48,48,48,48,48,48,48,,48,48,48,,48,48,48,48,48,,,,,,,,,,,,',
+',,,,,,,48,,,48,,,48,48,,,48,,,,,,48,,,,,,,,,48,,,,,48,48,48,48,,48,48',
+'48,48,,,,,48,48,,,,50,50,50,48,50,48,48,48,50,50,48,48,,50,,50,50,50',
+'50,50,50,50,,,,,,50,50,50,50,50,50,50,,,50,,,,,,,50,,,50,50,50,50,50',
+'50,50,50,,50,50,50,,50,50,50,50,50,,,,,,,,,,,,,,,,,,,,50,,,50,,,50,50',
+',,50,,,,,,50,,,,,,,,,50,,,,,50,50,50,50,,50,50,50,50,,,,,50,50,,,,,',
+',50,,50,50,50,64,,50,50,,,,64,64,64,,,64,64,64,,64,,,,,,,,64,,64,64',
+'64,,,,707,707,707,707,64,64,,64,64,64,64,64,,,,,707,707,707,,,,,,,,',
+',,707,707,,,707,64,64,64,64,64,64,64,64,64,64,64,64,64,64,,,64,64,64',
+',,64,,,64,,,64,64,,64,,64,,64,,64,64,,64,64,64,64,64,,64,,64,,707,707',
+'707,707,,707,707,707,707,,,,64,707,707,64,64,64,64,,64,707,64,707,707',
+'707,,64,66,66,66,66,66,,,,66,66,,,,66,,66,66,66,66,66,66,66,,,,,,66',
+'66,66,66,66,66,66,,,66,,,,,,66,66,,66,66,66,66,66,66,66,66,66,,66,66',
+'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,67,,,,,67,67,,,,68,68,68,67,68,67,67,67,68,68',
+'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,,,,71,71,71,68,71,68,68,68,71,71,68,68,,71,,71',
+'71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71,,,,,,,71,,,71,71,71',
+'71,71,71,71,71,,71,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,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,72,,,,75,75,75,72,75',
+'72,72,72,75,75,72,72,,75,,75,75,75,75,75,75,75,,,,,,75,75,75,75,75,75',
+'75,,,75,,,,,,,75,,,75,75,75,75,75,75,75,75,,75,75,75,,75,75,75,75,75',
+',,,,,,,,,,,,,,,,,,,75,,,75,,,75,75,,,75,,,,,,75,,,,,,,,,75,,,,,75,75',
+'75,75,,75,75,75,75,,,,,75,75,75,,,,,75,75,,75,75,75,,,75,75,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,,,124,124,129,129',
+'129,,129,,,,129,129,,,,129,,129,129,129,129,129,129,129,,,,,,129,129',
+'129,129,129,129,129,,,129,,,,,,,129,,,129,129,129,129,129,129,129,129',
+',129,129,129,,129,129,129,129,129,,,,,,,,,,,,,,,,,,,,129,,,129,,,129',
+'129,,,129,,,,,,129,,,,,,,,,129,,,,,129,129,129,129,,129,129,129,129',
+',,,,129,129,,,,130,130,130,129,130,129,129,129,130,130,129,129,,130',
+',130,130,130,130,130,130,130,,,,,,130,130,130,130,130,130,130,,,130',
+',,,,,,130,,,130,130,130,130,130,130,130,130,,130,130,130,,130,130,130',
+'130,130,,,,,,,,,,,,,,,,,,,,130,,,130,,,130,130,,,130,,,,,,130,,,,,,',
+',,130,,,,,130,130,130,130,,130,130,130,130,,,,,130,130,,,,131,131,131',
+'130,131,130,130,130,131,131,130,130,,131,,131,131,131,131,131,131,131',
+',,,,,131,131,131,131,131,131,131,,,131,,,,,,,131,,,131,131,131,131,131',
+'131,131,131,,131,131,131,,131,131,131,131,131,,,,,,,,,,,,,,,,,,,,131',
+',,131,,,131,131,,,131,,,,,,131,,,,,,,,,131,,,,,131,131,131,131,,131',
+'131,131,131,,,,,131,131,,,,515,515,515,131,515,131,131,131,515,515,131',
+'131,,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,,,515,515,,,515,,,,,,515',
+',,,,,,,,515,,,,,515,515,515,515,,515,515,515,515,,,,,515,515,,,,,,,515',
+',515,515,515,,,515,515,133,133,133,133,133,,,,133,133,,,,133,,133,133',
+'133,133,133,133,133,,,,,,133,133,133,133,133,133,133,,,133,,,,,,133',
+'133,,133,133,133,133,133,133,133,133,133,,133,133,133,,133,133,133,133',
+'133,,,,,,,,,,,,,,,,,,,,133,,,133,,,133,133,,,133,,133,,,,133,,,,,,,',
+',133,,,,,133,133,133,133,,133,133,133,133,,,,,133,133,,,,231,231,231',
+'133,231,133,133,133,231,231,133,133,,231,,231,231,231,231,231,231,231',
+',,,,,231,231,231,231,231,231,231,,,231,,,,,,,231,,,231,231,231,231,231',
+'231,231,231,,231,231,231,,231,231,231,231,231,,,,,,,,,,,,,,,,,,,,231',
+',,231,,,231,231,,,231,,,,,,231,,,,,,,,,231,,,,,231,231,231,231,,231',
+'231,231,231,,,,,231,231,231,,,242,242,242,231,242,231,231,231,242,242',
+'231,231,,242,,242,242,242,242,242,242,242,,,,,,242,242,242,242,242,242',
+'242,,,242,,,,,,,242,,,242,242,242,242,242,242,242,242,,242,242,242,',
+'242,242,242,242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242,,,242,,,',
+',,242,,,,,,,,,242,,,,,242,242,242,242,,242,242,242,242,,,,,242,242,',
+',,247,247,247,242,247,242,242,242,247,247,242,242,,247,,247,247,247',
+'247,247,247,247,,,,,,247,247,247,247,247,247,247,,,247,,,,,,,247,,,247',
+'247,247,247,247,247,247,247,,247,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,,,,250,250,250',
+'249,250,249,249,249,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,,,,251,251,251,250,251,250,250,250,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,,,,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,,,,260,260,260,259,260,259,259,259',
+'260,260,259,259,,260,,260,260,260,260,260,260,260,,,,,,260,260,260,260',
+'260,260,260,,,260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260,260',
+'260,,260,260,260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260',
+',,,,,260,,,,,,,,,260,,,,,260,260,260,260,,260,260,260,260,,,,,260,260',
+',,,261,261,261,260,261,260,260,260,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,,,,262,262,262,261,262,261',
+'261,261,262,262,261,261,,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,,,,263,263,263,262,263,262,262,262,263,263,262,262,,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,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,,,,265,265,265,264,265,264,264,264,265,265,264',
+'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',
+'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,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,,,,267,267,267,266,267,266,266,266',
+'267,267,266,266,,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,267,268,267,267,267,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,,,,273,273,273,268,273,268',
+'268,268,273,273,268,268,,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,,,,974,974,974,273,974,273,273,273,974,974,273,273,,974',
+',974,974,974,974,974,974,974,,,,,,974,974,974,974,974,974,974,,,974',
+',,,,,,974,,,974,974,974,974,974,974,974,974,,974,974,974,,974,974,974',
+'974,974,,,,,,,,,,,,,,,,,,,,974,,,974,,,974,974,,,974,,,,,,974,,,,,,',
+',,974,,,,,974,974,974,974,,974,974,974,974,,,,,974,974,,,,973,973,973',
+'974,973,974,974,974,973,973,974,974,,973,,973,973,973,973,973,973,973',
+',,,,,973,973,973,973,973,973,973,,,973,,,,,,,973,,,973,973,973,973,973',
+'973,973,973,973,973,973,973,,973,973,973,973,973,,,,,,,,,,,,,,,,,,,',
+'973,,,973,,,973,973,,,973,,,,973,,973,,,973,,,,,,973,,,,,973,973,973',
+'973,,973,973,973,973,,,,,973,973,,,,954,954,954,973,954,973,973,973',
+'954,954,973,973,,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,954,,954,954,954,954,,,,,954',
+'954,,,,949,949,949,954,949,954,954,954,949,949,954,954,,949,,949,949',
+'949,949,949,949,949,,,,,,949,949,949,949,949,949,949,,,949,,,,,,,949',
+',,949,949,949,949,949,949,949,949,,949,949,949,,949,949,949,949,949',
+',,,,,,,,,,,,,,,,,,,949,,,949,,,949,949,,,949,,,,,,949,,,,,,,,,949,,',
+',,949,949,949,949,,949,949,949,949,,,,,949,949,,,,945,945,945,949,945',
+'949,949,949,945,945,949,949,,945,,945,945,945,945,945,945,945,,,,,,945',
+'945,945,945,945,945,945,,,945,,,,,,,945,,,945,945,945,945,945,945,945',
+'945,,945,945,945,,945,945,945,945,945,,,,,,,,,,,,,,,,,,,,945,,,945,',
+',945,945,,,945,,,,,,945,,,,,,,,,945,,,,,945,945,945,945,,945,945,945',
+'945,,,,,945,945,,,,289,289,289,945,289,945,945,945,289,289,945,945,',
+'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,,,,917,917',
+'917,289,917,289,289,289,917,917,289,289,,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,,,,296,296,296,917,296,917,917,917,296',
+'296,917,917,,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,,,,297,297,297,296,297,296,296,296,297,297,296,296,,297,',
+'297,297,297,297,297,297,297,,,,,,297,297,297,297,297,297,297,,,297,',
+',,,,,297,,,297,297,297,297,297,297,297,297,297,297,297,297,,297,297',
+'297,297,297,,,,,,,,,,,,,,,,,,,,297,,,297,,,297,297,,,297,,297,,297,',
+'297,,,297,,,,,,297,,,,,297,297,297,297,,297,297,297,297,,,,,297,297',
+',,,305,305,305,297,305,297,297,297,305,305,297,297,,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,,,,,305,305,305,305,,305,305,305,305,,,,,305,305,305,,,897,897,897',
+'305,897,305,305,305,897,897,305,305,,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,,,,312,312,312,897,312,897,897,897,312,312,897',
+'897,,312,,312,312,312,312,312,312,312,,,,,,312,312,312,312,312,312,312',
+',,312,,,,,,,312,,,312,312,312,312,312,312,312,312,,312,312,312,,312',
+'312,312,312,312,,,,,,,,,,,,,,,,,,,,312,,,312,,,312,312,,,312,,,,,,312',
+',,,,,,,,312,,,,,312,312,312,312,,312,312,312,312,,,,,312,312,,,,314',
+'314,314,312,314,312,312,312,314,314,312,312,,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,,,,,314,314,,,,317,317,317,314,317,314,314,314',
+'317,317,314,314,,317,,317,317,317,317,317,317,317,,,,,,317,317,317,317',
+'317,317,317,,,317,,,,,,,317,,,317,317,317,317,317,317,317,317,,317,317',
+'317,,317,317,317,317,317,,,,,,,,,,,,,,,,,,,,317,,,317,,,317,317,,,317',
+',,,,,317,,,,,,,,,317,,,,,317,317,317,317,,317,317,317,317,,,,,317,317',
+',,,318,318,318,317,318,317,317,317,318,318,317,317,,318,,318,318,318',
+'318,318,318,318,,,,,,318,318,318,318,318,318,318,,,318,,,,,,,318,,,318',
+'318,318,318,318,318,318,318,,318,318,318,,318,318,318,318,318,,,,,,',
+',,,,,,,,,,,,,318,,,318,,,318,318,,,318,,,,,,318,,,,,,,,,318,,,,,318',
+'318,318,318,,318,318,318,318,,,,,318,318,,,,,,,318,,318,318,318,,,318',
+'318,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',
+'323,,323,323,323,323,,,,,323,323,,,,868,868,868,323,868,323,323,323',
+'868,868,323,323,,868,,868,868,868,868,868,868,868,,,,,,868,868,868,868',
+'868,868,868,,,868,,,,,,,868,,,868,868,868,868,868,868,868,868,,868,868',
+'868,,868,868,868,868,868,,,,,,,,,,,,,,,,,,,,868,,,868,,,868,868,,,868',
+',,,,,868,,,,,,,,,868,,,,,868,868,868,868,,868,868,868,868,,,,,868,868',
+',,,867,867,867,868,867,868,868,868,867,867,868,868,,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,,,,866,866,866,867,866,867',
+'867,867,866,866,867,867,,866,,866,866,866,866,866,866,866,,,,,,866,866',
+'866,866,866,866,866,,,866,,,,,,,866,,,866,866,866,866,866,866,866,866',
+',866,866,866,,866,866,866,866,866,,,,,,,,,,,,,,,,,,,,866,,,866,,,866',
+'866,,,866,,,,,,866,,,,,,,,,866,,,,,866,866,866,866,,866,866,866,866',
+',,,,866,866,,,,865,865,865,866,865,866,866,866,865,865,866,866,,865',
+',865,865,865,865,865,865,865,,,,,,865,865,865,865,865,865,865,,,865',
+',,,,,,865,,,865,865,865,865,865,865,865,865,,865,865,865,,865,865,865',
+'865,865,,,,,,,,,,,,,,,,,,,,865,,,865,,,865,865,,,865,,,,,,865,,,,,,',
+',,865,,,,,865,865,865,865,,865,865,865,865,,,,,865,865,,,,852,852,852',
+'865,852,865,865,865,852,852,865,865,,852,,852,852,852,852,852,852,852',
+',,,,,852,852,852,852,852,852,852,,,852,,,,,,,852,,,852,852,852,852,852',
+'852,852,852,,852,852,852,,852,852,852,852,852,,,,,,,,,,,,,,,,,,,,852',
+',,852,,,852,852,,,852,,,,,,852,,,,,,,,,852,,,,,852,852,852,852,,852',
+'852,852,852,,,,,852,852,,,,844,844,844,852,844,852,852,852,844,844,852',
+'852,,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,,844,844,844,844,,,,,844,844,,,,824',
+'824,824,844,824,844,844,844,824,824,844,844,,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,824,824,,824,824,824,824,824,,,,,,,,,,,,,,',
+',,,,,824,,,824,,,824,824,,,824,,,,,,824,,,,,,,,,824,,,,,824,824,824',
+'824,,824,824,824,824,,,,,824,824,,,,359,359,359,824,359,824,824,824',
+'359,359,824,824,,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',
+',,,361,361,361,359,361,359,359,359,361,361,359,359,,361,,361,361,361',
+'361,361,361,361,,,,,,361,361,361,361,361,361,361,,,361,,,,,,,361,,,361',
+'361,361,361,361,361,361,361,,361,361,361,,361,361,361,361,361,,,,,,',
+',,,,,,,,,,,,,361,,,361,361,,361,361,,,361,,,,,,361,,,,,,,,,361,,,,,361',
+'361,361,361,,361,361,361,361,,,,,361,361,,,,779,779,779,361,779,361',
+'361,361,779,779,361,361,,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,,,,765,765,765,779,765,779,779,779,765,765,779,779,,765',
+',765,765,765,765,765,765,765,,,,,,765,765,765,765,765,765,765,,,765',
+',,,,,,765,,,765,765,765,765,765,765,765,765,,765,765,765,,765,765,765',
+'765,765,,,,,,,,,,,,,,,,,,,,765,,,765,,,765,765,,,765,,765,,,,765,,,',
+',,,,,765,,,,,765,765,765,765,,765,765,765,765,,,,,765,765,,,,745,745',
+'745,765,745,765,765,765,745,745,765,765,,745,,745,745,745,745,745,745',
+'745,,,,,,745,745,745,745,745,745,745,,,745,,,,,,,745,,,745,745,745,745',
+'745,745,745,745,,745,745,745,,745,745,745,745,745,,,,,,,,,,,,,,,,,,',
+',745,,,745,,,745,745,,,745,,,,,,745,,,,,,,,,745,,,,,745,745,745,745',
+',745,745,745,745,,,,,745,745,,,,742,742,742,745,742,745,745,745,742',
+'742,745,745,,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',
+',,,384,384,384,742,384,742,742,742,384,384,742,742,,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,,,,733,733,733,384,733,384',
+'384,384,733,733,384,384,,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,733,733,,,,,733,733,,,,685,685,685,733,685,733,733,733,685,685,733',
+'733,,685,,685,685,685,685,685,685,685,,,,,,685,685,685,685,685,685,685',
+',,685,,,,,,,685,,,685,685,685,685,685,685,685,685,,685,685,685,,685',
+'685,685,685,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685,685,,,685,,,,,,685',
+',,,,,,,,685,,,,,685,685,685,685,,685,685,685,685,,,,,685,685,,,,405',
+'405,405,685,405,685,685,685,405,405,685,685,,405,,405,405,405,405,405',
+'405,405,,,,,,405,405,405,405,405,405,405,,,405,,,,,,,405,,,405,405,405',
+'405,405,405,405,405,,405,405,405,,405,405,405,405,405,,,,,,,,,,,,,,',
+',,,,,405,,,405,,,405,405,,,405,,,,,,405,,,,,,,,,405,,,,,405,405,405',
+'405,,405,405,405,405,,,,,405,405,,,,684,684,684,405,684,405,405,405',
+'684,684,405,405,,684,,684,684,684,684,684,684,684,,,,,,684,684,684,684',
+'684,684,684,,,684,,,,,,,684,,,684,684,684,684,684,684,684,684,,684,684',
+'684,,684,684,684,684,684,,,,,,,,,,,,,,,,,,,,684,,,684,,,684,684,,,684',
+',,,,,684,,,,,,,,,684,,,,,684,684,684,684,,684,684,684,684,,,,,684,684',
+',,,680,680,680,684,680,684,684,684,680,680,684,684,,680,,680,680,680',
+'680,680,680,680,,,,,,680,680,680,680,680,680,680,,,680,,,,,,,680,,,680',
+'680,680,680,680,680,680,680,,680,680,680,,680,680,680,680,680,,,,,,',
+',,,,,,,,,,,,,680,,,680,,,680,680,,,680,,,,,,680,,,,,,,,,680,,,,,680',
+'680,680,680,,680,680,680,680,,,,,680,680,,,,679,679,679,680,679,680',
+'680,680,679,679,680,680,,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,,,,678,678,678,679,678,679,679,679,678,678,679,679,,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,,,,677',
+'677,677,678,677,678,678,678,677,677,678,678,,677,,677,677,677,677,677',
+'677,677,,,,,,677,677,677,677,677,677,677,,,677,,,,,,,677,,,677,677,677',
+'677,677,677,677,677,677,677,677,677,,677,677,677,677,677,,,,,,,,,,,',
+',,,,,,,,677,,,677,,,677,677,,,677,,677,,677,,677,,,677,,,,,,677,,,,',
+'677,677,677,677,,677,677,677,677,,,,,677,677,,,,674,674,674,677,674',
+'677,677,677,674,674,677,677,,674,,674,674,674,674,674,674,674,,,,,,674',
+'674,674,674,674,674,674,,,674,,,,,,,674,,,674,674,674,674,674,674,674',
+'674,,674,674,674,,674,674,674,674,674,,,,,,,,,,,,,,,,,,,,674,,,674,',
+',674,674,,,674,,,,,,674,,,,,,,,,674,,,,,674,674,674,674,,674,674,674',
+'674,,,,,674,674,,,,,,,674,,674,674,674,,,674,674,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,673,673,,673,673,673,673',
+',,,,673,673,,,,670,670,670,673,670,673,673,673,670,670,673,673,,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,,,,,670,670',
+',,,669,669,669,670,669,670,670,670,669,669,670,670,,669,,669,669,669',
+'669,669,669,669,,,,,,669,669,669,669,669,669,669,,,669,,,,,,,669,,,669',
+'669,669,669,669,669,669,669,,669,669,669,,669,669,669,669,669,,,,,,',
+',,,,,,,,,,,,,669,,,669,,,669,669,,,669,,,,,,669,,,,,,,,,669,,,,,669',
+'669,669,669,,669,669,669,669,,,,,669,669,,,,668,668,668,669,668,669',
+'669,669,668,668,669,669,,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,,668,668,668,,,668,668,666,666,666,666,666,,,',
+'666,666,,,,666,,666,666,666,666,666,666,666,,,,,,666,666,666,666,666',
+'666,666,,,666,,,,,,666,666,,666,666,666,666,666,666,666,666,666,,666',
+'666,666,,666,666,666,666,666,,,,,,,,,,,,,,,,,,,,666,,,666,,,666,666',
+',,666,,666,,,,666,,,,,,,,,666,,,,,666,666,666,666,,666,666,666,666,',
+',,,666,666,,,,434,434,434,666,434,666,666,666,434,434,666,666,,434,',
+'434,434,434,434,434,434,434,,,,,,434,434,434,434,434,434,434,,,434,',
+',,,,,434,,,434,434,434,434,434,434,434,434,,434,434,434,,434,434,434',
+'434,434,,,,,,,,,,,,,,,,,,,,434,,,434,,,434,434,,,434,,,,,,434,,,,,,',
+',,434,,,,,434,434,434,434,,434,434,434,434,,,,,434,434,,,,635,635,635',
+'434,635,434,434,434,635,635,434,434,,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,,,,625,625,625,635,625,635,635',
+'635,625,625,635,635,,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,625,624,625,625,625,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,,,,611',
+'611,611,624,611,624,624,624,611,611,624,624,,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,,,,608,608,608,611,608,611,611',
+'611,608,608,611,611,,608,,608,608,608,608,608,608,608,,,,,,608,608,608',
+'608,608,608,608,,,608,,,,,,,608,,,608,608,608,608,608,608,608,608,608',
+'608,608,608,,608,608,608,608,608,,,,,,,,,,,,,,,,,,,,608,,,608,,,608',
+'608,,,608,,608,,,,608,,,608,,,,,,608,,,,,608,608,608,608,,608,608,608',
+'608,,,,,608,608,,,,,,,608,,608,608,608,458,,608,608,,,,458,458,458,',
+',458,458,458,,458,,,,,,,,458,458,458,458,,,,,,,,,458,458,,458,458,458',
+'458,458,,,,,,,,,,,,,,,,,,,,,,,458,458,458,458,458,458,458,458,458,458',
+'458,458,458,458,,,458,458,458,,,458,,458,458,,,458,458,,458,,458,,458',
+',458,458,,458,458,458,458,458,,458,458,458,,,,,,,,,,,,,,458,,,458,458',
+',458,,458,602,602,602,,602,,458,,602,602,,,,602,,602,602,602,602,602',
+'602,602,,,,,,602,602,602,602,602,602,602,,,602,,,,,,,602,,,602,602,602',
+'602,602,602,602,602,,602,602,602,,602,602,602,602,602,,,,,,,,,,,,,,',
+',,,,,602,,,602,,,602,602,,,602,,,,,,602,,,,,,,,,602,,,,,602,602,602',
+'602,,602,602,602,602,,,,,602,602,,,,,,,602,,602,602,602,467,,602,602',
+',,,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,467,,,467,,,467,,,467',
+'467,,467,,467,,467,,467,467,,467,467,467,467,467,,467,467,467,,,,,,',
+',,,,,,,467,,,467,467,467,467,,467,468,467,,,,,467,468,468,468,,,468',
+'468,468,,468,,,,,,,,468,468,468,468,468,,,,,,,,468,468,,468,468,468',
+'468,468,,,,,,,,,,,,,,,,,,,,,,,468,468,468,468,468,468,468,468,468,468',
+'468,468,468,468,,,468,468,468,,,468,,,468,,,468,468,,468,,468,,468,',
+'468,468,,468,468,468,468,468,,468,468,468,,,,,,,,,,,,,,468,,,468,468',
+'468,468,,468,,468,,588,588,588,468,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,,,,562,562,562,588,562,588',
+'588,588,562,562,588,588,,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,,,,561,561,561,562,561,562,562,562,561,561,562,562,,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,,,,477,477,477',
+'561,477,561,561,561,477,477,561,561,,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,477,477,477,477,,,,,,,,,,,,,,,,,,,',
+'477,,,477,,,477,477,,,477,,477,,477,,477,,,477,,,,,,477,,,,,477,477',
+'477,477,,477,477,477,477,,,,,477,477,,,,558,558,558,477,558,477,477',
+'477,558,558,477,477,,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,,,,479,479,479,558,479,558,558,558,479,479,558,558,,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,,,,480,480,480,479',
+'480,479,479,479,480,480,479,479,,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,,,,481,481,481,480,481,480,480,480,481,481,480',
+'480,,481,,481,481,481,481,481,481,481,,,,,,481,481,481,481,481,481,481',
+',,481,,,,,,,481,,,481,481,481,481,481,481,481,481,,481,481,481,,481',
+'481,481,481,481,,,,,,,,,,,,,,,,,,,,481,,,481,,,481,481,,,481,,,,,,481',
+',,,,,,,,481,,,,,481,481,481,481,,481,481,481,481,,,,,481,481,,,,555',
+'555,555,481,555,481,481,481,555,555,481,481,,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,,,,545,545,545,555,545,555,555,555',
+'545,545,555,555,,545,,545,545,545,545,545,545,545,,,,,,545,545,545,545',
+'545,545,545,,,545,,,,,,,545,,,545,545,545,545,545,545,545,545,545,545',
+'545,545,,545,545,545,545,545,,,,,,,,,,,,,,,,,,,,545,,,545,,,545,545',
+',,545,,545,,545,,545,,,545,,,,,,545,,,,,545,545,545,545,,545,545,545',
+'545,,,,,545,545,,,,,,,545,,545,545,545,,,545,545,535,535,535,535,535',
+',,,535,535,,,,535,,535,535,535,535,535,535,535,,,,,,535,535,535,535',
+'535,535,535,,,535,,,,,,535,535,535,535,535,535,535,535,535,535,535,535',
+',535,535,535,,535,535,535,535,535,,,,,,,,,,,,,,,,,,,,535,,,535,,,535',
+'535,,,535,,535,,,,535,,,,,,,,,535,,,,,535,535,535,535,,535,535,535,535',
+',,,,535,535,,,,,,535,535,,535,535,535,,,535,535,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',
+',,,527,527,527,529,527,529,529,529,527,527,529,529,,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,,,,525,525,525,527',
+'525,527,527,527,525,525,527,527,,525,,525,525,525,525,525,525,525,,',
+',,,525,525,525,525,525,525,525,,,525,,,,,,,525,,,525,525,525,525,525',
+'525,525,525,525,525,525,525,,525,525,525,525,525,,,,,,,,,,,,,,,,,,,',
+'525,,,525,,,525,525,,,525,,525,,525,,525,,,525,,,,,,525,,,,,525,525',
+'525,525,,525,525,525,525,,,,,525,525,,,,219,219,219,525,219,525,525',
+'525,219,219,525,525,,219,,219,219,219,219,219,219,219,,,,,,219,219,219',
+'219,219,219,219,,,219,,,,,,,219,,,219,219,219,219,219,219,219,219,,219',
+'219,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,219,220,219,219,219,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,220,,,,221,221',
+'221,220,221,220,220,220,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,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,,,,224,224,224,223,224,223',
+'223,223,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,224,224,,,,,224,224,,,,229,229,229,224,229,224,224,224,229,229,224',
+'224,,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,229,230,229,229,229,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,,,,1023,1023,1023,230,1023,230,230',
+'230,1023,1023,230,230,,1023,,1023,1023,1023,1023,1023,1023,1023,,,,',
+',1023,1023,1023,1023,1023,1023,1023,,,1023,,,,,,,1023,,,1023,1023,1023',
+'1023,1023,1023,1023,1023,,1023,1023,1023,,1023,1023,,,1023,,,,,,,,,',
+',,,,,,,,,,1023,,,1023,,,1023,1023,,,1023,,,,,,,,,,,,,,,,,,,,1023,1023',
+'1023,1023,,1023,1023,1023,1023,,,,,1023,1023,,,,76,76,76,1023,76,1023',
+'1023,1023,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,76,,,,748,748,748,76,748,76,76,76,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,,,,759,759,759,748,759',
+'748,748,748,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',
+',,,350,350,350,759,350,759,759,759,350,350,,,,350,,350,350,350,350,350',
+'350,350,,,,,,350,350,350,350,350,350,350,,,350,,,,,,,350,,,350,350,350',
+'350,350,350,350,350,,350,350,350,,350,350,,,350,,,,,,,,,,,,,,,,,,,,350',
+',,350,,,350,350,,,350,,,,,,,,,,,,,,,,,,,,350,350,350,350,,350,350,350',
+'350,,,,,350,350,,,,37,37,37,350,37,350,350,350,37,37,,,,37,,37,37,37',
+'37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37,,,,,,,37,,,37,37,37,37,37',
+'37,37,37,,37,37,37,,37,37,,,37,,,,,,,,,,,,,,,,,,,,37,,,37,,,37,37,,',
+'37,,37,,,,,,,,,,,,,,,,,,37,37,37,37,,37,37,37,37,,,,,37,37,,,,552,552',
+'552,37,552,37,37,37,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,,,,1103,1103,1103,552,1103,552,552,552,1103,1103,,,,1103,,1103,1103',
+'1103,1103,1103,1103,1103,,,,,,1103,1103,1103,1103,1103,1103,1103,,,1103',
+',,,,,,1103,,,1103,1103,1103,1103,1103,1103,1103,1103,,1103,1103,1103',
+',1103,1103,,,1103,,,,,,,,,,,,,,,,,,,,1103,,,1103,,,1103,1103,,,1103',
+',,,,,,,,,,,,,,,,,,,1103,1103,1103,1103,,1103,1103,1103,1103,,,,,1103',
+'1103,,,,77,77,77,1103,77,1103,1103,1103,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',
+'77,,77,77,77,,77,77,,,77,,,,,,,,,,,,,,,,,77,,,77,,,77,,,77,77,,,77,',
+',,,,,,,,,,,,,,,,,,77,77,77,77,,77,77,77,77,,,,,77,77,,,,543,543,543',
+'77,543,77,77,77,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',
+',,,78,78,78,543,78,543,543,543,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,78,,78,78',
+'78,,78,78,,,78,,,,,,,,,,,,,,,,,,,,78,,,78,,,78,78,,,78,,,,,,,,,,,,,',
+',,,,,,78,78,78,78,,78,78,78,78,,,,,78,78,,,,38,38,38,78,38,78,78,78',
+'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,,,777,,777,777,777,777,777,,,,,,,,,777,,38',
+'38,38,38,,38,38,38,38,,,,,38,38,,,,38,,777,38,,38,38,38,331,331,331',
+',331,777,777,,331,331,777,,,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,,,1043,,1043,1043,1043,1043,1043,,,,,,,,,1043,,331,331,331,331',
+',331,331,331,331,,,,,331,331,,,,331,,1043,331,,331,331,331,1033,1033',
+'1033,,1033,1043,1043,,1033,1033,1043,,,1033,,1033,1033,1033,1033,1033',
+'1033,1033,,,,,,1033,1033,1033,1033,1033,1033,1033,,,1033,,,,,,,1033',
+',,1033,1033,1033,1033,1033,1033,1033,1033,,1033,1033,1033,,1033,1033',
+',,1033,,,,,,,,,,,,,,,,,,,,1033,,,1033,,,1033,1033,,,1033,,,,,,,,,,,',
+',,,,,,,,1033,1033,1033,1033,,1033,1033,1033,1033,,,,,1033,1033,,,,,',
+',1033,,1033,1033,1033,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11',
+'11,11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11',
+'11,11,11,11,11,11,11,,,11,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11',
+',,,11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11',
+'11,,,11,11,,,,,,,,,,,,,,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10',
+'10,10,10,10,10,10,10,10,10,10,,,,10,10,10,10,10,10,10,10,10,10,,,,,',
+'10,10,10,10,10,10,10,10,10,10,,10,,,,,,,,10,10,,10,10,10,10,10,10,10',
+',,10,10,,,,10,10,10,10,,,,,,,,,,,,,,10,10,,10,10,10,10,10,10,10,10,10',
+'10,10,10,,,10,10,,,,,,,,,,,,,,10,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,664',
+'664,664,664,,,664,664,,,,,,,,,,,,,,664,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,425,,,425,425',
+',,,425,425,425,425,,,,,,,,,,,,,,425,425,,425,425,425,425,425,425,425',
+'425,425,425,425,425,,,425,425,,,,,,,,,,,,,,425,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,24,24,,,24,24,,,,24,24,24,24,,,,,,24,,,,,,,,24,24',
+',24,24,24,24,24,24,24,24,24,24,24,24,,,24,1001,1001,1001,1001,,,,,,',
+',,,,,,1001,1001,1001,1001,,,367,1001,367,367,367,367,367,1001,1001,',
+',1001,,,,367,,,,,,,,,,,,,,,,1001,,,1001,,,367,1001,,,1001,,,,,367,367',
+'367,367,,,,367,,,,1001,,,,1001,1001,1001,1001,,1001,1001,1001,1001,',
+',,,1001,1001,1084,1084,1084,1084,,,1001,,1001,1001,1001,,,1001,1001',
+',1084,1084,1084,1084,,,793,1084,793,793,793,793,793,1084,1084,,,1084',
+',,,793,,,,,,,,,,,,,,,,1084,,,1084,,,793,1084,,,1084,,,,,793,793,793',
+'793,,,,793,,,,1084,,,,1084,1084,1084,1084,,1084,1084,1084,1084,,,,,1084',
+'1084,985,985,985,985,,,1084,,1084,1084,1084,,,1084,1084,,985,985,985',
+'985,,,1212,985,1212,1212,1212,1212,1212,985,985,,,985,,,,1212,,,,,,',
+',,,,,,,,,985,,,985,,,1212,985,,,985,,,,,,,1212,1212,,,,1212,,,,985,',
+',,985,985,985,985,,985,985,985,985,,,,,985,985,1138,1138,1138,1138,',
+',985,,985,985,985,,,985,985,,1138,1138,1138,1138,,,775,1138,775,775',
+'775,775,775,1138,1138,,,1138,,,,775,,,,,,,,,,,,,,,,1138,,,1138,,,775',
+'1138,,,1138,,,,,775,775,775,775,,,,775,,,,1138,,,,1138,1138,1138,1138',
+',1138,1138,1138,1138,,,,,1138,1138,1200,1200,1200,1200,,,1138,,1138',
+'1138,1138,,,1138,1138,,1200,1200,1200,1200,,,1041,1200,1041,1041,1041',
+'1041,1041,1200,1200,,,1200,,,,1041,,,,,,,,,,,,,,,,1200,,,1200,,,1041',
+'1200,,,1200,,,,,,,1041,1041,,,,1041,,,,1200,,,,1200,1200,1200,1200,',
+'1200,1200,1200,1200,,,,,1200,1200,1140,1140,1140,1140,,,1200,,1200,1200',
+'1200,,,1200,1200,,1140,1140,1140,1140,,,1038,1140,1038,1038,1038,1038',
+'1038,1140,1140,,,1140,,,,1038,,,,,,,,,,,,,,,,1140,,,1140,,,1038,1140',
+',,1140,,1140,,,,,1038,1038,,,,1038,,,,1140,,,,1140,1140,1140,1140,,1140',
+'1140,1140,1140,,,,,1140,1140,1176,1176,1176,1176,,,1140,,1140,1140,1140',
+',,1140,1140,,1176,1176,1176,1176,,,1159,1176,1159,1159,1159,1159,1159',
+'1176,1176,,,1176,,,,1159,,,,,,,,,,,,,,,,1176,,,1176,,,1159,1176,,,1176',
+',,,,,,1159,1159,,,,1159,,,,1176,,,,1176,1176,1176,1176,,1176,1176,1176',
+'1176,,,,,1176,1176,,,,,,,1176,,1176,1176,1176,,,1176,1176,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,725,,,725,725,,,,725,725,725,725,,,,,,,,,,,,,,725,725,,725,725',
+'725,725,725,725,725,725,725,725,725,725,,,725,953,953,953,953,,,1099',
+',1099,1099,1099,1099,1099,,,,953,953,953,953,,1099,,953,953,,,,,953',
+'953,,,953,953,,,,,,,,,1099,,,,,,,,,,953,1099,1099,953,,,1099,953,,,953',
+',953,,,,,,,953,,,,,,,953,,,,953,953,953,953,,953,953,953,953,,,,,953',
+'953,701,701,701,701,,,953,,953,953,953,,,953,953,,701,701,701,701,,',
+'1036,701,1036,1036,1036,1036,1036,701,701,,,701,,,,1036,,,,,,,,,,,,',
+',,,701,,,701,,,1036,701,,,701,,701,,,1036,1036,1036,1036,,,,1036,,,',
+'701,,,,701,701,701,701,,701,701,701,701,,,,,701,701,701,889,889,889',
+'889,,701,,701,701,701,,,701,701,,,889,889,889,889,,,1094,889,1094,1094',
+'1094,1094,1094,889,889,,,889,,,,1094,,,,,,,,,,,,,,,,889,,,889,,,1094',
+'889,,,889,,,,,1094,1094,1094,1094,,,,1094,,,,889,,,,889,889,889,889',
+',889,889,889,889,,,,,889,889,482,482,482,482,,,889,,889,889,889,,,889',
+'889,,482,482,482,482,,,1097,482,1097,1097,1097,1097,1097,482,482,,,482',
+',,,1097,,,,,,,,,,,,,,,,482,,,482,,,1097,482,,,482,,,,,1097,1097,1097',
+'1097,,,,1097,,,,482,,,,482,482,482,482,,482,482,482,482,,,,,482,482',
+'881,881,881,881,,,482,,482,482,482,,,482,482,,881,881,881,881,,,1186',
+'881,1186,1186,1186,1186,1186,881,881,,,881,,,,1186,,,,,,,,,,,,,,,,881',
+',,881,,,1186,881,,,881,,881,,,,,1186,1186,,,,1186,,,,881,,,,881,881',
+'881,881,,881,881,881,881,,,,,881,881,875,875,875,875,,,881,,881,881',
+'881,,,881,881,,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,874,874,874,874,,,875,,875',
+'875,875,,,875,875,,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,871,871,871,871,,,874',
+',874,874,874,,,874,874,,871,871,871,871,,,1184,871,1184,1184,1184,1184',
+'1184,871,871,,,871,,,,1184,,,,,,,,,,,,,,,,871,,,871,,,1184,871,,,871',
+',,,,,,1184,1184,,,,1184,,,,871,,,,871,871,871,871,,871,871,871,871,',
+',,,871,871,483,483,483,483,,,871,,871,871,871,,,871,871,,483,483,483',
+'483,,,1182,483,1182,1182,1182,1182,1182,483,483,,,483,,,,1182,,,,,,',
+',,,,,,,,,483,,,483,,,1182,483,,,483,,,,,,,1182,1182,,,,1182,,,,483,',
+',,483,483,483,483,,483,483,483,483,,,,,483,483,1124,1124,1124,1124,',
+',483,,483,483,483,,,483,483,,1124,1124,1124,1124,,,,1124,,,,,,1124,1124',
+',,1124,,,,,,,,708,708,708,708,,,,,,,,,1124,,,1124,708,708,708,1124,',
+',1124,,1124,,,,,708,708,,,708,,,,,1124,,,,1124,1124,1124,1124,,1124',
+'1124,1124,1124,,,,,1124,1124,,,,,,,1124,,1124,1124,1124,,,1124,1124',
+'407,,407,407,407,407,407,,,,,708,708,708,708,407,708,708,708,708,,,',
+',708,708,891,891,891,891,,,708,,708,708,708,407,407,,,,891,891,891,',
+'407,407,407,407,,,,407,,891,891,,,891,890,890,890,890,,,,,,,,,,,,,890',
+'890,890,,,,,,,,,,,890,890,,,890,,,,,,,,,,,,,,,,891,891,891,891,,891',
+'891,891,891,,,,,891,891,,,,,,,891,,891,891,891,,,,,,,,,890,890,890,890',
+',890,890,890,890,,,,,890,890,671,671,,,671,,890,,890,890,890,,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,626,626',
+'671,,626,,,,,,,,626,626,,626,626,626,626,626,626,626,,,626,626,,,,626',
+'626,626,626,,,,,,626,,,,,,,,626,626,,626,626,626,626,626,626,626,626',
+'626,626,626,626,225,225,626,,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,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,627',
+'627,226,,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,547,547,627,,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,475,475,547,,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',
+'1152,1152,475,,1152,,,,,,,,1152,1152,,1152,1152,1152,1152,1152,1152',
+'1152,,,1152,1152,,,,1152,1152,1152,1152,,,,,,1152,,,,,,,,1152,1152,',
+'1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,633,633',
+'1152,,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,556,556,633,,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,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,546',
+'546,557,,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,634,634,546,,634,,,,,,,,634,634,,634,634,634,634',
+'634,634,634,,,634,634,,,,634,634,634,634,,,,,,634,,,,,,,,634,634,,634',
+'634,634,634,634,634,634,634,634,634,634,634,1156,1156,634,,1156,,,,',
+',,,1156,1156,,1156,1156,1156,1156,1156,1156,1156,,,1156,1156,,,,1156',
+'1156,1156,1156,,,,,,1156,,,,,,,,1156,1156,,1156,1156,1156,1156,1156',
+'1156,1156,1156,1156,1156,1156,1156,476,476,1156,,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,1157',
+'1157,476,,1157,,,,,,,,1157,1157,,1157,1157,1157,1157,1157,1157,1157',
+',,1157,1157,,,,1157,1157,1157,1157,,,,,,1157,,,,,,,,1157,1157,,1157',
+'1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,672,672,1157',
+',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,,641,672,641,641,641,641,641,,1180,,1180,1180,1180,1180',
+'1180,641,,,,,,,,1180,,,,,,,,,,,,,,641,,,,,,,,1180,641,641,641,641,,',
+',641,1180,1180,1180,1180,,,,1180' ]
+ racc_action_check = arr = ::Array.new(28007, nil)
+ idx = 0
+ clist.each do |str|
+ str.split(',', -1).each do |i|
+ arr[idx] = i.to_i unless i.empty?
+ idx += 1
+ end
+ end
+
+racc_action_pointer = [
+ nil, 1349, 3855, 739, nil, 401, nil, 5413, 1392, 558,
+ 24440, 24312, 556, nil, 509, 438, 592, 429, 800, 605,
+ nil, -69, 5675, 1263, 24824, 307, nil, 803, nil, 254,
+ 5947, 6057, 6191, 6322, 6453, nil, 2703, 23109, 23895, nil,
+ 175, 466, 569, 146, 6715, 6846, -44, 6977, 7108, 975,
+ 7239, 45, 185, 323, 1112, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 7380, nil, 7521, 7652, 7783, 199,
+ nil, 7914, 8045, nil, nil, 8176, 22585, 23502, 23764, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 529, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 830, nil,
+ nil, 110, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 8319, nil, nil, nil, nil, 8462,
+ 8593, 8724, 5138, 8998, nil, 2847, nil, -1, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 1400, nil, 1983, 21406,
+ 21537, 21668, 21799, 21930, 22061, 26978, 27039, nil, nil, 22192,
+ 22323, 9129, nil, nil, 1135, 443, 389, 1466, 119, 1349,
+ 1407, nil, 9260, 5007, 1374, nil, nil, 9391, 9522, 9653,
+ 9784, 9915, 10046, 10177, 10308, 10439, 10570, 10701, 10832, 10963,
+ 11094, 11225, 11356, 11487, 11618, 11749, 11880, 12011, 12142, nil,
+ nil, nil, nil, 12273, nil, nil, 768, 698, 670, 669,
+ 658, 556, 523, 417, 306, -62, nil, nil, nil, 13059,
+ nil, nil, 5279, nil, nil, 1260, 13321, 13452, nil, nil,
+ nil, nil, nil, nil, nil, 13583, nil, 2271, nil, 1207,
+ 1190, nil, 13845, 1232, 13976, nil, nil, 14107, 14238, nil,
+ nil, 72, nil, 14381, 960, 1178, 1144, 3423, 1158, 1186,
+ 1142, 24034, 2991, 228, 300, 409, 1216, 802, nil, 1172,
+ 1126, 275, 1160, 1156, nil, nil, nil, 1149, 255, 1099,
+ 22978, nil, 327, 968, 3999, 3855, 1165, nil, 1160, 15429,
+ nil, 15560, 1068, 4431, 1057, nil, 607, 24910, 1055, 4143,
+ 3999, 738, 1067, nil, 748, 730, 1081, 1049, 492, 1071,
+ nil, 772, 179, 35, 16215, 3135, 2559, 400, 1127, 993,
+ 57, 40, 692, 1050, -18, 1078, nil, nil, 966, 479,
+ 372, nil, 1108, nil, 980, 16608, nil, 26698, nil, 395,
+ 398, 641, 506, 401, -32, -34, 606, nil, nil, nil,
+ nil, nil, nil, nil, 966, 24696, nil, nil, nil, nil,
+ 961, nil, 1030, 931, 18204, 929, nil, nil, 911, nil,
+ 889, 15, 1011, nil, nil, 1407, nil, nil, nil, nil,
+ nil, 1695, 858, nil, 854, 841, 526, 511, 19000, nil,
+ nil, nil, 720, 610, 865, nil, nil, 19275, 19411, nil,
+ nil, nil, 212, nil, 837, 27222, 27710, 19941, 345, 20203,
+ 20334, 20465, 26016, 26506, 4431, 4719, 1014, 853, 783, 782,
+ 775, 770, 5138, 5413, 5230, 4863, 3711, 4575, 3567, 3279,
+ 3423, 3110, 3019, 3135, 4143, 1983, 5007, nil, 231, nil,
+ 5279, nil, nil, nil, nil, 8855, 654, 668, 689, nil,
+ nil, nil, 694, nil, nil, 21275, nil, 21144, nil, 21013,
+ nil, 392, nil, nil, nil, 20870, 907, nil, 729, 731,
+ nil, nil, 735, 23633, 744, 20727, 27527, 27161, 798, 787,
+ nil, nil, 23240, 750, nil, 20596, 27405, 27466, 20072, 4287,
+ 2559, 19810, 19679, 878, 879, nil, nil, 759, 757, 762,
+ 761, 778, nil, 782, 788, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 777, 961, nil, nil, 19548, nil,
+ nil, nil, 232, nil, nil, nil, 878, nil, nil, 880,
+ 219, 820, 19134, 949, 960, 840, 881, nil, 18859, nil,
+ nil, 18728, nil, nil, nil, 1551, 972, nil, 1695, -14,
+ 980, 1002, 38, 1035, 18597, 18466, 26917, 27100, 7, nil,
+ nil, 958, nil, 27344, 27588, 18335, nil, nil, 189, 2415,
+ nil, 27894, nil, nil, nil, nil, 1362, nil, nil, nil,
+ 946, nil, nil, 322, nil, 357, nil, nil, 935, nil,
+ 937, nil, nil, nil, 24568, nil, 18073, 944, 17930, 17799,
+ 17668, 26856, 27832, 17537, 17394, 442, 987, 17263, 17132, 17001,
+ 16870, 990, nil, nil, 16739, 16477, 992, nil, nil, nil,
+ 251, -56, 332, 471, 959, 1007, nil, 992, nil, nil,
+ 416, 25819, -84, nil, 646, nil, nil, 7380, 26645, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 1056, 534, nil, 1039, 995, 25638, nil, 1122, nil, 1105,
+ 173, nil, nil, 16346, nil, 1031, 1036, 1137, nil, 1022,
+ nil, 1069, 16084, nil, nil, 15953, nil, 247, 22716, 1027,
+ nil, 1031, 105, 343, 1099, 246, 875, 1101, 1058, 22847,
+ nil, 1127, -26, 1839, 1184, 15822, nil, nil, 717, nil,
+ nil, 1296, nil, nil, 649, 25204, nil, 23942, nil, 15691,
+ nil, 3006, nil, 1073, 1075, 1170, 1079, nil, nil, nil,
+ nil, nil, nil, 25008, 1551, nil, nil, nil, nil, 702,
+ 240, nil, 1201, nil, nil, nil, nil, nil, 1208, 1209,
+ nil, nil, 26, 1100, 39, 31, -1, 8, 975, 1110,
+ 964, nil, 1103, 1119, 15298, nil, 1237, -23, 1121, nil,
+ nil, nil, nil, nil, 1263, nil, nil, nil, nil, nil,
+ nil, nil, nil, 1127, 15167, 1140, 252, -85, 220, 0,
+ nil, 2127, 15036, nil, 1139, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 14905, 14774, 14643, 14512, 417,
+ 1228, 26408, 121, 152, 26310, 26212, 441, -68, 1169, 1170,
+ nil, 26114, nil, 1169, 1171, 1254, 1187, nil, 1193, 25918,
+ 26777, 26743, nil, nil, nil, nil, nil, 13714, nil, nil,
+ 1234, nil, nil, 1231, 1217, nil, nil, 539, 3567, nil,
+ nil, nil, nil, 1220, 291, nil, nil, 13190, 1349, nil,
+ 4287, 1226, 1280, nil, nil, 1245, nil, 1243, 1244, nil,
+ 1249, nil, 1336, nil, 1255, 1256, nil, 1257, nil, nil,
+ 1263, 2977, 3016, nil, nil, 12928, nil, 1388, nil, 12797,
+ 1389, nil, nil, 25721, 12666, 4719, 10, 1395, nil, 1396,
+ 451, 4863, nil, nil, nil, nil, 1279, 1333, 1316, 1311,
+ 113, nil, nil, 12535, 12404, nil, nil, nil, nil, 1316,
+ 1317, 1318, 1316, nil, nil, 25103, nil, nil, 2, nil,
+ nil, 1337, 1354, 1357, nil, nil, nil, 1401, 1358, -48,
+ nil, 24907, nil, 1366, nil, nil, -31, nil, nil, 2703,
+ 1407, nil, nil, 1364, 1367, nil, 1368, 1370, 1373, nil,
+ 1402, 1389, 1375, 22454, nil, nil, nil, 2847, nil, 1839,
+ nil, nil, 36, 24173, nil, nil, 25822, nil, 25400, nil,
+ nil, 25302, nil, 24081, nil, nil, nil, nil, 1393, 1398,
+ 2415, nil, -10, nil, 136, 575, -83, nil, nil, nil,
+ nil, 216, nil, nil, nil, 1523, 2127, 2271, 2113, nil,
+ nil, nil, nil, nil, 1043, 1447, 325, nil, nil, nil,
+ nil, nil, nil, 1404, 25005, 1406, nil, nil, 329, nil,
+ nil, 1584, nil, nil, 25921, nil, nil, 26019, nil, 25708,
+ nil, nil, -82, 23371, 1102, -22, nil, 4575, 32, 9,
+ 991, 167, 79, nil, 106, 136, 151, 168, 3215, 3045,
+ 3279, nil, 6584, 5806, 26604, nil, nil, nil, nil, 239,
+ 354, 542, nil, nil, nil, nil, nil, nil, 25201, 245,
+ 25397, 253, nil, nil, 255, 287, 296, 324, nil, 356,
+ nil, 841, 27283, nil, 499, 5544, 27649, 27771, 33, 25498,
+ nil, nil, nil, nil, 399, 628, 3711, nil, nil, nil,
+ 427, nil, nil, nil, 1969, 437, 25495, nil, nil, nil,
+ 27902, nil, 26509, nil, 26411, nil, 26117, nil, nil, 520,
+ 531, nil, 518, 145, 146, 142, 39, 541, nil, 35,
+ 25299, nil, 557, 566, 576, 593, 143, nil, nil, nil,
+ nil, 625, 25106, nil, nil, nil, nil, 631, nil ]
+
+racc_action_default = [
+ -1, -729, -4, -729, -2, -714, -5, -729, -8, -729,
+ -729, -729, -729, -31, -729, -729, -36, -729, -729, -305,
+ -48, -716, -729, -57, -729, -65, -66, -67, -71, -282,
+ -282, -282, -318, -345, -346, -83, -13, -87, -95, -97,
+ -729, -611, -612, -729, -729, -729, -729, -729, -729, -235,
+ -729, -716, -626, -626, -253, -296, -297, -298, -299, -300,
+ -301, -302, -303, -304, -702, -307, -311, -728, -692, -326,
+ -328, -729, -729, -59, -59, -714, -729, -729, -729, -347,
+ -348, -350, -351, -352, -353, -410, -551, -552, -553, -554,
+ -575, -557, -558, -577, -579, -562, -567, -571, -573, -589,
+ -590, -591, -575, -593, -595, -596, -597, -598, -700, -600,
+ -601, -701, -603, -604, -605, -606, -607, -608, -609, -610,
+ -615, -616, 1219, -3, -715, -724, -725, -726, -7, -729,
+ -729, -729, -729, -729, -9, -4, -19, -729, -126, -127,
+ -128, -129, -130, -131, -132, -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, -200,
+ -201, -202, -203, -204, -205, -206, -24, -133, -13, -729,
+ -729, -729, -729, -729, -272, -729, -729, -712, -713, -729,
+ -729, -716, -717, -52, -729, -611, -612, -729, -305, -729,
+ -729, -241, -729, -13, -729, -53, -55, -218, -219, -729,
+ -729, -729, -729, -729, -729, -729, -729, -729, -729, -729,
+ -729, -729, -729, -729, -729, -729, -729, -729, -729, -254,
+ -255, -256, -257, -729, -61, -62, -729, -126, -127, -166,
+ -167, -168, -184, -189, -196, -199, -611, -612, -690, -729,
+ -419, -421, -729, -710, -711, -72, -272, -729, -325, -425,
+ -434, -436, -78, -431, -79, -716, -80, -260, -277, -286,
+ -286, -281, -729, -287, -729, -575, -694, -729, -729, -81,
+ -82, -714, -14, -729, -17, -729, -85, -13, -716, -729,
+ -88, -91, -13, -103, -104, -729, -729, -111, -318, -321,
+ -716, -729, -626, -626, -345, -346, -349, -432, -729, -93,
+ -729, -99, -315, -729, -220, -221, -594, -229, -230, -729,
+ -242, -729, -729, -13, -625, -621, -648, -648, -729, -13,
+ -13, -309, -716, -261, -721, -721, -729, -729, -721, -729,
+ -327, -58, -729, -729, -729, -13, -13, -714, -729, -715,
+ -611, -612, -729, -729, -305, -729, -363, -364, -121, -122,
+ -729, -124, -729, -305, -619, -729, -341, -648, -555, -729,
+ -729, -729, -729, -729, -729, -729, -729, -6, -727, -25,
+ -26, -27, -28, -29, -729, -729, -21, -22, -23, -134,
+ -729, -32, -35, -292, -729, -729, -291, -33, -729, -37,
+ -729, -305, -45, -47, -207, -265, -287, -49, -50, -38,
+ -208, -265, -716, -273, -286, -286, -703, -704, -282, -429,
+ -705, -706, -704, -703, -282, -428, -430, -705, -706, -44,
+ -215, -51, -716, -324, -729, -729, -729, -272, -315, -729,
+ -729, -729, -729, -729, -216, -217, -222, -223, -224, -225,
+ -226, -227, -231, -232, -233, -234, -236, -237, -238, -239,
+ -240, -243, -244, -245, -246, -716, -258, -63, -716, -440,
+ -282, -703, -704, -69, -73, -649, -716, -286, -716, -283,
+ -438, -440, -716, -320, -278, -729, -279, -729, -284, -729,
+ -288, -729, -697, -699, -12, -715, -16, -18, -716, -84,
+ -313, -100, -89, -729, -716, -272, -729, -729, -110, -729,
+ -625, -594, -729, -96, -101, -729, -729, -729, -729, -259,
+ -247, -729, -729, -543, -729, -376, -377, -716, -633, -716,
+ -689, -689, -631, -633, -633, -647, -649, -650, -651, -652,
+ -653, -654, -655, -656, -657, -729, -659, -661, -663, -668,
+ -670, -671, -674, -679, -681, -682, -684, -685, -686, -729,
+ -729, -633, -729, -729, -729, -716, -729, -262, -723, -722,
+ -264, -723, -316, -317, -693, -13, -354, -355, -13, -729,
+ -729, -729, -729, -729, -729, -272, -729, -729, -315, -59,
+ -121, -122, -123, -729, -729, -272, -337, -617, -729, -13,
+ -411, -648, -414, -556, -576, -581, -729, -583, -559, -578,
+ -729, -580, -561, -729, -564, -729, -566, -569, -729, -570,
+ -729, -592, -10, -20, -729, -30, -729, -295, -729, -729,
+ -272, -729, -729, -729, -729, -433, -729, -274, -276, -729,
+ -729, -74, -271, -426, -729, -729, -76, -427, -323, -718,
+ -703, -704, -703, -704, -716, -54, -460, -462, -464, -467,
+ -524, -716, -479, -482, -517, -522, -523, -729, -729, -527,
+ -528, -529, -530, -531, -532, -533, -534, -535, -536, -537,
+ -729, -729, -541, -56, -729, -729, -691, -729, -441, -68,
+ -422, -438, -267, -274, -269, -729, -400, -729, -319, -286,
+ -285, -289, -729, -695, -696, -729, -15, -86, -729, -92,
+ -98, -716, -703, -704, -270, -707, -109, -729, -94, -729,
+ -214, -228, -716, -249, -728, -728, -343, -622, -729, -640,
+ -624, -729, -629, -630, -729, -729, -643, -729, -645, -729,
+ -365, -729, -367, -369, -372, -375, -716, -662, -672, -673,
+ -683, -687, -627, -729, -251, -344, -308, -310, -312, -721,
+ -728, -356, -728, -60, -357, -358, -331, -332, -729, -729,
+ -446, -334, -729, -716, -703, -704, -707, -314, -13, -121,
+ -122, -125, -716, -13, -729, -339, -729, -729, -716, -582,
+ -585, -586, -587, -588, -13, -560, -563, -565, -568, -572,
+ -574, -135, -34, -293, -729, -716, -703, -704, -704, -703,
+ -46, -266, -729, -719, -286, -40, -210, -41, -211, -75,
+ -42, -213, -43, -212, -77, -729, -729, -729, -729, -433,
+ -729, -729, -465, -466, -729, -729, -729, -484, -716, -716,
+ -478, -485, -491, -729, -494, -498, -729, -481, -729, -729,
+ -520, -521, -525, -526, -538, -122, -539, -729, -64, -420,
+ -400, -424, -423, -729, -716, -435, -401, -716, -13, -437,
+ -280, -290, -698, -90, -433, -102, -322, -729, -728, -361,
+ -13, -544, -728, -545, -546, -716, -632, -633, -633, -660,
+ -689, -669, -674, -688, -633, -633, -680, -633, -657, -675,
+ -716, -729, -729, -374, -658, -729, -263, -729, -359, -729,
+ -729, -333, -335, -729, -729, -13, -433, -729, -433, -729,
+ -729, -13, -342, -412, -415, -417, -404, -729, -729, -294,
+ -433, -39, -209, -275, -729, -461, -463, -471, -475, -716,
+ -716, -716, -503, -505, -506, -509, -510, -575, -513, -515,
+ -516, -716, -716, -716, -540, -476, -477, -501, -486, -489,
+ -492, -729, -497, -716, -575, -720, -716, -518, -519, -248,
+ -13, -70, -268, -689, -689, -381, -383, -383, -383, -399,
+ -729, -716, -657, -665, -666, -677, -439, -250, -11, -13,
+ -550, -362, -729, -729, -548, -623, -729, -636, -729, -638,
+ -628, -729, -641, -729, -644, -646, -366, -368, -370, -373,
+ -252, -329, -729, -330, -729, -451, -454, -457, -458, -459,
+ -289, -728, -336, -338, -618, -729, -13, -13, -729, -413,
+ -584, -468, -469, -470, -504, -508, -729, -512, -514, -472,
+ -473, -474, -493, -487, -729, -495, -499, -480, -729, -483,
+ -442, -729, -379, -380, -384, -390, -392, -729, -395, -729,
+ -397, -402, -729, -729, -664, -729, -549, -13, -611, -612,
+ -729, -729, -305, -547, -633, -633, -633, -633, -729, -729,
+ -13, -447, -729, -729, -455, -443, -444, -445, -340, -729,
+ -729, -716, -406, -408, -409, -502, -507, -511, -729, -490,
+ -729, -689, -667, -382, -383, -383, -383, -383, -678, -383,
+ -403, -676, -729, -315, -543, -272, -729, -729, -315, -729,
+ -634, -637, -639, -642, -371, -728, -13, -452, -453, -456,
+ -494, -416, -418, -405, -729, -488, -729, -496, -500, -378,
+ -729, -387, -729, -389, -729, -393, -729, -396, -398, -314,
+ -707, -542, -716, -703, -704, -707, -314, -633, -360, -728,
+ -729, -407, -383, -383, -383, -383, -433, -635, -448, -449,
+ -450, -495, -729, -385, -388, -391, -394, -383, -386 ]
+
+clist = [
+'42,141,141,225,291,42,330,230,623,275,274,380,293,809,409,141,308,308',
+'308,346,346,124,287,458,464,127,416,382,383,365,365,387,764,526,42,334',
+'334,361,309,309,309,436,437,452,373,514,743,518,878,144,144,772,773',
+'342,342,632,584,584,346,346,346,947,233,918,42,8,134,136,217,123,8,385',
+'386,374,391,287,287,310,310,310,349,299,303,449,928,419,420,421,422',
+'469,510,934,342,342,342,127,929,584,564,356,329,950,615,618,603,604',
+'343,343,930,928,607,610,375,378,614,516,443,569,15,443,887,929,42,15',
+'326,443,936,328,1085,371,743,42,932,42,567,600,879,369,735,388,1047',
+'1017,575,575,908,343,343,343,740,292,740,4,15,553,295,302,304,786,967',
+'1049,1134,128,695,723,306,319,320,1148,927,649,651,654,654,1132,1170',
+'642,1032,568,526,892,893,2,15,575,550,550,1028,8,981,993,1177,727,396',
+'927,653,655,423,743,8,746,1003,404,406,737,362,368,216,397,308,432,425',
+'1139,482,483,803,276,42,468,725,475,731,979,991,1018,664,435,435,359',
+'376,730,288,377,395,636,370,988,988,1020,605,531,15,42,808,372,823,961',
+'639,988,1048,15,1148,15,998,1019,1095,1021,1131,640,963,431,442,293',
+'407,442,827,1175,1134,1059,1066,442,1067,509,520,458,464,521,900,459',
+'417,1201,308,308,430,1125,424,1054,1208,953,821,308,1166,1055,1058,975',
+'976,874,694,875,886,889,740,740,517,309,1135,1136,922,329,1010,980,992',
+'309,1,346,988,408,410,780,1047,554,546,42,411,412,413,42,549,1211,1144',
+'334,42,584,346,414,15,1164,438,535,556,438,619,127,310,415,754,438,749',
+'342,334,903,310,1102,1114,940,754,758,740,829,606,15,1126,42,1007,1008',
+'751,834,342,42,42,824,931,929,1086,542,826,1142,896,626,,,,877,537,42',
+'42,534,536,936,1057,776,778,329,,299,,,329,,507,303,343,551,,,,,,127',
+',828,1145,1040,837,1146,837,326,141,575,538,343,326,1087,929,544,754',
+'671,1198,369,1141,519,,859,754,,,988,864,522,676,15,,,,15,813,,,,15',
+'620,621,622,932,,822,1086,,,584,,,308,910,,144,584,,468,,458,464,1169',
+',29,,,,,29,15,717,717,663,584,904,15,15,,,845,,724,743,29,1092,1093',
+'1202,,1209,,,15,15,29,29,29,,29,,1086,682,1178,554,780,929,,687,943',
+',925,,554,,,,346,,459,,308,,994,955,42,346,946,,29,468,855,857,334,29',
+'29,860,862,29,1178,468,,334,913,,,877,877,,,959,342,,,682,,,443,,,342',
+'1006,739,1086,,,,443,443,910,,,443,443,,681,,,935,923,937,686,1210,',
+',,,29,740,1022,459,,29,29,29,29,29,,29,,459,308,,,343,42,,,42,,468,308',
+'792,343,1179,1191,468,,,818,,933,812,,933,1056,,729,,42,,804,,,,,,,',
+',675,,,15,,799,308,141,,,825,,,,,468,42,1075,,,,,,42,902,780,780,,,',
+'459,800,676,1127,802,,,,459,676,888,29,29,29,29,29,29,29,1065,,,717',
+'29,29,29,144,,717,717,,901,442,898,274,971,,29,,141,554,1016,442,442',
+'841,854,459,442,442,584,,915,842,346,15,,,15,,850,676,,,,346,924,1037',
+'1039,1090,334,,443,,1042,1044,1107,1045,,15,,334,,,29,,,,342,1015,,29',
+'29,,,435,1120,,1121,342,29,,854,,960,,15,,1022,438,,1022,,15,,,,,29',
+'438,438,,29,676,438,438,1130,29,877,,682,,676,687,,,,,966,,42,343,,',
+',42,,,,,,,343,,,676,42,,29,,,,,,29,29,,,,,,1115,,1116,780,780,1117,',
+',29,29,29,,676,,,,,676,676,,,,717,1022,,717,717,,,29,450,,717,,,957',
+'470,,,,717,717,717,869,,442,966,,1030,,880,968,1034,,,,381,381,1052',
+'42,381,1147,,1149,1076,,,,,,,42,,,,,,,,,,1088,,1160,1161,1162,1163,15',
+',,,,15,,,,,,,,914,29,933,15,717,1015,42,754,1015,,1015,,42,,381,381',
+'381,381,,,,438,,1197,,1026,,1192,,,676,676,676,1064,,,717,1031,,,,,888',
+',1203,,1204,,1205,,,,717,,,,,,346,29,966,42,956,,,,1207,,346,29,,958',
+'1061,,287,,1217,15,,,42,,,,1109,29,,,1023,15,,1015,342,1015,970,1015',
+',1015,,,,,342,,,1014,447,448,,,,,,,,471,472,42,42,,,,978,1015,15,,,995',
+'996,,15,1167,1168,,,717,,,346,29,,,29,,,343,1106,,1156,29,,,,,287,343',
+',,42,29,,,,29,,,,,,,1173,42,342,,508,717,,,,15,18,,,1129,,18,470,,450',
+'717,29,717,308,29,29,,468,29,15,,234,468,1113,29,29,,,,29,29,234,234',
+'234,,18,335,335,42,,,,,,,1154,343,,717,,,,676,,,,15,15,1165,,,1079,1080',
+'1081,,18,,,,,234,234,717,,234,392,402,402,,,,,459,760,,,,,718,718,381',
+',,1023,,,1023,15,,1023,,1023,17,,1199,,,17,,,15,638,,1014,,,1014,,1014',
+',,,,18,,,,,234,234,234,234,18,,18,,17,,,,,,,,,,1096,1098,1100,,,,,,',
+',15,,,,,,,29,,,17,,29,29,,,,,,,,,,29,,,1023,,1023,,1023,,1023,,,,,,',
+',,29,,1014,379,1014,,1014,,1014,,856,858,,,,861,863,1023,,,18,234,440',
+'234,234,440,234,17,,,,440,234,234,1014,,17,,17,,,,,,,18,,,,,,,,,,,29',
+',,,,,,,,1206,,,29,,762,,,,,,,1181,1183,1185,1187,,1188,,,,,,,,,234,',
+',,,,29,234,234,,,,29,,,,234,,29,718,473,,,,,718,718,,,,17,,17,,18,17',
+',,18,,,17,335,18,1213,1214,1215,1216,,,,,,,,17,,,,1218,,335,,433,446',
+',,29,,,,,,,18,,,,,,18,18,,,,,29,,,,,,972,41,523,234,18,18,41,,,,,,,856',
+'858,863,861,,,,,,,286,234,539,,,,,,29,29,,,41,333,333,,,,,,17,,,,17',
+',,,,17,,,,,,,,,,,,528,41,530,,,532,533,,29,,,390,286,286,,,,,,17,,29',
+',29,29,17,17,,,,,,234,718,,,718,718,,,,17,17,718,,,,,,,,718,718,718',
+',,29,,972,41,,,,,,,,29,41,,41,,,,,,,,,,,,,,,,381,,,,18,,,,,,,,335,,234',
+',,,,688,,335,,,,,,,,718,234,,,,,,667,,,,,,,,,,,,,,,,,,,726,,,,,,718',
+',732,,734,,41,,738,,,,,,,,718,,,,,,,18,747,,18,,,,750,41,,234,,,,,,',
+',,,234,17,,,18,,,,712,712,767,,770,,,,,,,,,381,,741,,379,,744,,,,18',
+',,440,234,,,18,,,,,,440,440,,,797,440,440,,,,,,718,,,,,,,,,,,,41,,,',
+'41,,,,333,41,,,,17,,,17,,787,,,,,,,,,333,718,,,,,,,,,17,741,,41,379',
+'718,,718,335,41,41,,,,,,,446,,335,,,,,,41,41,17,,,17,,,,17,,,,,,17,17',
+',718,,17,17,711,711,,,,,,,,,,,,,843,,,,,,718,,,741,379,,,,,,,18,,,,',
+'18,234,,,,,381,381,,,,18,,,,,,916,,,,,,,,,,,,440,,,,,,,,,,712,,944,',
+'741,,712,712,,,,,,911,,,912,,,,,,,,,,,,,,,,19,,,,921,19,,,,,,,,,18,',
+',,939,,,41,,,,17,18,,,333,17,,,,19,337,337,,333,,,17,,,,,,,,,,,,,,234',
+'977,,,17,,18,,,19,,,18,,,,,,,394,403,403,,,,,,,969,,,,,1012,,,,,,,,',
+',,,,41,,,41,,,,,1035,,,711,,,17,18,,711,711,,,19,,1046,41,,17,,1104',
+',19,,19,,18,,,712,1110,,712,712,,,,,,712,,,,41,,,,712,712,712,41,,,17',
+'1071,1072,1073,,,17,,,,18,18,,,,,,,,,,,,,,,,,1089,,,1060,,,,,,,,,,,',
+',,,,1151,710,710,379,18,,,19,17,441,,712,441,,,,,18,441,234,234,,709',
+'709,,333,,17,,,,,19,,,,333,,,,,,,712,,,,,,,,,234,,,,,,,712,,,,18,17',
+'17,,,,,,713,713,711,,,711,711,,,,,,711,,,,,,,,711,711,711,,41,,,,,41',
+',,,,17,,,,,,41,19,,,,19,,17,,337,19,,,,,,,,,,,,,,,,,,337,,,712,,,,32',
+',,,,32,19,,,711,,,19,19,,,,,17,,32,,,,,,,,19,19,32,32,32,,32,,712,,',
+'41,,711,,,,,,,,,712,41,712,,,,,711,,,,,,,32,,,,,32,32,,,32,710,,,,,',
+'710,710,,,,,41,,712,,,,41,,,709,,,,,,709,709,,,,,,,,,,712,,,,,715,715',
+',,,32,,,,,32,32,32,32,32,,32,,,,,,,711,41,,,713,,,,,,713,713,,,286,',
+',,,,41,,,,1108,,,,,,,,,,,,,,19,,711,,,,,,337,,,,,,,,711,337,711,41,41',
+',,,,,,,,,,,,,,,,,32,32,32,32,32,32,32,,,,,32,32,32,,,711,,286,,,,41',
+',,32,,,710,,,710,710,,,41,,,710,,711,,19,,,19,710,710,710,709,,,709',
+'709,,,,,,709,,,,,,,19,709,709,709,,32,,833,,,,,32,32,,41,,,,,,32,,,',
+',,19,,,441,,713,,19,713,713,,,32,441,441,713,32,710,441,441,,32,,713',
+'713,713,,715,,,,,,715,715,,,,709,,,,,,,,,,,710,,,32,,,,,,32,32,,,,,',
+'710,,,,,709,,,32,32,32,,,,,,,337,,,,709,713,,,,,,337,32,,,,,,,,,,,,',
+',,,,,,,,,,,,713,,,,,,,,,,,,,,,,713,,,,,,,,,,,,,710,,,,19,,,,,19,,,,',
+',,,,32,,19,709,,,,,,,,,,,,,,,,,441,,710,,,,,716,716,,,715,,,715,715',
+'710,,710,,,715,,709,,,,,,715,715,715,713,,,,,709,32,709,,,,,,,714,714',
+'32,,,,,,710,,19,,,,,,,,32,,,,19,,,,713,,,709,,,710,,,,,,,,713,,713,',
+',,,715,,,,,,709,,,,19,,,,,,19,,,,,,,,,32,,,32,,,713,715,,,32,,,,,,241',
+',,,32,,,715,32,,307,307,307,,713,,,,,,,,354,355,19,357,358,,360,,,,',
+',,32,,403,32,32,,,32,19,,307,307,1112,32,32,,,,32,32,,,,,,,,,,,,,,,',
+',,,,,,,,,,19,19,,,,,,,,,715,,716,,,,,,716,716,,,,,,,,,,,,,,,,,,403,',
+',,19,,,,,,,,,715,714,,,19,,,714,714,,,,,,715,,715,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,19,,715,,,,,32,,,,,32,32,,,,307,445,,,451,307,32,,,715',
+'451,,,,,,,,,,,,,241,32,,,,484,485,486,487,488,489,490,491,492,493,494',
+'495,496,497,498,499,500,501,502,503,504,505,,,,,506,,,,,,,,,,,716,,',
+'716,716,,,,,,716,,307,307,,32,,,716,716,716,307,,,,,,32,307,,307,,,307',
+'307,,,,,714,,,714,714,,,,,,714,,,,,,,32,714,714,714,,,32,,,,,,32,,,',
+',,,559,,560,,,,,716,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,716,,,32,,,,714,',
+',,,,,,,716,,,,,,32,,,,,,,,,,,,,,307,,,714,,,,,,,,,,,,,,,,714,,,,32,32',
+',,,,,,,,,,,,,,,,,,307,,451,451,451,,,,,,,,,,,,,,,,716,32,,,,,,,,,,,',
+',32,,32,32,355,,,,,,,,,,307,,307,,307,,,,,,,714,716,,,,,,,,307,32,,',
+',,716,,716,,451,,32,761,,,,763,,,,,,,,,,,,,,714,,,,,,,,,,,,307,716,714',
+',714,,,,,,,,,,794,,,,,,307,,,307,,716,,,,,,,,,,,307,307,,,714,,,,,,',
+'307,,,,,,,,,,,,,,,,,714,,,,,,,,,,,,,,,,307,451,307,,,,851,,,307,307',
+'451,451,,,,451,451,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,307',
+',,,,,,,,307,,,307,,,,,,,,,,,,,,,,,,,,307,,,,,,,,,,,,,,307,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,307,,,,,,,,451',
+',,,,,,,,,,,,451,451,451,451,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1009,,,,,,,',
+',,,,,,,,,,,,1027,,,,,,,,,,,,,,,,,,,,,,,,,,,,1050,,,,,,,,,307,,,,,,,',
+',,,,,,,,,,,307,451,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,307' ]
+ racc_goto_table = arr = ::Array.new(4137, 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 = [
+'71,74,74,33,154,71,67,35,111,42,44,106,33,112,194,74,51,51,51,82,82',
+'7,71,54,54,116,194,19,19,86,86,19,12,93,71,71,71,35,87,87,87,24,24,31',
+'86,56,233,91,171,76,76,135,135,45,45,72,224,224,82,82,82,110,22,13,71',
+'8,9,17,17,5,8,40,40,87,71,71,71,89,89,89,68,90,90,28,142,19,19,19,19',
+'28,54,142,45,45,45,116,225,224,10,79,11,13,109,109,10,10,47,47,131,142',
+'88,88,89,89,88,31,20,91,23,20,183,225,71,23,63,20,229,64,188,8,233,71',
+'196,71,153,153,172,118,57,5,125,141,219,219,143,47,47,47,94,49,94,2',
+'23,69,55,55,55,127,145,128,148,6,37,37,62,62,62,230,223,209,209,209',
+'209,147,189,153,201,140,93,198,198,3,23,219,218,218,14,8,174,174,189',
+'157,23,223,208,208,8,233,8,16,174,73,73,157,81,81,18,21,51,25,27,188',
+'38,39,41,48,71,74,50,33,59,171,171,142,77,87,87,83,85,92,104,105,113',
+'115,119,196,196,145,120,194,23,71,111,121,122,123,124,196,129,23,230',
+'23,187,133,138,139,146,149,150,22,22,33,151,22,152,188,148,174,155,22',
+'156,158,160,54,54,161,164,90,6,147,51,51,11,165,2,166,167,168,72,51',
+'169,170,173,176,178,179,31,180,184,185,94,94,87,87,191,192,200,11,143',
+'172,172,87,1,82,196,204,205,126,125,67,33,71,206,207,210,71,35,188,141',
+'71,71,224,82,211,23,128,23,7,33,23,19,116,89,212,54,23,69,45,71,57,89',
+'145,142,127,54,69,94,213,35,23,13,71,198,198,31,214,45,71,71,217,227',
+'225,187,68,10,228,72,33,,,,37,9,71,71,5,8,229,172,222,222,11,,90,,,11',
+',49,90,47,79,,,,,,116,,153,142,135,209,142,209,63,74,219,64,47,63,183',
+'225,64,54,33,110,118,131,62,,56,54,,,196,56,62,35,23,,,,23,31,,,,23',
+'11,11,5,196,,31,187,,,224,,,51,93,,76,224,,74,,54,54,171,,58,,,,,58',
+'23,71,71,17,224,91,23,23,,,31,,35,233,58,135,135,142,,13,,,23,23,58',
+'58,58,,58,,187,90,187,67,126,225,,90,126,,91,,67,,,,82,,90,,51,,72,109',
+'71,82,88,,58,74,28,28,71,58,58,28,28,58,187,74,,71,69,,,37,37,,,10,45',
+',,90,,,20,,,45,37,89,187,,,,20,20,93,,,20,20,,55,,,140,24,140,55,112',
+',,,,58,94,224,90,,58,58,58,58,58,,58,,90,51,,,47,71,,,71,,74,51,116',
+'47,135,12,74,,,40,,136,87,,136,37,,55,,71,,116,,,,,,,,,32,,,23,,89,51',
+'74,,,116,,,,,74,71,37,,,,,,71,106,126,126,,,,90,11,35,111,11,,,,90,35',
+'35,58,58,58,58,58,58,58,10,,,71,58,58,58,76,,71,71,,154,22,42,44,28',
+',58,,74,67,140,22,22,17,89,90,22,22,224,,67,8,82,23,,,23,,8,35,,,,82',
+'86,222,222,10,71,,20,,222,222,109,222,,23,,71,,,58,,,,45,136,,58,58',
+',,87,109,,109,45,58,,89,,19,,23,,224,23,,224,,23,,,,,58,23,23,,58,35',
+'23,23,10,58,37,,90,,35,90,,,,,35,,71,47,,,,71,,,,,,,47,,,35,71,,58,',
+',,,,58,58,,,,,,140,,140,126,126,140,,,58,58,58,,35,,,,,35,35,,,,71,224',
+',71,71,,,58,78,,71,,,11,78,,,,71,71,71,32,,22,35,,86,,32,11,86,,,,26',
+'26,19,71,26,140,,140,194,,,,,,,71,,,,,,,,,,194,,222,222,222,222,23,',
+',,,23,,,,,,,,32,58,136,23,71,136,71,54,136,,136,,71,,26,26,26,26,,,',
+'23,,140,,11,,31,,,35,35,35,116,,,71,11,,,,,35,,140,,140,,140,,,,71,',
+',,,,82,58,35,71,32,,,,222,,82,58,,32,11,,71,,140,23,,,71,,,,71,58,,',
+'226,23,,136,45,136,32,136,,136,,,,,45,,,130,26,26,,,,,,,,26,26,71,71',
+',,,32,136,23,,,32,32,,23,19,19,,,71,,,82,58,,,58,,,47,11,,33,58,,,,',
+'71,47,,,71,58,,,,58,,,,,,,35,71,45,,26,71,,,,23,30,,,11,,30,78,,78,71',
+'58,71,51,58,58,,74,58,23,,30,74,23,58,58,,,,58,58,30,30,30,,30,30,30',
+'71,,,,,,,11,47,,71,,,,35,,,,23,23,11,,,32,32,32,,30,,,,,30,30,71,,30',
+'30,30,30,,,,,90,78,,,,,108,108,26,,,226,,,226,23,,226,,226,29,,11,,',
+'29,,,23,26,,130,,,130,,130,,,,,30,,,,,30,30,30,30,30,,30,,29,,,,,,,',
+',,137,137,137,,,,,,,,23,,,,,,,58,,,29,,58,58,,,,,,,,,,58,,,226,,226',
+',226,,226,,,,,,,,,58,,130,84,130,,130,,130,,78,78,,,,78,78,226,,,30',
+'30,30,30,30,30,30,29,,,,30,30,30,130,,29,,29,,,,,,,30,,,,,,,,,,,58,',
+',,,,,,,32,,,58,,26,,,,,,,137,137,137,137,,137,,,,,,,,,30,,,,,,58,30',
+'30,,,,58,,,,30,,58,108,65,,,,,108,108,,,,29,,29,,30,29,,,30,,,29,30',
+'30,137,137,137,137,,,,,,,,29,,,,137,,30,,84,84,,,58,,,,,,,30,,,,,,30',
+'30,,,,,58,,,,,,78,70,65,30,30,30,70,,,,,,,78,78,78,78,,,,,,,70,30,65',
+',,,,,58,58,,,70,70,70,,,,,,29,,,,29,,,,,29,,,,,,,,,,,,84,70,84,,,84',
+'84,,58,,,70,70,70,,,,,,29,,58,,58,58,29,29,,,,,,30,108,,,108,108,,,',
+'29,29,108,,,,,,,,108,108,108,,,58,,78,70,,,,,,,,58,70,,70,,,,,,,,,,',
+',,,,,26,,,,30,,,,,,,,30,,30,,,,,65,,30,,,,,,,,108,30,,,,,,84,,,,,,,',
+',,,,,,,,,,,65,,,,,,108,,65,,65,,70,,65,,,,,,,,108,,,,,,,30,65,,30,,',
+',65,70,,30,,,,,,,,,,30,29,,,30,,,,99,99,65,,65,,,,,,,,,26,,84,,84,,84',
+',,,30,,,30,30,,,30,,,,,,30,30,,,65,30,30,,,,,,108,,,,,,,,,,,,70,,,,70',
+',,,70,70,,,,29,,,29,,84,,,,,,,,,70,108,,,,,,,,,29,84,,70,84,108,,108',
+'30,70,70,,,,,,,84,,30,,,,,,70,70,29,,,29,,,,29,,,,,,29,29,,108,,29,29',
+'98,98,,,,,,,,,,,,,84,,,,,,108,,,84,84,,,,,,,30,,,,,30,30,,,,,26,26,',
+',,30,,,,,,65,,,,,,,,,,,,30,,,,,,,,,,99,,65,,84,,99,99,,,,,,84,,,84,',
+',,,,,,,,,,,,,,34,,,,84,34,,,,,,,,,30,,,,84,,,70,,,,29,30,,,70,29,,,',
+'34,34,34,,70,,,29,,,,,,,,,,,,,,30,65,,,29,,30,,,34,,,30,,,,,,,34,34',
+'34,,,,,,,84,,,,,65,,,,,,,,,,,,,70,,,70,,,,,65,,,98,,,29,30,,98,98,,',
+'34,,65,70,,29,,30,,34,,34,,30,,,99,30,,99,99,,,,,,99,,,,70,,,,99,99',
+'99,70,,,29,65,65,65,,,29,,,,30,30,,,,,,,,,,,,,,,,,65,,,84,,,,,,,,,,',
+',,,,,30,97,97,84,30,,,34,29,34,,99,34,,,,,30,34,30,30,,96,96,,70,,29',
+',,,,34,,,,70,,,,,,,99,,,,,,,,,30,,,,,,,99,,,,30,29,29,,,,,,100,100,98',
+',,98,98,,,,,,98,,,,,,,,98,98,98,,70,,,,,70,,,,,29,,,,,,70,34,,,,34,',
+'29,,34,34,,,,,,,,,,,,,,,,,,34,,,99,,,,61,,,,,61,34,,,98,,,34,34,,,,',
+'29,,61,,,,,,,,34,34,61,61,61,,61,,99,,,70,,98,,,,,,,,,99,70,99,,,,,98',
+',,,,,,61,,,,,61,61,,,61,97,,,,,,97,97,,,,,70,,99,,,,70,,,96,,,,,,96',
+'96,,,,,,,,,,99,,,,,102,102,,,,61,,,,,61,61,61,61,61,,61,,,,,,,98,70',
+',,100,,,,,,100,100,,,70,,,,,,70,,,,70,,,,,,,,,,,,,,34,,98,,,,,,34,,',
+',,,,,98,34,98,70,70,,,,,,,,,,,,,,,,,,61,61,61,61,61,61,61,,,,,61,61',
+'61,,,98,,70,,,,70,,,61,,,97,,,97,97,,,70,,,97,,98,,34,,,34,97,97,97',
+'96,,,96,96,,,,,,96,,,,,,,34,96,96,96,,61,,34,,,,,61,61,,70,,,,,,61,',
+',,,,34,,,34,,100,,34,100,100,,,61,34,34,100,61,97,34,34,,61,,100,100',
+'100,,102,,,,,,102,102,,,,96,,,,,,,,,,,97,,,61,,,,,,61,61,,,,,,97,,,',
+',96,,,61,61,61,,,,,,,34,,,,96,100,,,,,,34,61,,,,,,,,,,,,,,,,,,,,,,,',
+',100,,,,,,,,,,,,,,,,100,,,,,,,,,,,,,97,,,,34,,,,,34,,,,,,,,,61,,34,96',
+',,,,,,,,,,,,,,,,34,,97,,,,,103,103,,,102,,,102,102,97,,97,,,102,,96',
+',,,,,102,102,102,100,,,,,96,61,96,,,,,,,101,101,61,,,,,,97,,34,,,,,',
+',,61,,,,34,,,,100,,,96,,,97,,,,,,,,100,,100,,,,,102,,,,,,96,,,,34,,',
+',,,34,,,,,,,,,61,,,61,,,100,102,,,61,,,,,,36,,,,61,,,102,61,,36,36,36',
+',100,,,,,,,,36,36,34,36,36,,36,,,,,,,61,,34,61,61,,,61,34,,36,36,34',
+'61,61,,,,61,61,,,,,,,,,,,,,,,,,,,,,,,,,,34,34,,,,,,,,,102,,103,,,,,',
+'103,103,,,,,,,,,,,,,,,,,,34,,,,34,,,,,,,,,102,101,,,34,,,101,101,,,',
+',,102,,102,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,102,,,,,61,,,,,61,61',
+',,,36,36,,,36,36,61,,,102,36,,,,,,,,,,,,,36,61,,,,36,36,36,36,36,36',
+'36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,,,,,36,,,,,,,,,,,103',
+',,103,103,,,,,,103,,36,36,,61,,,103,103,103,36,,,,,,61,36,,36,,,36,36',
+',,,,101,,,101,101,,,,,,101,,,,,,,61,101,101,101,,,61,,,,,,61,,,,,,,36',
+',36,,,,,103,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,103,,,61,,,,101,,,,,,,,,103',
+',,,,,61,,,,,,,,,,,,,,36,,,101,,,,,,,,,,,,,,,,101,,,,61,61,,,,,,,,,,',
+',,,,,,,,36,,36,36,36,,,,,,,,,,,,,,,,103,61,,,,,,,,,,,,,61,,61,61,36',
+',,,,,,,,,36,,36,,36,,,,,,,101,103,,,,,,,,36,61,,,,,103,,103,,36,,61',
+'36,,,,36,,,,,,,,,,,,,,101,,,,,,,,,,,,36,103,101,,101,,,,,,,,,,36,,,',
+',,36,,,36,,103,,,,,,,,,,,36,36,,,101,,,,,,,36,,,,,,,,,,,,,,,,,101,,',
+',,,,,,,,,,,,,36,36,36,,,,36,,,36,36,36,36,,,,36,36,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,,,,,,,,,36,,,36,,,,,,,,,,,,,,,,,,,',
+'36,,,,,,,,,,,,,,36,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,36,,,,,,,,36,,,,,,,,,,,,,36,36,36,36,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,36,,,,,,,,,,,,,,,,,,,,36,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,',
+',,,,,,,36,,,,,,,,,,,,,,,,,,,36,36,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,36' ]
+ racc_goto_check = arr = ::Array.new(4137, 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, 312, 149, 181, nil, 64, 154, 16, 63, 57,
+ -265, 64, -531, -701, -732, nil, -336, 57, 195, -44,
+ -104, 131, 40, 116, -178, -10, 832, 74, -140, 1226,
+ 1125, -181, 196, -15, 2017, -14, 2981, -320, -33, -33,
+ -2, -405, -15, nil, -14, 16, nil, 69, 191, 122,
+ -289, -16, nil, nil, -202, 125, -250, -382, 471, -293,
+ nil, 2372, 132, 88, 91, 1203, nil, -31, 42, -197,
+ 1505, -2, -345, 124, -9, nil, 39, -205, 654, 53,
+ nil, 152, -18, 178, 1258, 161, -23, 6, -264, 45,
+ 52, -249, -281, -277, -377, nil, 1768, 1747, 1430, 1286,
+ 1817, 2433, 2009, 2394, 206, 163, -58, nil, 732, -280,
+ -739, -380, -609, 156, nil, -171, 20, nil, 84, 169,
+ -133, 177, -392, -580, -160, -801, -268, -428, -783, -693,
+ 145, -663, nil, -654, nil, -519, -142, 256, -762, -652,
+ -189, -766, -684, -592, nil, -670, -812, -895, -908, -150,
+ -569, 177, -376, -232, -21, -696, -695, -318, -19, nil,
+ -28, -26, nil, nil, -452, -778, -668, -913, -523, -831,
+ -662, -653, -565, -661, -686, nil, -577, nil, -577, -405,
+ -403, nil, nil, -582, -404, -404, nil, -629, -873, -950,
+ nil, -770, -769, nil, -76, nil, -639, nil, -528, nil,
+ -459, -746, nil, nil, 227, 223, 228, 228, -218, -241,
+ 228, 236, 245, -289, -282, nil, nil, -268, -158, -224,
+ nil, nil, -184, -600, -310, -672, 128, -401, -716, -649,
+ -930, nil, nil, -481 ]
+
+racc_goto_default = [
+ nil, nil, nil, nil, 5, nil, 6, 389, 324, nil,
+ nil, 563, nil, 948, nil, 321, 322, nil, nil, nil,
+ 13, 14, 20, 239, nil, nil, 16, nil, 439, 240,
+ 353, nil, nil, 634, 238, 474, 23, 997, nil, nil,
+ nil, nil, nil, 384, 143, 52, 24, 53, nil, nil,
+ nil, 25, 26, 27, 757, nil, nil, nil, 341, nil,
+ 28, 338, 453, 35, nil, nil, 37, 40, 39, nil,
+ 235, 236, 401, nil, 461, 142, 87, nil, 444, 103,
+ 49, nil, 54, 273, 313, nil, 919, 454, nil, 455,
+ 466, nil, 683, 524, 311, 297, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, nil, 298, 69, 70, nil,
+ nil, nil, nil, nil, 77, nil, 616, 78, 363, nil,
+ nil, nil, nil, nil, nil, 782, 583, nil, 783, 784,
+ 571, 565, 566, 1143, 1013, nil, 572, nil, nil, nil,
+ 601, nil, 574, nil, 906, nil, nil, nil, 581, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 465,
+ nil, nil, 736, 728, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 882, nil, 696, 705, 697, 698, nil,
+ nil, 699, 700, nil, nil, nil, 881, 883, nil, 884,
+ 982, 983, 984, 985, nil, 989, 592, 990, 704, 706,
+ nil, nil, 86, 88, 89, nil, nil, nil, nil, 644,
+ nil, nil, nil, nil, nil, 99, 100, nil, 364, 926,
+ 367, 570, 769, 573, 938, 586, 588, 589, 1024, 593,
+ 1025, 596, 599, 316 ]
+
+racc_reduce_table = [
+ 0, 0, :racc_error,
+ 0, 150, :_reduce_1,
+ 2, 148, :_reduce_2,
+ 2, 149, :_reduce_3,
+ 0, 151, :_reduce_4,
+ 1, 151, :_reduce_5,
+ 3, 151, :_reduce_6,
+ 2, 151, :_reduce_7,
+ 1, 153, :_reduce_none,
+ 2, 153, :_reduce_9,
+ 3, 156, :_reduce_10,
+ 4, 157, :_reduce_11,
+ 2, 158, :_reduce_12,
+ 0, 162, :_reduce_13,
+ 1, 162, :_reduce_14,
+ 3, 162, :_reduce_15,
+ 2, 162, :_reduce_16,
+ 1, 163, :_reduce_none,
+ 2, 163, :_reduce_18,
+ 0, 174, :_reduce_19,
+ 4, 155, :_reduce_20,
+ 3, 155, :_reduce_21,
+ 3, 155, :_reduce_22,
+ 3, 155, :_reduce_23,
+ 2, 155, :_reduce_24,
+ 3, 155, :_reduce_25,
+ 3, 155, :_reduce_26,
+ 3, 155, :_reduce_27,
+ 3, 155, :_reduce_28,
+ 3, 155, :_reduce_29,
+ 4, 155, :_reduce_30,
+ 1, 155, :_reduce_none,
+ 3, 155, :_reduce_32,
+ 3, 155, :_reduce_33,
+ 5, 155, :_reduce_34,
+ 3, 155, :_reduce_35,
+ 1, 155, :_reduce_none,
+ 3, 167, :_reduce_37,
+ 3, 167, :_reduce_38,
+ 6, 167, :_reduce_39,
+ 5, 167, :_reduce_40,
+ 5, 167, :_reduce_41,
+ 5, 167, :_reduce_42,
+ 5, 167, :_reduce_43,
+ 3, 167, :_reduce_44,
+ 1, 175, :_reduce_none,
+ 3, 175, :_reduce_46,
+ 1, 175, :_reduce_none,
+ 1, 173, :_reduce_none,
+ 3, 173, :_reduce_49,
+ 3, 173, :_reduce_50,
+ 3, 173, :_reduce_51,
+ 2, 173, :_reduce_52,
+ 0, 185, :_reduce_53,
+ 4, 173, :_reduce_54,
+ 0, 186, :_reduce_55,
+ 4, 173, :_reduce_56,
+ 1, 173, :_reduce_none,
+ 1, 166, :_reduce_none,
+ 0, 190, :_reduce_59,
+ 3, 187, :_reduce_60,
+ 1, 189, :_reduce_61,
+ 2, 192, :_reduce_62,
+ 0, 197, :_reduce_63,
+ 5, 194, :_reduce_64,
+ 1, 169, :_reduce_none,
+ 1, 169, :_reduce_none,
+ 1, 199, :_reduce_none,
+ 4, 199, :_reduce_68,
+ 0, 206, :_reduce_69,
+ 4, 203, :_reduce_70,
+ 1, 205, :_reduce_none,
+ 2, 198, :_reduce_72,
+ 3, 198, :_reduce_73,
+ 4, 198, :_reduce_74,
+ 5, 198, :_reduce_75,
+ 4, 198, :_reduce_76,
+ 5, 198, :_reduce_77,
+ 2, 198, :_reduce_78,
+ 2, 198, :_reduce_79,
+ 2, 198, :_reduce_80,
+ 2, 198, :_reduce_81,
+ 2, 198, :_reduce_82,
+ 1, 168, :_reduce_83,
+ 3, 168, :_reduce_84,
+ 1, 211, :_reduce_85,
+ 3, 211, :_reduce_86,
+ 1, 210, :_reduce_none,
+ 2, 210, :_reduce_88,
+ 3, 210, :_reduce_89,
+ 5, 210, :_reduce_90,
+ 2, 210, :_reduce_91,
+ 4, 210, :_reduce_92,
+ 2, 210, :_reduce_93,
+ 4, 210, :_reduce_94,
+ 1, 210, :_reduce_95,
+ 3, 210, :_reduce_96,
+ 1, 214, :_reduce_none,
+ 3, 214, :_reduce_98,
+ 2, 213, :_reduce_99,
+ 3, 213, :_reduce_100,
+ 1, 216, :_reduce_101,
+ 3, 216, :_reduce_102,
+ 1, 215, :_reduce_103,
+ 1, 215, :_reduce_104,
+ 4, 215, :_reduce_105,
+ 3, 215, :_reduce_106,
+ 3, 215, :_reduce_107,
+ 3, 215, :_reduce_108,
+ 3, 215, :_reduce_109,
+ 2, 215, :_reduce_110,
+ 1, 215, :_reduce_111,
+ 1, 170, :_reduce_112,
+ 1, 170, :_reduce_113,
+ 4, 170, :_reduce_114,
+ 3, 170, :_reduce_115,
+ 3, 170, :_reduce_116,
+ 3, 170, :_reduce_117,
+ 3, 170, :_reduce_118,
+ 2, 170, :_reduce_119,
+ 1, 170, :_reduce_120,
+ 1, 219, :_reduce_121,
+ 1, 219, :_reduce_none,
+ 2, 220, :_reduce_123,
+ 1, 220, :_reduce_124,
+ 3, 220, :_reduce_125,
+ 1, 191, :_reduce_none,
+ 1, 191, :_reduce_none,
+ 1, 191, :_reduce_none,
+ 1, 191, :_reduce_none,
+ 1, 191, :_reduce_none,
+ 1, 164, :_reduce_131,
+ 1, 164, :_reduce_none,
+ 1, 165, :_reduce_133,
+ 0, 224, :_reduce_134,
+ 4, 165, :_reduce_135,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 3, 183, :_reduce_207,
+ 3, 183, :_reduce_208,
+ 6, 183, :_reduce_209,
+ 5, 183, :_reduce_210,
+ 5, 183, :_reduce_211,
+ 5, 183, :_reduce_212,
+ 5, 183, :_reduce_213,
+ 4, 183, :_reduce_214,
+ 3, 183, :_reduce_215,
+ 3, 183, :_reduce_216,
+ 3, 183, :_reduce_217,
+ 2, 183, :_reduce_218,
+ 2, 183, :_reduce_219,
+ 2, 183, :_reduce_220,
+ 2, 183, :_reduce_221,
+ 3, 183, :_reduce_222,
+ 3, 183, :_reduce_223,
+ 3, 183, :_reduce_224,
+ 3, 183, :_reduce_225,
+ 3, 183, :_reduce_226,
+ 3, 183, :_reduce_227,
+ 4, 183, :_reduce_228,
+ 2, 183, :_reduce_229,
+ 2, 183, :_reduce_230,
+ 3, 183, :_reduce_231,
+ 3, 183, :_reduce_232,
+ 3, 183, :_reduce_233,
+ 3, 183, :_reduce_234,
+ 1, 183, :_reduce_none,
+ 3, 183, :_reduce_236,
+ 3, 183, :_reduce_237,
+ 3, 183, :_reduce_238,
+ 3, 183, :_reduce_239,
+ 3, 183, :_reduce_240,
+ 2, 183, :_reduce_241,
+ 2, 183, :_reduce_242,
+ 3, 183, :_reduce_243,
+ 3, 183, :_reduce_244,
+ 3, 183, :_reduce_245,
+ 3, 183, :_reduce_246,
+ 3, 183, :_reduce_247,
+ 6, 183, :_reduce_248,
+ 4, 183, :_reduce_249,
+ 6, 183, :_reduce_250,
+ 4, 183, :_reduce_251,
+ 6, 183, :_reduce_252,
+ 1, 183, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 3, 227, :_reduce_258,
+ 3, 227, :_reduce_259,
+ 1, 231, :_reduce_none,
+ 1, 232, :_reduce_none,
+ 2, 232, :_reduce_none,
+ 4, 232, :_reduce_263,
+ 2, 232, :_reduce_264,
+ 1, 225, :_reduce_none,
+ 3, 225, :_reduce_266,
+ 3, 237, :_reduce_267,
+ 5, 237, :_reduce_268,
+ 3, 237, :_reduce_269,
+ 0, 239, :_reduce_270,
+ 1, 239, :_reduce_none,
+ 0, 178, :_reduce_272,
+ 1, 178, :_reduce_none,
+ 2, 178, :_reduce_none,
+ 4, 178, :_reduce_275,
+ 2, 178, :_reduce_276,
+ 1, 209, :_reduce_277,
+ 2, 209, :_reduce_278,
+ 2, 209, :_reduce_279,
+ 4, 209, :_reduce_280,
+ 1, 209, :_reduce_281,
+ 0, 242, :_reduce_282,
+ 2, 202, :_reduce_283,
+ 2, 241, :_reduce_284,
+ 2, 240, :_reduce_285,
+ 0, 240, :_reduce_286,
+ 1, 234, :_reduce_287,
+ 2, 234, :_reduce_288,
+ 3, 234, :_reduce_289,
+ 4, 234, :_reduce_290,
+ 1, 172, :_reduce_291,
+ 1, 172, :_reduce_none,
+ 3, 171, :_reduce_293,
+ 4, 171, :_reduce_294,
+ 2, 171, :_reduce_295,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_306,
+ 0, 266, :_reduce_307,
+ 4, 229, :_reduce_308,
+ 0, 267, :_reduce_309,
+ 4, 229, :_reduce_310,
+ 0, 268, :_reduce_311,
+ 4, 229, :_reduce_312,
+ 3, 229, :_reduce_313,
+ 3, 229, :_reduce_314,
+ 2, 229, :_reduce_315,
+ 3, 229, :_reduce_316,
+ 3, 229, :_reduce_317,
+ 1, 229, :_reduce_318,
+ 4, 229, :_reduce_319,
+ 3, 229, :_reduce_320,
+ 1, 229, :_reduce_321,
+ 5, 229, :_reduce_322,
+ 4, 229, :_reduce_323,
+ 3, 229, :_reduce_324,
+ 2, 229, :_reduce_325,
+ 1, 229, :_reduce_none,
+ 2, 229, :_reduce_327,
+ 1, 229, :_reduce_none,
+ 6, 229, :_reduce_329,
+ 6, 229, :_reduce_330,
+ 4, 229, :_reduce_331,
+ 4, 229, :_reduce_332,
+ 5, 229, :_reduce_333,
+ 4, 229, :_reduce_334,
+ 5, 229, :_reduce_335,
+ 6, 229, :_reduce_336,
+ 0, 269, :_reduce_337,
+ 6, 229, :_reduce_338,
+ 0, 270, :_reduce_339,
+ 7, 229, :_reduce_340,
+ 0, 271, :_reduce_341,
+ 5, 229, :_reduce_342,
+ 4, 229, :_reduce_343,
+ 4, 229, :_reduce_344,
+ 1, 229, :_reduce_345,
+ 1, 229, :_reduce_346,
+ 1, 229, :_reduce_347,
+ 1, 229, :_reduce_348,
+ 1, 177, :_reduce_none,
+ 1, 261, :_reduce_350,
+ 1, 264, :_reduce_351,
+ 1, 193, :_reduce_352,
+ 1, 208, :_reduce_353,
+ 1, 256, :_reduce_none,
+ 1, 256, :_reduce_none,
+ 2, 256, :_reduce_356,
+ 1, 188, :_reduce_none,
+ 1, 188, :_reduce_none,
+ 1, 257, :_reduce_none,
+ 5, 257, :_reduce_360,
+ 1, 160, :_reduce_none,
+ 2, 160, :_reduce_362,
+ 1, 260, :_reduce_none,
+ 1, 260, :_reduce_none,
+ 1, 272, :_reduce_365,
+ 3, 272, :_reduce_366,
+ 1, 275, :_reduce_367,
+ 3, 275, :_reduce_368,
+ 1, 274, :_reduce_none,
+ 3, 274, :_reduce_370,
+ 5, 274, :_reduce_371,
+ 1, 274, :_reduce_372,
+ 3, 274, :_reduce_373,
+ 2, 276, :_reduce_374,
+ 1, 276, :_reduce_375,
+ 1, 277, :_reduce_none,
+ 1, 277, :_reduce_none,
+ 4, 280, :_reduce_378,
+ 2, 280, :_reduce_379,
+ 2, 280, :_reduce_380,
+ 1, 280, :_reduce_381,
+ 2, 284, :_reduce_382,
+ 0, 284, :_reduce_383,
+ 1, 285, :_reduce_none,
+ 6, 286, :_reduce_385,
+ 8, 286, :_reduce_386,
+ 4, 286, :_reduce_387,
+ 6, 286, :_reduce_388,
+ 4, 286, :_reduce_389,
+ 2, 286, :_reduce_none,
+ 6, 286, :_reduce_391,
+ 2, 286, :_reduce_392,
+ 4, 286, :_reduce_393,
+ 6, 286, :_reduce_394,
+ 2, 286, :_reduce_395,
+ 4, 286, :_reduce_396,
+ 2, 286, :_reduce_397,
+ 4, 286, :_reduce_398,
+ 1, 286, :_reduce_none,
+ 0, 290, :_reduce_400,
+ 1, 290, :_reduce_401,
+ 3, 291, :_reduce_402,
+ 4, 291, :_reduce_403,
+ 1, 292, :_reduce_404,
+ 4, 292, :_reduce_405,
+ 1, 293, :_reduce_406,
+ 3, 293, :_reduce_407,
+ 1, 294, :_reduce_408,
+ 1, 294, :_reduce_none,
+ 0, 298, :_reduce_410,
+ 0, 299, :_reduce_411,
+ 5, 255, :_reduce_412,
+ 4, 296, :_reduce_413,
+ 1, 296, :_reduce_414,
+ 0, 302, :_reduce_415,
+ 4, 297, :_reduce_416,
+ 0, 303, :_reduce_417,
+ 4, 297, :_reduce_418,
+ 0, 305, :_reduce_419,
+ 4, 301, :_reduce_420,
+ 2, 200, :_reduce_421,
+ 4, 200, :_reduce_422,
+ 5, 200, :_reduce_423,
+ 5, 200, :_reduce_424,
+ 2, 254, :_reduce_425,
+ 4, 254, :_reduce_426,
+ 4, 254, :_reduce_427,
+ 3, 254, :_reduce_428,
+ 3, 254, :_reduce_429,
+ 3, 254, :_reduce_430,
+ 2, 254, :_reduce_431,
+ 1, 254, :_reduce_432,
+ 4, 254, :_reduce_433,
+ 0, 307, :_reduce_434,
+ 4, 253, :_reduce_435,
+ 0, 308, :_reduce_436,
+ 4, 253, :_reduce_437,
+ 0, 309, :_reduce_438,
+ 3, 204, :_reduce_439,
+ 0, 310, :_reduce_440,
+ 0, 311, :_reduce_441,
+ 4, 304, :_reduce_442,
+ 5, 258, :_reduce_443,
+ 1, 312, :_reduce_444,
+ 1, 312, :_reduce_none,
+ 0, 315, :_reduce_446,
+ 0, 316, :_reduce_447,
+ 7, 259, :_reduce_448,
+ 1, 314, :_reduce_449,
+ 1, 314, :_reduce_none,
+ 1, 313, :_reduce_451,
+ 3, 313, :_reduce_452,
+ 3, 313, :_reduce_453,
+ 1, 317, :_reduce_none,
+ 2, 317, :_reduce_455,
+ 3, 317, :_reduce_456,
+ 1, 317, :_reduce_457,
+ 1, 317, :_reduce_458,
+ 1, 317, :_reduce_459,
+ 1, 184, :_reduce_none,
+ 3, 322, :_reduce_461,
+ 1, 322, :_reduce_none,
+ 3, 324, :_reduce_463,
+ 1, 324, :_reduce_none,
+ 1, 326, :_reduce_465,
+ 1, 327, :_reduce_466,
+ 1, 325, :_reduce_none,
+ 4, 325, :_reduce_468,
+ 4, 325, :_reduce_469,
+ 4, 325, :_reduce_470,
+ 3, 325, :_reduce_471,
+ 4, 325, :_reduce_472,
+ 4, 325, :_reduce_473,
+ 4, 325, :_reduce_474,
+ 3, 325, :_reduce_475,
+ 3, 325, :_reduce_476,
+ 3, 325, :_reduce_477,
+ 2, 325, :_reduce_478,
+ 0, 331, :_reduce_479,
+ 4, 325, :_reduce_480,
+ 2, 325, :_reduce_481,
+ 0, 332, :_reduce_482,
+ 4, 325, :_reduce_483,
+ 1, 318, :_reduce_484,
+ 1, 318, :_reduce_485,
+ 2, 318, :_reduce_486,
+ 3, 318, :_reduce_487,
+ 5, 318, :_reduce_488,
+ 2, 318, :_reduce_489,
+ 4, 318, :_reduce_490,
+ 1, 318, :_reduce_none,
+ 2, 333, :_reduce_492,
+ 3, 333, :_reduce_493,
+ 1, 320, :_reduce_494,
+ 3, 320, :_reduce_495,
+ 5, 319, :_reduce_496,
+ 2, 336, :_reduce_497,
+ 1, 336, :_reduce_498,
+ 1, 335, :_reduce_499,
+ 3, 335, :_reduce_500,
+ 1, 334, :_reduce_none,
+ 3, 321, :_reduce_502,
+ 1, 321, :_reduce_503,
+ 2, 321, :_reduce_504,
+ 1, 321, :_reduce_505,
+ 1, 337, :_reduce_506,
+ 3, 337, :_reduce_507,
+ 2, 339, :_reduce_508,
+ 1, 339, :_reduce_509,
+ 1, 340, :_reduce_510,
+ 3, 340, :_reduce_511,
+ 2, 342, :_reduce_512,
+ 1, 342, :_reduce_513,
+ 2, 344, :_reduce_514,
+ 1, 338, :_reduce_none,
+ 1, 338, :_reduce_none,
+ 1, 328, :_reduce_none,
+ 3, 328, :_reduce_518,
+ 3, 328, :_reduce_519,
+ 2, 328, :_reduce_520,
+ 2, 328, :_reduce_521,
+ 1, 328, :_reduce_none,
+ 1, 328, :_reduce_none,
+ 1, 328, :_reduce_none,
+ 2, 328, :_reduce_525,
+ 2, 328, :_reduce_526,
+ 1, 345, :_reduce_none,
+ 1, 345, :_reduce_none,
+ 1, 345, :_reduce_none,
+ 1, 345, :_reduce_none,
+ 1, 345, :_reduce_none,
+ 1, 345, :_reduce_none,
+ 1, 345, :_reduce_none,
+ 1, 345, :_reduce_none,
+ 1, 345, :_reduce_535,
+ 1, 345, :_reduce_none,
+ 1, 323, :_reduce_537,
+ 2, 346, :_reduce_538,
+ 2, 329, :_reduce_539,
+ 3, 329, :_reduce_540,
+ 1, 329, :_reduce_541,
+ 6, 159, :_reduce_542,
+ 0, 159, :_reduce_543,
+ 1, 347, :_reduce_544,
+ 1, 347, :_reduce_none,
+ 1, 347, :_reduce_none,
+ 2, 348, :_reduce_547,
+ 1, 348, :_reduce_none,
+ 2, 161, :_reduce_549,
+ 1, 161, :_reduce_none,
+ 1, 243, :_reduce_none,
+ 1, 243, :_reduce_none,
+ 1, 244, :_reduce_553,
+ 1, 350, :_reduce_554,
+ 2, 350, :_reduce_555,
+ 3, 351, :_reduce_556,
+ 1, 351, :_reduce_557,
+ 1, 351, :_reduce_558,
+ 3, 245, :_reduce_559,
+ 4, 246, :_reduce_560,
+ 3, 247, :_reduce_561,
+ 0, 354, :_reduce_562,
+ 3, 354, :_reduce_563,
+ 1, 355, :_reduce_564,
+ 2, 355, :_reduce_565,
+ 3, 249, :_reduce_566,
+ 0, 357, :_reduce_567,
+ 3, 357, :_reduce_568,
+ 3, 248, :_reduce_569,
+ 3, 250, :_reduce_570,
+ 0, 358, :_reduce_571,
+ 3, 358, :_reduce_572,
+ 0, 359, :_reduce_573,
+ 3, 359, :_reduce_574,
+ 0, 341, :_reduce_575,
+ 2, 341, :_reduce_576,
+ 0, 352, :_reduce_577,
+ 2, 352, :_reduce_578,
+ 0, 353, :_reduce_579,
+ 2, 353, :_reduce_580,
+ 1, 356, :_reduce_581,
+ 2, 356, :_reduce_582,
+ 0, 361, :_reduce_583,
+ 4, 356, :_reduce_584,
+ 1, 360, :_reduce_585,
+ 1, 360, :_reduce_586,
+ 1, 360, :_reduce_587,
+ 1, 360, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 362, :_reduce_591,
+ 3, 363, :_reduce_592,
+ 1, 349, :_reduce_593,
+ 2, 349, :_reduce_594,
+ 1, 226, :_reduce_595,
+ 1, 226, :_reduce_596,
+ 1, 226, :_reduce_597,
+ 1, 226, :_reduce_598,
+ 1, 217, :_reduce_599,
+ 1, 217, :_reduce_600,
+ 1, 217, :_reduce_601,
+ 1, 217, :_reduce_602,
+ 1, 217, :_reduce_603,
+ 1, 218, :_reduce_604,
+ 1, 218, :_reduce_605,
+ 1, 218, :_reduce_606,
+ 1, 218, :_reduce_607,
+ 1, 218, :_reduce_608,
+ 1, 218, :_reduce_609,
+ 1, 218, :_reduce_610,
+ 1, 251, :_reduce_611,
+ 1, 251, :_reduce_612,
+ 1, 176, :_reduce_613,
+ 1, 176, :_reduce_614,
+ 1, 181, :_reduce_615,
+ 1, 181, :_reduce_616,
+ 0, 364, :_reduce_617,
+ 4, 262, :_reduce_618,
+ 0, 262, :_reduce_619,
+ 1, 228, :_reduce_none,
+ 1, 228, :_reduce_621,
+ 3, 365, :_reduce_622,
+ 5, 365, :_reduce_623,
+ 3, 365, :_reduce_624,
+ 1, 265, :_reduce_none,
+ 0, 367, :_reduce_626,
+ 3, 265, :_reduce_627,
+ 4, 366, :_reduce_628,
+ 2, 366, :_reduce_629,
+ 2, 366, :_reduce_630,
+ 1, 366, :_reduce_631,
+ 2, 369, :_reduce_632,
+ 0, 369, :_reduce_633,
+ 6, 300, :_reduce_634,
+ 8, 300, :_reduce_635,
+ 4, 300, :_reduce_636,
+ 6, 300, :_reduce_637,
+ 4, 300, :_reduce_638,
+ 6, 300, :_reduce_639,
+ 2, 300, :_reduce_640,
+ 4, 300, :_reduce_641,
+ 6, 300, :_reduce_642,
+ 2, 300, :_reduce_643,
+ 4, 300, :_reduce_644,
+ 2, 300, :_reduce_645,
+ 4, 300, :_reduce_646,
+ 1, 300, :_reduce_647,
+ 0, 300, :_reduce_648,
+ 1, 238, :_reduce_649,
+ 1, 295, :_reduce_650,
+ 1, 295, :_reduce_651,
+ 1, 295, :_reduce_652,
+ 1, 295, :_reduce_653,
+ 1, 273, :_reduce_none,
+ 1, 273, :_reduce_655,
+ 1, 371, :_reduce_656,
+ 1, 372, :_reduce_657,
+ 3, 372, :_reduce_658,
+ 1, 287, :_reduce_659,
+ 3, 287, :_reduce_660,
+ 1, 373, :_reduce_661,
+ 2, 374, :_reduce_662,
+ 1, 374, :_reduce_663,
+ 2, 375, :_reduce_664,
+ 1, 375, :_reduce_665,
+ 1, 281, :_reduce_666,
+ 3, 281, :_reduce_667,
+ 1, 368, :_reduce_668,
+ 3, 368, :_reduce_669,
+ 1, 343, :_reduce_none,
+ 1, 343, :_reduce_none,
+ 2, 279, :_reduce_672,
+ 2, 278, :_reduce_673,
+ 1, 278, :_reduce_674,
+ 3, 376, :_reduce_675,
+ 3, 377, :_reduce_676,
+ 1, 288, :_reduce_677,
+ 3, 288, :_reduce_678,
+ 1, 370, :_reduce_679,
+ 3, 370, :_reduce_680,
+ 1, 378, :_reduce_none,
+ 1, 378, :_reduce_none,
+ 2, 289, :_reduce_683,
+ 1, 289, :_reduce_684,
+ 1, 379, :_reduce_none,
+ 1, 379, :_reduce_none,
+ 2, 283, :_reduce_687,
+ 2, 282, :_reduce_688,
+ 0, 282, :_reduce_689,
+ 1, 195, :_reduce_none,
+ 3, 195, :_reduce_691,
+ 0, 252, :_reduce_692,
+ 2, 252, :_reduce_none,
+ 1, 236, :_reduce_694,
+ 3, 236, :_reduce_695,
+ 3, 380, :_reduce_696,
+ 2, 380, :_reduce_697,
+ 4, 380, :_reduce_698,
+ 2, 380, :_reduce_699,
+ 1, 207, :_reduce_none,
+ 1, 207, :_reduce_none,
+ 1, 207, :_reduce_none,
+ 1, 201, :_reduce_none,
+ 1, 201, :_reduce_none,
+ 1, 201, :_reduce_none,
+ 1, 201, :_reduce_none,
+ 1, 306, :_reduce_none,
+ 1, 306, :_reduce_none,
+ 1, 306, :_reduce_none,
+ 1, 196, :_reduce_none,
+ 1, 196, :_reduce_none,
+ 1, 180, :_reduce_712,
+ 1, 180, :_reduce_713,
+ 0, 152, :_reduce_none,
+ 1, 152, :_reduce_none,
+ 0, 182, :_reduce_none,
+ 1, 182, :_reduce_none,
+ 2, 212, :_reduce_718,
+ 2, 179, :_reduce_719,
+ 2, 330, :_reduce_720,
+ 0, 235, :_reduce_none,
+ 1, 235, :_reduce_none,
+ 1, 235, :_reduce_none,
+ 1, 263, :_reduce_724,
+ 1, 263, :_reduce_none,
+ 1, 154, :_reduce_none,
+ 2, 154, :_reduce_none,
+ 0, 233, :_reduce_728 ]
+
+racc_reduce_n = 729
+
+racc_shift_n = 1219
+
+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",
+ "@1",
+ "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",
+ "@2",
+ "command_rhs",
+ "var_lhs",
+ "primary_value",
+ "opt_call_args",
+ "rbracket",
+ "call_op",
+ "backref",
+ "opt_nl",
+ "arg",
+ "p_expr",
+ "@3",
+ "@4",
+ "expr_value_do",
+ "do",
+ "def_name",
+ "@5",
+ "fname",
+ "defn_head",
+ "k_def",
+ "defs_head",
+ "singleton",
+ "dot_or_colon",
+ "@6",
+ "command",
+ "block_command",
+ "block_call",
+ "operation2",
+ "command_args",
+ "cmd_brace_block",
+ "brace_body",
+ "fcall",
+ "@7",
+ "operation",
+ "k_return",
+ "call_args",
+ "mlhs_basic",
+ "mlhs_inner",
+ "rparen",
+ "mlhs_head",
+ "mlhs_item",
+ "mlhs_node",
+ "mlhs_post",
+ "user_variable",
+ "keyword_variable",
+ "cname",
+ "cpath",
+ "op",
+ "reswords",
+ "symbol",
+ "@8",
+ "arg_rhs",
+ "simple_numeric",
+ "rel_expr",
+ "f_opt_paren_args",
+ "primary",
+ "relop",
+ "arg_value",
+ "aref_args",
+ "none",
+ "args",
+ "trailer",
+ "assocs",
+ "paren_args",
+ "args_forward",
+ "opt_paren_args",
+ "opt_block_arg",
+ "block_arg",
+ "@9",
+ "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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "@10",
+ "@11",
+ "@12",
+ "@13",
+ "@14",
+ "@15",
+ "f_marg",
+ "f_norm_arg",
+ "f_margs",
+ "f_marg_list",
+ "f_rest_marg",
+ "f_any_kwrest",
+ "f_kwrest",
+ "f_no_kwarg",
+ "block_args_tail",
+ "f_block_kwarg",
+ "opt_f_block_arg",
+ "f_block_arg",
+ "opt_block_args_tail",
+ "excessed_comma",
+ "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_find",
+ "p_args_tail",
+ "p_kwargs",
+ "p_as",
+ "p_variable",
+ "p_alt",
+ "p_expr_basic",
+ "p_lparen",
+ "p_lbracket",
+ "p_value",
+ "p_const",
+ "rbrace",
+ "@28",
+ "@29",
+ "p_args_head",
+ "p_arg",
+ "p_args_post",
+ "p_rest",
+ "p_kwarg",
+ "p_any_kwrest",
+ "p_kw",
+ "p_kw_label",
+ "string_contents",
+ "p_kwrest",
+ "kwrest_mark",
+ "p_kwnorest",
+ "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",
+ "@30",
+ "ssym",
+ "dsym",
+ "@31",
+ "f_paren_args",
+ "args_tail",
+ "@32",
+ "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
+
+def _reduce_1(val, _values, result)
+ @current_arg_stack.push(nil)
+ @max_numparam_stack.push(static: true)
+
+ result
+end
+
+def _reduce_2(val, _values, result)
+ result = val[1]
+
+ @current_arg_stack.pop
+ @max_numparam_stack.pop
+
+ 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
+
+# reduce 8 omitted
+
+def _reduce_9(val, _values, result)
+ result = @builder.preexe(val[0], *val[1])
+
+ result
+end
+
+def _reduce_10(val, _values, result)
+ result = val
+
+ result
+end
+
+def _reduce_11(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_12(val, _values, result)
+ result = @builder.compstmt(val[0])
+
+ result
+end
+
+def _reduce_13(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_14(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_15(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_16(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+# reduce 17 omitted
+
+def _reduce_18(val, _values, result)
+ diagnostic :error, :begin_in_method, nil, val[0]
+
+ result
+end
+
+def _reduce_19(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_20(val, _values, result)
+ result = @builder.alias(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_21(val, _values, result)
+ result = @builder.alias(val[0],
+ @builder.gvar(val[1]),
+ @builder.gvar(val[2]))
+
+ result
+end
+
+def _reduce_22(val, _values, result)
+ result = @builder.alias(val[0],
+ @builder.gvar(val[1]),
+ @builder.back_ref(val[2]))
+
+ result
+end
+
+def _reduce_23(val, _values, result)
+ diagnostic :error, :nth_ref_alias, nil, val[2]
+
+ result
+end
+
+def _reduce_24(val, _values, result)
+ result = @builder.undef_method(val[0], val[1])
+
+ result
+end
+
+def _reduce_25(val, _values, result)
+ result = @builder.condition_mod(val[0], nil,
+ val[1], val[2])
+
+ result
+end
+
+def _reduce_26(val, _values, result)
+ result = @builder.condition_mod(nil, val[0],
+ val[1], val[2])
+
+ result
+end
+
+def _reduce_27(val, _values, result)
+ result = @builder.loop_mod(:while, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_28(val, _values, result)
+ result = @builder.loop_mod(:until, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_29(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_30(val, _values, result)
+ result = @builder.postexe(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+# reduce 31 omitted
+
+def _reduce_32(val, _values, result)
+ result = @builder.multi_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_33(val, _values, result)
+ result = @builder.assign(val[0], val[1],
+ @builder.array(nil, val[2], nil))
+
+ result
+end
+
+def _reduce_34(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_35(val, _values, result)
+ result = @builder.multi_assign(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 36 omitted
+
+def _reduce_37(val, _values, result)
+ result = @builder.assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_38(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_39(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_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)
+ 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)
+ 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_43(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_44(val, _values, result)
+ @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 45 omitted
+
+def _reduce_46(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 47 omitted
+
+# reduce 48 omitted
+
+def _reduce_49(val, _values, result)
+ result = @builder.logical_op(:and, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_50(val, _values, result)
+ result = @builder.logical_op(:or, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_51(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[2], nil)
+
+ result
+end
+
+def _reduce_52(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[1], nil)
+
+ result
+end
+
+def _reduce_53(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_54(val, _values, result)
+ @pattern_variables.pop
+ @context.in_kwarg = val[2]
+ result = @builder.match_pattern(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_55(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_56(val, _values, result)
+ @pattern_variables.pop
+ @context.in_kwarg = val[2]
+ result = @builder.match_pattern_p(val[0], val[1], val[3])
+
+ result
+end
+
+# reduce 57 omitted
+
+# reduce 58 omitted
+
+def _reduce_59(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_60(val, _values, result)
+ @lexer.cond.pop
+ result = [ val[1], val[2] ]
+
+ result
+end
+
+def _reduce_61(val, _values, result)
+ local_push
+ @current_arg_stack.push(nil)
+
+ result = [ val[0], @context.dup ]
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_62(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+def _reduce_63(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_64(val, _values, result)
+ result = [ val[0], val[1], val[2], val[4] ]
+
+ result
+end
+
+# reduce 65 omitted
+
+# reduce 66 omitted
+
+# reduce 67 omitted
+
+def _reduce_68(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_69(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_70(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+# reduce 71 omitted
+
+def _reduce_72(val, _values, result)
+ result = @builder.call_method(nil, nil, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_73(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_74(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_75(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_76(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_77(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_78(val, _values, result)
+ result = @builder.keyword_cmd(:super, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_79(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_80(val, _values, result)
+ result = @builder.keyword_cmd(:return, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_81(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_82(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_83(val, _values, result)
+ result = @builder.multi_lhs(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_84(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_85(val, _values, result)
+ result = @builder.multi_lhs(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_86(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 87 omitted
+
+def _reduce_88(val, _values, result)
+ result = val[0].
+ push(val[1])
+
+ result
+end
+
+def _reduce_89(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1], val[2]))
+
+ result
+end
+
+def _reduce_90(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1], val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_91(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1]))
+
+ result
+end
+
+def _reduce_92(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1])).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_93(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_94(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_95(val, _values, result)
+ result = [ @builder.splat(val[0]) ]
+
+ result
+end
+
+def _reduce_96(val, _values, result)
+ result = [ @builder.splat(val[0]),
+ *val[2] ]
+
+ result
+end
+
+# reduce 97 omitted
+
+def _reduce_98(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_99(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_100(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_101(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_102(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_103(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_104(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_105(val, _values, result)
+ result = @builder.index_asgn(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_106(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_107(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_108(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_109(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_fetch(val[0], val[1], val[2]))
+
+ result
+end
+
+def _reduce_110(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_global(val[0], val[1]))
+
+ result
+end
+
+def _reduce_111(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_112(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_113(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_114(val, _values, result)
+ result = @builder.index_asgn(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_115(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_116(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_117(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_118(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_fetch(val[0], val[1], val[2]))
+
+ result
+end
+
+def _reduce_119(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_global(val[0], val[1]))
+
+ result
+end
+
+def _reduce_120(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_121(val, _values, result)
+ diagnostic :error, :module_name_const, nil, val[0]
+
+ result
+end
+
+# reduce 122 omitted
+
+def _reduce_123(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_124(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_125(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 126 omitted
+
+# reduce 127 omitted
+
+# reduce 128 omitted
+
+# reduce 129 omitted
+
+# reduce 130 omitted
+
+def _reduce_131(val, _values, result)
+ result = @builder.symbol_internal(val[0])
+
+ result
+end
+
+# reduce 132 omitted
+
+def _reduce_133(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_134(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_135(val, _values, result)
+ result = val[0] << val[3]
+
+ result
+end
+
+# 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
+
+# reduce 200 omitted
+
+# reduce 201 omitted
+
+# reduce 202 omitted
+
+# reduce 203 omitted
+
+# reduce 204 omitted
+
+# reduce 205 omitted
+
+# reduce 206 omitted
+
+def _reduce_207(val, _values, result)
+ result = @builder.assign(val[0], val[1], val[2])
+
+ 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.op_assign(
+ @builder.index(
+ val[0], val[1], val[2], val[3]),
+ val[4], val[5])
+
+ result
+end
+
+def _reduce_210(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_211(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_212(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_213(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_214(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_215(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_216(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_217(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_218(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_219(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_220(val, _values, result)
+ result = @builder.range_inclusive(nil, val[0], val[1])
+
+ result
+end
+
+def _reduce_221(val, _values, result)
+ result = @builder.range_exclusive(nil, val[0], val[1])
+
+ 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.unary_op(val[0],
+ @builder.binary_op(
+ val[1], val[2], val[3]))
+
+ 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.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.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
+
+# reduce 235 omitted
+
+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.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_239(val, _values, result)
+ result = @builder.match_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_240(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_241(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[1], nil)
+
+ result
+end
+
+def _reduce_242(val, _values, result)
+ result = @builder.unary_op(val[0], val[1])
+
+ result
+end
+
+def _reduce_243(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+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.logical_op(:and, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_246(val, _values, result)
+ result = @builder.logical_op(:or, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_247(val, _values, result)
+ result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil)
+
+ result
+end
+
+def _reduce_248(val, _values, result)
+ result = @builder.ternary(val[0], val[1],
+ val[2], val[4], val[5])
+
+ result
+end
+
+def _reduce_249(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ result = @builder.def_endless_method(def_t, name_t,
+ val[1], val[2], val[3])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_250(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_method(def_t, name_t,
+ val[1], val[2], method_body)
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_251(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t,
+ val[1], val[2], val[3])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_252(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t,
+ val[1], val[2], method_body)
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @current_arg_stack.pop
+
+ result
+end
+
+# reduce 253 omitted
+
+# reduce 254 omitted
+
+# reduce 255 omitted
+
+# reduce 256 omitted
+
+# reduce 257 omitted
+
+def _reduce_258(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_259(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 260 omitted
+
+# 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
+
+# reduce 265 omitted
+
+def _reduce_266(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_267(val, _values, result)
+ result = val
+
+ result
+end
+
+def _reduce_268(val, _values, result)
+ unless @static_env.declared_forward_args?
+ diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3]
+ end
+
+ result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]]
+
+ result
+end
+
+def _reduce_269(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_270(val, _values, result)
+ result = [ nil, [], nil ]
+
+ result
+end
+
+# reduce 271 omitted
+
+def _reduce_272(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 273 omitted
+
+# reduce 274 omitted
+
+def _reduce_275(val, _values, result)
+ result = val[0] << @builder.associate(nil, val[2], nil)
+
+ result
+end
+
+def _reduce_276(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+
+ result
+end
+
+def _reduce_277(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_278(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_279(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+ result.concat(val[1])
+
+ result
+end
+
+def _reduce_280(val, _values, result)
+ assocs = @builder.associate(nil, val[2], nil)
+ result = val[0] << assocs
+ result.concat(val[3])
+
+ result
+end
+
+def _reduce_281(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_282(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_283(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_284(val, _values, result)
+ result = @builder.block_pass(val[0], val[1])
+
+ result
+end
+
+def _reduce_285(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_286(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_287(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_288(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_289(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_290(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_291(val, _values, result)
+ result = @builder.array(nil, val[0], nil)
+
+ result
+end
+
+# reduce 292 omitted
+
+def _reduce_293(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_294(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_295(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+# reduce 296 omitted
+
+# reduce 297 omitted
+
+# reduce 298 omitted
+
+# reduce 299 omitted
+
+# reduce 300 omitted
+
+# reduce 301 omitted
+
+# reduce 302 omitted
+
+# reduce 303 omitted
+
+# reduce 304 omitted
+
+# reduce 305 omitted
+
+def _reduce_306(val, _values, result)
+ result = @builder.call_method(nil, nil, val[0])
+
+ result
+end
+
+def _reduce_307(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_308(val, _values, result)
+ @lexer.cmdarg.pop
+
+ result = @builder.begin_keyword(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_309(val, _values, result)
+ @lexer.state = :expr_endarg
+
+ result
+end
+
+def _reduce_310(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_311(val, _values, result)
+ @lexer.state = :expr_endarg
+
+ result
+end
+
+def _reduce_312(val, _values, result)
+ result = @builder.begin(val[0], nil, val[3])
+
+ result
+end
+
+def _reduce_313(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_314(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_315(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_316(val, _values, result)
+ result = @builder.array(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_317(val, _values, result)
+ result = @builder.associate(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_318(val, _values, result)
+ result = @builder.keyword_cmd(:return, val[0])
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2])
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0])
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ result = @builder.keyword_cmd(:defined?, val[0],
+ val[2], [ val[3] ], val[4])
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ result = @builder.not_op(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ result = @builder.not_op(val[0], val[1], nil, val[2])
+
+ result
+end
+
+def _reduce_325(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 326 omitted
+
+def _reduce_327(val, _values, result)
+ begin_t, args, body, end_t = val[1]
+ result = @builder.block(val[0],
+ begin_t, args, body, end_t)
+
+ result
+end
+
+# reduce 328 omitted
+
+def _reduce_329(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_330(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_331(val, _values, result)
+ result = @builder.loop(:while, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_332(val, _values, result)
+ result = @builder.loop(:until, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_333(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_334(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_335(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_336(val, _values, result)
+ result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5])
+
+ result
+end
+
+def _reduce_337(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_338(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_339(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_340(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_341(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_342(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_343(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ result = @builder.def_method(def_t, name_t, val[1],
+ val[2], val[3])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_344(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ result = @builder.def_singleton(def_t, recv, dot_t, name_t, val[1],
+ val[2], val[3])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @current_arg_stack.pop
+
+ result
+end
+
+def _reduce_345(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_346(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_347(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 349 omitted
+
+def _reduce_350(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_351(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_352(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_353(val, _values, result)
+ if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda)
+ diagnostic :error, :invalid_return, nil, val[0]
+ end
+
+ result
+end
+
+# reduce 354 omitted
+
+# reduce 355 omitted
+
+def _reduce_356(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 357 omitted
+
+# reduce 358 omitted
+
+# reduce 359 omitted
+
+def _reduce_360(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 361 omitted
+
+def _reduce_362(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 363 omitted
+
+# reduce 364 omitted
+
+def _reduce_365(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_366(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_367(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_368(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 369 omitted
+
+def _reduce_370(val, _values, result)
+ result = val[0].
+ push(val[2])
+
+ result
+end
+
+def _reduce_371(val, _values, result)
+ result = val[0].
+ push(val[2]).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_372(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_373(val, _values, result)
+ result = [ val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_374(val, _values, result)
+ result = @builder.restarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_375(val, _values, result)
+ result = @builder.restarg(val[0])
+
+ result
+end
+
+# reduce 376 omitted
+
+# reduce 377 omitted
+
+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[1])
+
+ result
+end
+
+def _reduce_381(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_382(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_383(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 384 omitted
+
+def _reduce_385(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 390 omitted
+
+def _reduce_391(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_392(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_393(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_394(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_395(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_396(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 399 omitted
+
+def _reduce_400(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_401(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_402(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_403(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_404(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_405(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_406(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_407(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_408(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 409 omitted
+
+def _reduce_410(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_411(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_412(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+ args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2]
+ begin_t, body, end_t = val[4]
+
+ @max_numparam_stack.pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @context.in_lambda = val[1].in_lambda
+
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ result
+end
+
+def _reduce_413(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_414(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_415(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_416(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_417(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_418(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_419(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_421(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_422(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_423(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_424(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_425(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_426(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_427(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_428(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_429(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_430(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_431(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_432(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_433(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_434(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_435(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_437(val, _values, result)
+ result = [ val[0], *val[2], val[3] ]
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_438(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+
+ result
+end
+
+def _reduce_439(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_440(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+
+ result
+end
+
+def _reduce_441(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_442(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_443(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 445 omitted
+
+def _reduce_446(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+ @pattern_hash_keys.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ @pattern_variables.pop
+ @pattern_hash_keys.pop
+ @context.in_kwarg = val[1]
+
+ result
+end
+
+def _reduce_448(val, _values, result)
+ result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]),
+ *val[6] ]
+
+ result
+end
+
+def _reduce_449(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 450 omitted
+
+def _reduce_451(val, _values, result)
+ result = [ val[0], nil ]
+
+ result
+end
+
+def _reduce_452(val, _values, result)
+ result = [ val[0], @builder.if_guard(val[1], val[2]) ]
+
+ result
+end
+
+def _reduce_453(val, _values, result)
+ result = [ val[0], @builder.unless_guard(val[1], val[2]) ]
+
+ result
+end
+
+# reduce 454 omitted
+
+def _reduce_455(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], val[1])
+ result = @builder.array_pattern(nil, [ item ], nil)
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil)
+
+ result
+end
+
+def _reduce_457(val, _values, result)
+ result = @builder.find_pattern(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_458(val, _values, result)
+ result = @builder.array_pattern(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_459(val, _values, result)
+ result = @builder.hash_pattern(nil, val[0], nil)
+
+ result
+end
+
+# reduce 460 omitted
+
+def _reduce_461(val, _values, result)
+ result = @builder.match_as(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 462 omitted
+
+def _reduce_463(val, _values, result)
+ result = @builder.match_alt(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 464 omitted
+
+def _reduce_465(val, _values, result)
+ result = val[0]
+ @pattern_hash_keys.push
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ result = val[0]
+ @pattern_hash_keys.push
+
+ result
+end
+
+# reduce 467 omitted
+
+def _reduce_468(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_469(val, _values, result)
+ @pattern_hash_keys.pop
+ pattern = @builder.find_pattern(nil, val[2], nil)
+ result = @builder.const_pattern(val[0], val[1], pattern, val[3])
+
+ result
+end
+
+def _reduce_470(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_471(val, _values, result)
+ pattern = @builder.array_pattern(val[1], nil, val[2])
+ result = @builder.const_pattern(val[0], val[1], pattern, val[2])
+
+ result
+end
+
+def _reduce_472(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_473(val, _values, result)
+ @pattern_hash_keys.pop
+ pattern = @builder.find_pattern(nil, val[2], nil)
+ result = @builder.const_pattern(val[0], val[1], pattern, val[3])
+
+ result
+end
+
+def _reduce_474(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_475(val, _values, result)
+ pattern = @builder.array_pattern(val[1], nil, val[2])
+ result = @builder.const_pattern(val[0], val[1], pattern, val[2])
+
+ result
+end
+
+def _reduce_476(val, _values, result)
+ result = @builder.array_pattern(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_477(val, _values, result)
+ result = @builder.find_pattern(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_478(val, _values, result)
+ result = @builder.array_pattern(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_479(val, _values, result)
+ @pattern_hash_keys.push
+ result = @context.in_kwarg
+ @context.in_kwarg = false
+
+ result
+end
+
+def _reduce_480(val, _values, result)
+ @pattern_hash_keys.pop
+ @context.in_kwarg = val[1]
+ result = @builder.hash_pattern(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_481(val, _values, result)
+ result = @builder.hash_pattern(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_482(val, _values, result)
+ @pattern_hash_keys.push
+
+ result
+end
+
+def _reduce_483(val, _values, result)
+ @pattern_hash_keys.pop
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_484(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_485(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ result = [ *val[0], val[1] ]
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ match_rest = @builder.match_rest(val[1], val[2])
+ result = [ *val[0], match_rest ]
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ match_rest = @builder.match_rest(val[1], val[2])
+ result = [ *val[0], match_rest, *val[4] ]
+
+ result
+end
+
+def _reduce_489(val, _values, result)
+ result = [ *val[0], @builder.match_rest(val[1]) ]
+
+ result
+end
+
+def _reduce_490(val, _values, result)
+ result = [ *val[0], @builder.match_rest(val[1]), *val[3] ]
+
+ result
+end
+
+# reduce 491 omitted
+
+def _reduce_492(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], val[1])
+ result = [ item ]
+
+ result
+end
+
+def _reduce_493(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], val[2])
+ result = [ *val[0], last_item ]
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = [ val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ result = [ val[0], *val[2], val[4] ]
+
+ result
+end
+
+def _reduce_497(val, _values, result)
+ result = @builder.match_rest(val[0], val[1])
+
+ result
+end
+
+def _reduce_498(val, _values, result)
+ result = @builder.match_rest(val[0])
+
+ result
+end
+
+def _reduce_499(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_500(val, _values, result)
+ result = [ *val[0], val[2] ]
+
+ result
+end
+
+# reduce 501 omitted
+
+def _reduce_502(val, _values, result)
+ result = [ *val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_503(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_504(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_505(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_507(val, _values, result)
+ result = [ *val[0], val[2] ]
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ result = @builder.match_pair(*val[0], val[1])
+
+ result
+end
+
+def _reduce_509(val, _values, result)
+ result = @builder.match_label(*val[0])
+
+ result
+end
+
+def _reduce_510(val, _values, result)
+ result = [:label, val[0]]
+
+ result
+end
+
+def _reduce_511(val, _values, result)
+ result = [:quoted, [val[0], val[1], val[2]]]
+
+ result
+end
+
+def _reduce_512(val, _values, result)
+ result = [ @builder.match_rest(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_513(val, _values, result)
+ result = [ @builder.match_rest(val[0], nil) ]
+
+ result
+end
+
+def _reduce_514(val, _values, result)
+ result = [ @builder.match_nil_pattern(val[0], val[1]) ]
+
+ result
+end
+
+# reduce 515 omitted
+
+# reduce 516 omitted
+
+# reduce 517 omitted
+
+def _reduce_518(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_519(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_520(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_521(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], nil)
+
+ result
+end
+
+# reduce 522 omitted
+
+# reduce 523 omitted
+
+# reduce 524 omitted
+
+def _reduce_525(val, _values, result)
+ result = @builder.range_inclusive(nil, val[0], val[1])
+
+ result
+end
+
+def _reduce_526(val, _values, result)
+ result = @builder.range_exclusive(nil, val[0], val[1])
+
+ result
+end
+
+# reduce 527 omitted
+
+# reduce 528 omitted
+
+# reduce 529 omitted
+
+# reduce 530 omitted
+
+# reduce 531 omitted
+
+# reduce 532 omitted
+
+# reduce 533 omitted
+
+# reduce 534 omitted
+
+def _reduce_535(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+# reduce 536 omitted
+
+def _reduce_537(val, _values, result)
+ result = @builder.assignable(@builder.match_var(val[0]))
+
+ result
+end
+
+def _reduce_538(val, _values, result)
+ name = val[1][0]
+ unless static_env.declared?(name)
+ diagnostic :error, :undefined_lvar, { :name => name }, val[1]
+ end
+
+ lvar = @builder.accessible(@builder.ident(val[1]))
+ result = @builder.pin(val[0], lvar)
+
+ result
+end
+
+def _reduce_539(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_540(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_541(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_542(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_543(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_544(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 545 omitted
+
+# reduce 546 omitted
+
+def _reduce_547(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 548 omitted
+
+def _reduce_549(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 550 omitted
+
+# reduce 551 omitted
+
+# reduce 552 omitted
+
+def _reduce_553(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_554(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_555(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_556(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_557(val, _values, result)
+ string = @builder.string(val[0])
+ result = @builder.dedent_string(string, @lexer.dedent_level)
+
+ result
+end
+
+def _reduce_558(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_559(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_560(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_561(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_562(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_563(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_564(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_565(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_566(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_567(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_568(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_569(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_570(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_571(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_572(val, _values, result)
+ result = val[0] << @builder.string_internal(val[1])
+
+ result
+end
+
+def _reduce_573(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_574(val, _values, result)
+ result = val[0] << @builder.symbol_internal(val[1])
+
+ result
+end
+
+def _reduce_575(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_576(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_577(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_578(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_579(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_580(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_581(val, _values, result)
+ result = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_582(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_583(val, _values, result)
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+
+ result
+end
+
+def _reduce_584(val, _values, result)
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_585(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_586(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_587(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 588 omitted
+
+# reduce 589 omitted
+
+# reduce 590 omitted
+
+def _reduce_591(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_592(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_593(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_594(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_595(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_596(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_597(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.rational(val[0])
+
+ result
+end
+
+def _reduce_598(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.complex(val[0])
+
+ result
+end
+
+def _reduce_599(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_600(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_601(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_602(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_603(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_604(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_605(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_606(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_607(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_608(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_609(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_610(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_611(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_612(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_613(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_614(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_615(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_616(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_617(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_618(val, _values, result)
+ result = [ val[0], val[2] ]
+
+ result
+end
+
+def _reduce_619(val, _values, result)
+ result = nil
+
+ result
+end
+
+# reduce 620 omitted
+
+def _reduce_621(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_622(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_623(val, _values, result)
+ args = [ *val[1], @builder.forward_arg(val[3]) ]
+ result = @builder.args(val[0], args, val[4])
+
+ @static_env.declare_forward_args
+
+ result
+end
+
+def _reduce_624(val, _values, result)
+ result = @builder.forward_only_args(val[0], val[1], val[2])
+ @static_env.declare_forward_args
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+# reduce 625 omitted
+
+def _reduce_626(val, _values, result)
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_627(val, _values, result)
+ @context.in_kwarg = val[0]
+ result = @builder.args(nil, val[1], nil)
+
+ result
+end
+
+def _reduce_628(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_629(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_630(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_631(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_632(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_633(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_634(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_635(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_636(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_637(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_638(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_639(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_640(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_641(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_642(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_643(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_644(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_645(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_646(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_647(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_648(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_649(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_650(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_651(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_652(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_653(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 654 omitted
+
+def _reduce_655(val, _values, result)
+ @static_env.declare val[0][0]
+
+ @max_numparam_stack.has_ordinary_params!
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_656(val, _values, result)
+ @current_arg_stack.set(val[0][0])
+ result = val[0]
+
+ result
+end
+
+def _reduce_657(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_658(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_659(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_660(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_661(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_662(val, _values, result)
+ @current_arg_stack.set(nil)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_663(val, _values, result)
+ @current_arg_stack.set(nil)
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_664(val, _values, result)
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_665(val, _values, result)
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_666(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_667(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_668(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_669(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 670 omitted
+
+# reduce 671 omitted
+
+def _reduce_672(val, _values, result)
+ result = [ @builder.kwnilarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_673(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_674(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ result
+end
+
+def _reduce_675(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_676(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_677(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_678(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_679(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_680(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 681 omitted
+
+# reduce 682 omitted
+
+def _reduce_683(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_684(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 685 omitted
+
+# reduce 686 omitted
+
+def _reduce_687(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_688(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_689(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 690 omitted
+
+def _reduce_691(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_692(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 693 omitted
+
+def _reduce_694(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_695(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_696(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_697(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_698(val, _values, result)
+ result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_699(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# reduce 700 omitted
+
+# reduce 701 omitted
+
+# reduce 702 omitted
+
+# reduce 703 omitted
+
+# reduce 704 omitted
+
+# reduce 705 omitted
+
+# reduce 706 omitted
+
+# reduce 707 omitted
+
+# reduce 708 omitted
+
+# reduce 709 omitted
+
+# reduce 710 omitted
+
+# reduce 711 omitted
+
+def _reduce_712(val, _values, result)
+ result = [:dot, val[0][1]]
+
+ result
+end
+
+def _reduce_713(val, _values, result)
+ result = [:anddot, val[0][1]]
+
+ result
+end
+
+# reduce 714 omitted
+
+# reduce 715 omitted
+
+# reduce 716 omitted
+
+# reduce 717 omitted
+
+def _reduce_718(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_719(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_720(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 721 omitted
+
+# reduce 722 omitted
+
+# reduce 723 omitted
+
+def _reduce_724(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 725 omitted
+
+# reduce 726 omitted
+
+# reduce 727 omitted
+
+def _reduce_728(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby30
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby31.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby31.rb
new file mode 100644
index 000000000..690d4b463
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby31.rb
@@ -0,0 +1,8354 @@
+# -*- 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 Ruby31 < Parser::Base
+
+
+ def version
+ 31
+ end
+
+ def default_encoding
+ Encoding::UTF_8
+ end
+
+ def endless_method_name(name_t)
+ if !%w[=== == != <= >=].include?(name_t[0]) && name_t[0].end_with?('=')
+ diagnostic :error, :endless_setter, nil, name_t
+ end
+ end
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ @max_numparam_stack.push(static: true)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ @max_numparam_stack.pop
+ end
+
+ def try_declare_numparam(node)
+ 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_max_numparam_stack = max_numparam_stack.stack.dup
+ # ignore current block scope
+ raw_max_numparam_stack.pop
+
+ raw_max_numparam_stack.reverse_each do |outer_scope|
+ if outer_scope[:static]
+ # found an outer scope that can't have numparams
+ # like def/class/etc
+ break
+ else
+ outer_scope_has_numparams = outer_scope[:value] > 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
+ # like proc { _1; proc { proc { proc { _2 }} }}
+ # with numparams, so we need to continue
+ end
+ end
+ end
+
+ static_env.declare(name)
+ max_numparam_stack.register(name[1].to_i)
+
+ true
+ else
+ false
+ end
+ end
+##### State transition tables begin ###
+
+clist = [
+'-320,600,620,-119,1214,-121,-118,-320,-320,-320,221,222,1124,-320,-320',
+'-624,-320,239,620,-123,620,925,-624,-110,-320,-732,237,428,-124,311',
+'122,-122,430,429,717,311,-320,-320,620,-320,-320,-320,-320,-320,-116',
+'-117,-124,620,620,-116,1001,828,718,627,892,925,627,126,240,-732,-123',
+'833,125,-117,240,240,-320,-320,-320,-320,-320,-320,-320,-320,-320,-320',
+'-320,-320,-320,-320,-624,-123,-320,-320,-320,-124,687,-320,-119,-110',
+'-320,-121,-120,-320,1125,240,-720,135,-320,306,-320,-511,-320,-320,240',
+'-320,-320,-320,-320,-320,-320,-320,-110,-320,-112,-109,310,-320,-320',
+'-320,126,-120,310,-320,-320,125,-320,-320,-114,-110,-320,-320,-110,-113',
+'-320,-320,126,-115,126,990,-113,125,-320,125,-110,-122,-320,-320,-122',
+'-320,-320,-320,-320,-320,-118,126,126,-719,-107,1000,125,125,-116,-117',
+'-124,126,126,-116,-117,-124,125,125,-108,221,222,218,-320,-320,-320',
+'-320,-320,-320,-320,-320,-320,-320,-320,-320,-320,-320,221,222,-320',
+'-320,-320,311,687,-320,-719,-123,-320,-111,661,-320,-123,648,-119,925',
+'-320,-121,-320,-119,-320,-320,-121,-320,-320,-320,-320,-320,233,-320',
+'-723,-320,-628,-720,-629,221,222,-723,-723,-723,104,105,-723,-723,-723',
+'-320,-723,-120,-320,-320,-102,-320,-120,-320,-723,-723,-723,-723,-723',
+'663,-320,924,-88,-122,219,-112,-723,-723,522,-723,-723,-723,-723,-723',
+'-122,240,660,650,649,-122,-118,-111,-109,220,-744,-118,311,648,233,223',
+'310,-116,240,-117,1063,300,-723,-723,-723,-723,-723,-723,-723,-723,-723',
+'-723,-723,-723,-723,-723,233,682,-723,-723,-723,648,921,-723,106,107',
+'-723,104,105,-723,-723,662,-723,-124,-723,126,-723,-112,-723,-723,125',
+'-723,-723,-723,-723,-723,361,-723,-723,-723,-744,683,-719,-111,-109',
+'648,306,650,649,646,648,362,648,-723,-110,648,-723,-723,-723,-723,240',
+'-723,-744,-723,800,-320,-119,-112,-723,310,-112,-120,-320,-320,-320',
+'650,649,-320,-320,-320,892,-320,-112,-111,-109,859,-111,-109,-112,-320',
+'833,-320,-320,-320,875,106,107,919,-111,-109,-121,-320,-320,431,-320',
+'-320,-320,-320,-320,650,649,646,949,471,650,649,650,649,655,650,649',
+'653,920,1035,861,633,1063,233,-732,634,948,-320,-320,-320,-320,-320',
+'-320,-320,-320,-320,-320,-320,-320,-320,-320,240,-629,-320,-320,-320',
+'648,922,-320,-118,-635,-320,-119,-625,-320,-320,648,-320,-617,-320,-625',
+'-320,510,-320,-320,-617,-320,-320,-320,-320,-320,683,-320,682,-320,507',
+'506,-121,-118,-744,491,648,488,487,486,496,489,521,-320,-108,-623,-320',
+'-320,-320,-320,499,-320,-623,-320,126,-723,-117,612,-320,125,614,-122',
+'-723,-723,-723,650,649,651,-723,-723,633,-723,494,-625,960,650,649,664',
+'-617,-723,-723,504,503,507,506,-121,633,-119,500,523,960,-723,-723,524',
+'-723,-723,-723,-723,-723,239,650,649,659,491,-321,488,487,486,496,489',
+'-623,-321,600,491,240,488,487,486,499,489,-321,-723,-723,-723,-723,-723',
+'-723,-723,-723,-723,-723,-723,-723,-723,-723,558,-628,-723,-723,-723',
+'494,688,-723,570,126,-723,648,572,-723,125,710,507,506,-723,574,-723',
+'500,-723,-723,-114,-723,-723,-723,-723,-723,-614,-723,-723,-723,-321',
+'126,-123,-614,-614,-614,125,135,-614,-614,-614,-614,-614,-723,-107,-87',
+'-723,-723,-614,-723,-614,-723,-614,-614,-614,931,-116,485,-723,240,927',
+'-120,-614,-614,928,-614,-614,-614,-614,-614,585,650,649,646,586,-311',
+'227,-620,-621,227,950,951,-311,304,-620,-621,304,612,593,237,611,-311',
+'-614,-614,-614,-614,-614,-614,-614,-614,-614,-614,-614,-614,-614,-614',
+'-614,227,-614,-614,-614,227,-614,-614,592,315,-614,240,1188,-614,-614',
+'233,-614,590,-614,126,-614,638,-614,-614,125,-614,-614,-614,-614,-614',
+'-115,-614,-617,-614,-311,228,-620,-621,228,-617,-617,-617,-124,233,-617',
+'-617,-617,-614,-617,306,-614,-614,-614,-614,597,-614,-617,-614,-617',
+'-617,-617,612,-614,603,614,-614,228,264,-617,-617,228,-617,-617,-617',
+'-617,-617,606,227,240,227,615,-356,-619,-622,675,616,636,574,-356,-619',
+'-622,612,627,673,614,638,420,-356,-617,-617,-617,-617,-617,-617,-617',
+'-617,-617,-617,-617,-617,-617,-617,631,754,-617,-617,-617,227,-617,-617',
+'1149,1150,-617,499,630,-617,-617,632,-617,875,-617,640,-617,628,-617',
+'-617,665,-617,-617,-617,-617,-617,228,-617,228,-617,-356,-619,-622,668',
+'227,669,954,240,958,957,1197,1188,959,-617,-293,500,-617,-617,-617,-617',
+'638,-617,671,-617,672,-723,676,1056,-617,240,-109,-617,-723,-723,-723',
+'496,228,680,-723,-723,-320,-723,-118,956,264,499,681,-320,306,-723,-723',
+'694,-720,985,892,695,-320,114,113,115,116,-723,-723,240,-723,-723,-723',
+'-723,-723,228,221,222,697,118,117,119,261,700,507,506,263,262,701,500',
+'703,264,104,105,221,222,358,-723,-723,-723,-723,-723,-723,-723,-723',
+'-723,-723,-723,-723,-723,-723,-320,705,-723,-723,-723,-385,688,-723',
+'227,719,-723,720,261,-723,227,1164,263,262,-723,724,-723,226,-723,-723',
+'1162,-723,-723,-723,-723,-723,224,-723,-723,-723,726,102,90,93,94,732',
+'95,97,96,98,754,985,892,-723,91,101,-723,-723,90,-111,499,-723,85,733',
+'92,106,107,264,-723,264,91,-120,333,81,82,83,11,65,264,228,92,71,72',
+'264,240,228,75,-723,73,74,76,35,36,79,80,788,240,240,500,240,84,33,32',
+'114,113,115,116,-102,803,23,1056,240,606,281,282,10,53,335,12,118,117',
+'119,108,64,110,109,111,814,112,120,121,-320,104,105,49,50,48,-321,-320',
+'-723,819,-626,240,-720,-321,821,-723,-320,-626,280,279,-719,824,-321',
+'829,-723,45,-626,830,38,834,858,66,67,227,862,68,863,40,-294,876,602',
+'52,491,-723,488,487,486,558,489,520,24,558,888,892,910,102,90,93,94',
+'913,95,97,96,98,914,-320,240,917,91,101,240,-321,926,-723,943,-626,85',
+'944,92,106,107,945,962,46,47,333,81,82,83,11,65,964,300,970,71,72,972',
+'974,228,75,-716,73,74,76,35,36,79,80,572,574,496,814,240,84,33,32,114',
+'113,115,116,499,1159,23,488,487,486,306,489,10,53,335,12,118,117,119',
+'108,64,110,109,111,306,112,120,121,227,104,105,49,50,48,-627,519,-614',
+'507,506,814,264,-627,500,-614,520,892,987,988,-716,240,-627,240,-614',
+'45,998,240,38,-295,240,66,67,1009,1013,68,1159,40,488,487,486,52,489',
+'-716,-293,491,1017,488,487,486,24,489,700,718,1020,102,90,93,94,1022',
+'95,97,96,98,1024,228,1026,1026,91,101,240,-627,774,-614,240,240,85,1054',
+'92,106,107,1057,710,46,47,333,81,82,83,11,65,714,853,854,71,72,855,120',
+'121,75,-717,73,74,76,35,36,79,80,129,130,131,132,133,84,33,32,114,113',
+'115,116,925,491,23,488,487,486,972,489,10,53,335,12,118,117,119,108',
+'64,110,109,111,1069,112,120,121,240,104,105,49,50,48,814,491,-617,488',
+'487,486,1086,489,710,-617,1088,1093,1094,1099,-717,1100,1101,714,-617',
+'45,-296,1114,38,1115,1116,66,67,240,240,68,240,40,240,240,240,52,925',
+'-717,710,491,1123,488,487,486,24,489,240,714,1129,102,90,93,94,1130',
+'95,97,96,98,1132,700,1135,1138,91,101,1140,1142,240,-617,-385,1154,85',
+'1165,92,106,107,1166,710,46,47,333,81,82,83,11,65,1026,1026,1026,71',
+'72,1173,1186,1189,75,1194,73,74,76,35,36,79,80,256,1195,694,1115,1205',
+'84,33,32,114,113,115,116,1205,700,23,129,130,131,132,133,10,53,335,12',
+'118,117,119,108,64,110,109,111,1208,112,120,121,1210,104,105,49,50,48',
+'264,268,269,270,271,281,282,276,277,272,273,1212,257,258,1214,1214,274',
+'275,240,45,1026,255,38,1205,-720,66,67,-719,1231,68,1214,40,261,1214',
+'267,52,263,262,1214,259,260,280,279,265,24,266,3,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46,47,333,81,82,83,11',
+'65,,,,71,72,,,,75,,73,74,76,35,36,79,80,129,130,131,132,133,84,33,32',
+'114,113,115,116,,,23,,,,,677,10,53,335,12,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277',
+'272,273,,257,258,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263',
+'262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,278,,-265,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72',
+',,,75,,73,74,76,35,36,79,80,129,130,131,132,133,84,33,32,114,113,115',
+'116,,,23,,,,,889,10,53,335,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277,272,273,,257',
+'258,,,274,275,,45,,,337,,,66,67,,,68,,40,261,,267,52,263,262,,259,260',
+'280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,278,,,,',
+'85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35',
+'36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,677,10,53,335,12,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,268,269',
+'270,271,281,282,276,277,272,273,,257,258,,,274,275,,45,,,337,,,66,67',
+',,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46,47,333,81,82',
+'83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,918,10,53,335,12,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277,272,273',
+',257,258,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259',
+'260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,278',
+',,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74',
+'76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12',
+'118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,268',
+'269,270,271,281,282,276,277,272,273,,257,258,,,274,275,,45,,,38,,,66',
+'67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46,47,333,81',
+'82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277,272,273,,257',
+'258,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260',
+'280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,278,,,,',
+'85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35',
+'36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,268,269,270',
+'271,281,282,276,277,272,273,,257,258,,,274,275,,45,,,38,,,66,67,,,68',
+',40,261,,267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46,47,7,81,82,83,11',
+'65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,10,53,9,12,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,264,268,269,270,271,281,282,276,277,272,273,,257,258,,',
+'274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279',
+'265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,240,278,,,,,85,,92',
+'106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79',
+'80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,268,269,270,271',
+'281,282,276,277,272,273,,257,258,,,274,275,,45,,,38,,,66,67,,,68,,40',
+'261,,267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46,47,333,81,82,83,11',
+'65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121,',
+'104,105,49,50,48,264,268,269,270,271,281,282,276,277,272,273,,257,258',
+',,274,275,,45,,,337,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280',
+'279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,278,,,,,85,',
+'92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36',
+'79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,268,269,270,271',
+'281,282,276,277,272,273,,257,258,,,274,275,,45,,,38,,,66,67,,,68,,40',
+'261,,267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46,47,333,81,82,83,11',
+'65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121,',
+'104,105,49,50,48,264,268,269,270,271,281,282,276,277,272,273,,257,258',
+',,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280',
+'279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,278,,,,,85,',
+'92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36',
+'79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,268,269,270,271',
+'281,282,276,277,272,273,,257,258,,,274,275,,45,,,38,,,66,67,,,68,,40',
+'261,,267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46,47,333,81,82,83,11',
+'65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121,',
+'104,105,49,50,48,264,268,269,270,271,281,282,276,277,272,273,,-745,-745',
+',,274,275,,45,,,38,,,66,67,,264,68,,40,261,,267,52,263,262,,259,260',
+'280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,261,,91,101,263,262',
+',259,260,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,',
+'73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,264,491,23,488,487',
+'486,,489,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,264,,261,,,,263,262,710,259,260,,,,,,274,275,,45,,,38,',
+',66,67,,,68,,40,261,,267,52,263,262,,259,260,,,265,24,266,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,333,81,82',
+'83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277,272,273,,-745',
+'-745,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260',
+'280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85',
+',92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36',
+'79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,268,269,270,271',
+'281,282,276,277,272,273,,-745,-745,,,274,275,,45,,,38,,,66,67,,,68,',
+'40,261,,267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93,94,',
+'95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,333,81,82,83,11',
+'65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121,',
+'104,105,49,50,48,264,,,,,,,,,,,,,,,,274,275,,45,,,38,,,66,67,,,68,,40',
+'261,,267,52,263,262,,259,260,,,265,24,266,,,,102,90,93,94,,95,97,96',
+'98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71',
+'72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,',
+',,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,264,268,269,270,271,281,282,276,,272,273,,,,,,274,275,,45,',
+',38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47',
+'7,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,23,,,,,,10,53,9,12,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,264,268,269,270,271,281,282,,,272,273',
+',,,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260',
+'280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85',
+',92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36',
+'79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,-745,-745,-745',
+'-745,281,282,,,-745,-745,,,,,,274,275,,45,,,38,,,66,67,,,68,,40,261',
+',267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96',
+'98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71',
+'72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,',
+',,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,264,-745,-745,-745,-745,281,282,,,-745,-745,,,,,,274,275,,45',
+',,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47',
+'333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,264,-745,-745,-745,-745,281,282,,,-745',
+'-745,,,,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259',
+'260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,',
+',85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76',
+'35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,-745,-745',
+'-745,-745,281,282,,,-745,-745,,,,,,274,275,,45,,,38,,,66,67,,,68,,40',
+'261,,267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65',
+',,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,',
+',23,,,,,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,264,-745,-745,-745,-745,281,282,,,-745,-745,,,,,,274,275',
+',45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24',
+'266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106',
+'107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113',
+'115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,49,50,48,264,-745,-745,-745,-745,281,282,,,-745,-745,,,,,,274',
+'275,,245,,,253,,,66,67,,,68,,,261,,267,52,263,262,,259,260,280,279,265',
+'250,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277,272,273,,-745',
+'-745,,,274,275,,245,,,253,,,66,67,,,68,,,261,,267,52,263,262,,259,260',
+'280,279,265,250,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84',
+'349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,264,,,,,,,,,,,,,,,,274,275,,245,',
+',253,,,66,67,,,68,,,261,,267,52,263,262,,259,260,,,,250,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47',
+',75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,',
+',,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,264,,,,,,,,,,,,,,,,274,275,,245,,,253,,,66,67,,,68,,,261,,,52,263',
+'262,,259,260,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84',
+'349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,264,,,,,,,,,,,,,,,,274,275,,245,',
+',253,,,66,67,,,68,,,261,,267,52,263,262,,259,260,,,,250,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11',
+'65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,10,53,,12,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,',
+',,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67',
+',,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,',
+',,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79',
+'80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,',
+'254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,436,,,,52,,,,,,',
+',,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67',
+',,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,',
+',,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79',
+'80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,',
+'253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,',
+',,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35',
+'36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,,,,85,,92,106,107,-441,,46,47,,,,-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,,306,-441,,,-441,-441,,-441,,-441,,-441,,-441,-441,,-441,-441',
+'-441,-441,-441,,-441,-441,-441,,,,,,,,,,,,,,-441,,,-441,-441,,-441,',
+'-441,81,82,83,,65,,-441,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,',
+'81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,',
+',84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66',
+'67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,',
+',,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73',
+'74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,',
+',118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,',
+',,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-327,,46,47,,,,-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,,315,-327,,,-327,-327,,-327,,-327,,-327,,-327,-327,,-327,-327',
+'-327,-327,-327,,-327,,-327,,,,,,,,,,,,,,-327,,,-327,-327,,-327,,-327',
+'81,82,83,,65,,-327,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,',
+'91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355',
+'79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,',
+'245,,,253,,,66,67,,,68,,797,,322,,52,,,328,,,,,,250,,,,,102,325,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82',
+'83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,,10,53,,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,',
+',52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,',
+'91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36',
+'79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,797,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73',
+'74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,',
+',118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,',
+',,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,867,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82',
+'83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,,10,53,,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,',
+',52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,',
+'91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355',
+'79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35',
+'36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,',
+',,,,245,,,253,,,66,67,,,68,,324,,322,,52,,,328,,,,,,250,,,,,102,325',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46',
+'47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,',
+',,,53,,,118,117,119,108,64,110,109,111,327,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324,,322,,52,,,328,,,',
+',,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,',
+',,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96',
+'98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76',
+'354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,',
+',,,,,245,,,253,,,66,67,,,68,,324,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,',
+'118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,',
+',,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47',
+',75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,',
+',,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121,,104,105,49',
+'50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,328,,,,,,250',
+',,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121',
+',104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,797,,,',
+'52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,240,,,81',
+'82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,',
+'84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66',
+'67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,',
+'253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,',
+',,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,',
+'118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,',
+',,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47',
+',75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121,,104,105,49',
+'50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324,,322,,52,,,328',
+',,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106',
+'107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,',
+',84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38',
+',,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,',
+'91,101,,,,,,420,85,,92,106,107,,,46,47,81,82,83,,65,,,,71,72,,,,75,',
+'73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53',
+',,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,',
+',,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46',
+'47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116',
+',,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121',
+',104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,322,',
+'52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84',
+'349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,',
+',66,67,,,68,,797,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96',
+'98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76',
+'354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,',
+',,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73',
+'74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,',
+',118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,',
+',,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46',
+'47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-275,,46',
+'47,,,,-275,-275,-275,,,-275,-275,-275,491,-275,488,487,486,496,489,',
+',-275,-275,-275,,,,499,,,,,,-275,-275,,-275,-275,-275,-275,-275,,491',
+',488,487,486,496,489,494,,,,,,,,499,504,503,507,506,,,,500,,491,,488',
+'487,486,496,489,-275,,,,,494,,-275,499,,,,306,-275,504,503,507,506,',
+',,500,,,,,,,,,494,485,,,,-275,-275,,,,,507,506,,,,500,,,,-275,,,-275',
+',81,82,83,-275,65,,485,,71,72,-275,,,75,,73,74,76,354,355,79,80,,,,',
+',84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79',
+'80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73',
+'74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,',
+',,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116',
+',,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121',
+',104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52',
+',,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84',
+'349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66',
+'67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,',
+'253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,',
+',,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,',
+',,,,245,,,253,,,66,67,,,68,,324,,,,52,,,328,,,,,,250,,,,,102,325,93',
+'94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11',
+'65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,10,53,,12,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,',
+',,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52',
+',,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65',
+'92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67',
+',,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,',
+',,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66',
+'67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,',
+'253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,',
+',,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,',
+',,,,245,,,253,,,66,67,,,68,,797,,322,,52,,,328,,,,,,250,,,,,102,325',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46',
+'560,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121,,104,105,49',
+'50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324,,322,,52,,,328',
+',,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65',
+'92,106,107,71,72,46,560,,75,,73,74,76,354,355,79,80,,,,,,84,349,357',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84',
+'349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66',
+'67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,',
+',,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96',
+'98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76',
+'35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,',
+',,,,245,,,253,,,66,67,,,68,,324,,322,,52,,,328,,,,,,250,,,,,102,325',
+'93,94,,95,97,96,98,,,,,91,101,240,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,',
+'254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,',
+',,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67',
+',,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,',
+',,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79',
+'80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,',
+'254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,',
+',,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67',
+',,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,',
+',,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74',
+'76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,,12,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,',
+'118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,',
+',,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47',
+',75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53',
+',,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,',
+',,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46',
+'47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,',
+',,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48',
+',,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,',
+',,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116',
+',,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47',
+'81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114',
+'113,115,116,,,23,,,,,,10,53,9,12,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40',
+',,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,420,85',
+',92,106,107,,,46,47,81,82,83,,65,,,,71,72,,,,75,,73,74,76,35,36,79,80',
+',,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96',
+'98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76',
+'35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-725,,46,47,,,,-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,-725,,,,,,,,,,,,,,-725,,,-725,-725,-725,-725,,-725',
+'-724,-725,,,,,-725,-724,-724,-724,,,-724,-724,-724,,-724,,,,,,,,-724',
+'-724,-724,-724,-724,,,,114,113,115,116,-724,-724,,-724,-724,-724,-724',
+'-724,,,,,118,117,119,,,,,,,,,,,104,105,,,358,-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,,102,90,93,94,,95,97,96,98,,,,-724,91,101,-724',
+'-724,-724,-724,,-724,85,-724,92,106,107,-275,-724,81,82,83,11,65,-275',
+'-275,-275,71,72,-275,-275,-275,75,-275,73,74,76,35,36,79,80,-275,-275',
+'-275,-275,,84,33,32,114,113,115,116,-275,-275,23,-275,-275,-275,-275',
+'-275,10,53,9,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275',
+'-275,-275,,,-275,-275,-275,45,,-275,38,306,-275,66,67,-275,-275,68,-275',
+'40,-275,,-275,52,-275,-275,,-275,-275,-275,-275,-275,24,-275,-275,-275',
+',102,90,93,94,,95,97,96,98,,,,-275,91,101,-275,-275,,-275,,-275,85,',
+'92,106,107,,-275,46,47,81,82,83,,65,,,,71,72,,,,75,,73,74,76,35,36,79',
+'80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,',
+'253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,',
+',,91,101,126,,,,,125,85,,92,106,107,-312,,46,47,,,,-312,-312,-312,,',
+'-312,-312,-312,,-312,,,,,,,,-312,,-312,-312,-312,,,,,,,,-312,-312,,-312',
+'-312,-312,-312,-312,,,,,,,,,,,,,,,,,,,,,,,-312,-312,-312,-312,-312,-312',
+'-312,-312,-312,-312,-312,-312,-312,-312,,,-312,-312,-312,,,-312,,,-312',
+',,-312,-312,,-312,,-312,,-312,,-312,-312,,-312,-312,-312,-312,-312,',
+'-312,,-312,,,,,,,,,,,,,,-312,,,-312,-312,-312,-312,,-312,,-312,,81,82',
+'83,-312,65,,,,71,72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,436,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,',
+'253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,',
+',,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,',
+',,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73',
+'74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,',
+',118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,',
+',,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46',
+'47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116',
+',,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324,,322,,52',
+',,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',436,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81',
+'82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84',
+'33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67',
+',,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,',
+',,,,84,349,357,114,113,115,116,,,254,,,,,,,350,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,,,358,,,,,,,,,,,,,,,,,,,,1107,,,253',
+',,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,354,355,79,80,,,',
+',,84,349,357,114,113,115,116,,,254,,,,,,,350,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,,,358,,,,,,,,,,,,,,,,,,,,1146,,,253,,',
+'66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,',
+',,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,354,355,79,80,,,,',
+',84,349,357,114,113,115,116,,,254,,,,,,,350,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,,,358,,,,,,,,,,,,,,,,,,,,346,,,253,,,66',
+'67,,,68,,,491,,488,487,486,496,489,,,,,,,,,499,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,588,,494,85,,92,106,107,81,82,83,,65,507,506,,71',
+'72,500,,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116',
+',,254,,,,,,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+',,358,,,,,,,,,,,,,,,,,,,,346,,,342,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+',,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,346,,,253,,,66,67,,,68,,,491,,488,487,486,496,489',
+',,,,,,,,499,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,360,,494,85,,92',
+'106,107,81,82,83,,65,507,506,,71,72,500,,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,350,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,,,358,,,,,,,,,,,,,,,,,,,,346,,,342',
+',,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,354,355,79,80,,,',
+',,84,349,357,114,113,115,116,,,254,,,,,,,350,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,,,358,,,,,,,,,,,,,,,,,,,,346,,,342,,,66',
+'67,,,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81',
+'82,83,85,65,92,106,107,71,72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,350,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,,,358,,,,,,,,,,,,,,,,,,,,1146,,,253,,,66,67,,',
+'68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,350,,,118,117,119,400,64,110,109,401',
+',112,120,121,,104,105,,,358,,,,,,,,,,,,,,,,,407,,,402,,,253,,,66,67',
+',,68,,,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,350,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,,,358,,,,,,,,,,,,,,,,,,,,346,,,342,,,66,67,,,68',
+',,,,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349,357',
+'114,113,115,116,,,254,,,,,,,350,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,,,358,,,,,,,,,,,,,,,,,,,,346,,,342,,,66,67,,,68,,,',
+',,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85',
+'65,92,106,107,71,72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,350,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,,,358,,,,,,,,,,,,,,,,,,,,346,,,342,,,66,67,,,68,,341,,',
+',,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65',
+'92,106,107,71,72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113',
+'115,116,,,254,,,,,,,350,,,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,,,358,,,,,,,,,,,,,,,,,,,,395,,,38,,,66,67,,,68,,40,,,,,,,,',
+',,,,,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106',
+'107,71,72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,350,,,118,117,119,400,64,110,109,401,,112,120,121,,104',
+'105,,,358,,,,,,,,,,,,,,,,,,,,402,,,253,,,66,67,,,68,,,,,,,,,,,,,,,,',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,185,196',
+'186,209,182,202,192,191,212,213,207,190,189,184,210,214,215,194,183',
+'197,201,203,195,188,,,,204,211,206,205,198,208,193,181,200,199,,,,,',
+'180,187,178,179,175,176,177,138,140,137,,139,,,,,,,,169,170,,166,148',
+'149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,,,,,,,,,163,162',
+',147,168,165,164,173,160,161,155,153,145,167,146,,,174,102,,,,,,,,,',
+',,,,101,185,196,186,209,182,202,192,191,212,213,207,190,189,184,210',
+'214,215,194,183,197,201,203,195,188,,,,204,211,206,205,198,208,193,181',
+'200,199,,,,,,180,187,178,179,175,176,177,138,140,,,139,,,,,,,,169,170',
+',166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,,,,,',
+',,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,,,174,102',
+',,,,,,,,,,,,,101,185,196,186,209,182,202,192,191,212,213,207,190,189',
+'184,210,214,215,194,183,197,201,203,195,188,,,,204,211,206,205,198,208',
+'193,181,200,199,,,,,,180,187,178,179,175,176,177,138,140,,,139,,,,,',
+',,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159',
+',,,,,,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146',
+',,174,102,,,,,,,,,,,,,,101,185,196,186,209,182,202,192,191,212,213,207',
+'190,189,184,210,214,215,194,183,197,201,203,195,188,,,,204,211,206,205',
+'198,208,193,181,200,199,,,,,,180,187,178,179,175,176,177,138,140,,,139',
+',,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158',
+'159,,,,,,,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167',
+'146,,,174,102,,,,,,,,,,,,,,101,185,196,186,209,182,202,192,191,212,213',
+'207,190,189,184,210,214,215,194,183,197,201,203,195,188,,,,204,211,206',
+'294,293,295,292,181,200,199,,,,,,180,187,178,179,289,290,291,287,140',
+'110,109,288,,112,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152',
+',,,171,172,158,159,,,,,,299,,,,,,,,163,162,,147,168,165,164,173,160',
+'161,155,153,145,167,146,,,174,114,113,115,116,,,,,,491,,488,487,486',
+'496,489,118,117,119,774,,,,777,499,,,,,104,105,,,358,,,,,,,,,,,,,494',
+',,,,,,776,,,747,507,506,,745,,500,746,,,,,,,,,,,,,,,,775,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,114,113,115,116,485,,85,,92,106,107,,,762',
+'763,,118,117,119,774,,,491,777,488,487,486,496,489,104,105,,,358,,,',
+'499,,,,,,,,,,,,,,,,776,,,747,,,494,745,,,746,,,,,504,503,507,506,,,',
+'500,,,,775,,,,102,90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,',
+',85,,92,106,107,,,762,763,,118,117,119,774,,,491,777,488,487,486,496',
+'489,104,105,,,358,,,,499,,,,,,,,,,,,,,,,776,,,747,,,494,745,,,746,,749',
+',,504,503,507,506,,,,500,,,,775,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,114,113,115,116,,,85,,92,106,107,,,762,763,,118,117,119,774,,,,777',
+'754,,,,,104,105,,,358,499,,,,,,,,,,,,,,,,,,,776,,,747,,,,745,,,746,',
+'749,,,,,,,500,,,,,,,775,,,,102,755,93,94,,95,97,96,98,,,,,91,101,114',
+'113,115,116,,,85,,92,106,107,,,762,763,,118,117,119,774,,,491,777,488',
+'487,486,496,489,104,105,,,358,,,,499,,,,,,,,,,,,,,,,776,,,747,,,494',
+'745,,,746,,,,,504,503,507,506,,,,500,,,,775,,,,102,90,93,94,,95,97,96',
+'98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,762,763,,118,117,119',
+'774,,,491,777,488,487,486,496,489,104,105,,,358,,,,499,,,,,,,,,,,,,',
+',,776,,,747,,,494,745,,,746,,749,,,,,507,506,,,,500,,,,775,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,762',
+'763,,118,117,119,774,,,,777,,,,,,104,105,,,358,,,,,,,,,,,,,,,,,,,,776',
+',,747,,,,745,,,746,,749,,,,,,,491,,488,487,486,496,489,775,,,,102,90',
+'93,94,499,95,97,96,98,,,,,91,101,240,114,113,115,116,,85,,92,106,107',
+'494,,762,763,,,118,117,119,774,,507,506,777,,,500,,,104,105,,,358,,',
+',,,,,,,,,,,,,,,,,776,,,747,,,,745,,,746,,,485,,,,,,,,,,,,,775,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,',
+'762,763,,118,117,119,774,,,,777,754,,,,,104,105,,,358,499,,,,,,,,,,',
+',,,,,,,,776,,,747,,,,745,,,746,,749,,,,,,,500,,,,,,,775,,,,102,755,93',
+'94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,762,763',
+',118,117,119,774,,,,777,754,,,,,104,105,,,358,499,,,,,,,,,,,,,,,,,,',
+'776,,,747,,,,745,,,746,,749,,,,,,,500,,,,,,,775,,,,102,755,93,94,,95',
+'97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,762,763,185,196,186,209,182',
+'202,192,191,212,213,207,190,189,184,210,214,215,194,183,197,201,203',
+'195,188,,,,204,211,206,205,198,208,193,181,200,199,,,,,,180,187,178',
+'179,175,176,177,138,140,,,139,,,,,,,,169,170,,166,148,149,150,157,154',
+'156,,,151,152,,,,171,172,158,159,,,,,,,,,,,,,,163,162,,147,168,165,164',
+'173,160,161,155,153,145,167,146,,,174,114,113,115,116,,,491,,488,487',
+'486,496,489,,,,118,117,119,774,,499,,777,754,,,,,104,105,,,358,499,',
+',,,,,,,494,,,,,,,,,,776,507,506,747,,,500,745,,,746,,749,,,,,,,500,',
+',,,,,775,,,,102,755,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,',
+'85,,92,106,107,,,762,763,,118,117,119,774,,,,777,754,,,,,104,105,,,358',
+'499,,,,,,,,,,,,,,,,,,,776,,,747,,,,745,,,746,,749,,,,,,,500,,,,,,,775',
+',,,102,755,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106',
+'107,,,762,763,,118,117,119,774,,,,777,,,,,,104,105,,,358,,,,,,,,,,,',
+',,,,,,,,776,,,747,,,,745,,,746,,,,,,,,,,,,,,,,775,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,762,763,,118',
+'117,119,774,,,,777,,,,,,104,105,,,358,,,,,,,,,,,,,,,,,,,,776,,,747,',
+',,745,,,746,,,,,,,,,,,,,,,,775,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+'114,113,115,116,,,85,,92,106,107,,,762,763,,118,117,119,774,,,,777,',
+',,,,104,105,,,358,,,,,,,,,,,,,,,,,,,,776,,,747,,,,745,,,746,,,,,,,,',
+',,,,,,,775,,,,102,90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,',
+',85,,92,106,107,,,762,763,,118,117,119,774,,,,777,,,,,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,776,,,747,,,,745,,,746,,,,,,,,,,,,,,,,775,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,',
+'762,763,,118,117,119,774,,,,777,,,,,,104,105,,,358,,,,,,,,114,113,115',
+'116,,,,,,,,,776,,,747,118,117,119,745,,,746,,1053,,,,,104,105,,,358',
+',,,,775,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107',
+',,762,763,491,,488,487,486,496,489,,,,,102,90,93,94,499,95,97,96,98',
+',,,,91,101,114,113,115,116,,,85,,92,106,107,494,,,,,118,117,119,,504',
+'503,507,506,,,,500,,104,105,,,358,,,,,,,,,,,,491,,488,487,486,496,489',
+',,,,,,,,499,,,,,,491,485,488,487,486,496,489,,,,,,,,,499,494,102,90',
+'93,94,,95,97,96,98,,507,506,,91,101,500,,,,,494,85,,92,106,107,,,,504',
+'503,507,506,,,491,500,488,487,486,496,489,,491,,488,487,486,496,489',
+'499,,,,,485,,,499,,491,,488,487,486,496,489,,,,,,494,644,,499,485,,',
+',494,504,503,507,506,,,,500,504,503,507,506,,,,500,494,,,,,,,,,504,503',
+'507,506,,,491,500,488,487,486,496,489,,,,,,,,,499,485,,,,,,,,485,,,',
+',,,,,,,,,494,,,,485,,,,,,,507,506,872,469,,500,871,,,,,,,,169,170,,166',
+'148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,485',
+',,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,842,469,174',
+',843,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172',
+'158,159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153',
+'145,167,146,837,462,174,,838,,,,,,,,169,170,,166,148,149,150,157,154',
+'156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147,168,165',
+'164,173,160,161,155,153,145,167,146,465,469,174,,464,,,,,,,,169,170',
+',166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,',
+',,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,729,469',
+'174,,730,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171',
+'172,158,159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173,160,161,155',
+'153,145,167,146,556,462,174,,557,,,,,,,,169,170,,166,148,149,150,157',
+'154,156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147,168',
+'165,164,173,160,161,155,153,145,167,146,458,462,174,,459,,,,,,,,169',
+'170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306',
+',,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,556',
+'462,174,,557,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,',
+',,171,172,158,159,,,,,,,,,,,,,,163,162,,147,168,165,164,173,160,161',
+'155,153,145,167,146,729,469,174,,730,,,,,,,,169,170,,166,148,149,150',
+'157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147',
+'168,165,164,173,160,161,155,153,145,167,146,727,462,174,,728,,,,,,,',
+'169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,',
+',,,306,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146',
+'807,462,174,,808,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152',
+',,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173,160',
+'161,155,153,145,167,146,810,469,174,,811,,,,,,,,169,170,,166,148,149',
+'150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162',
+',147,168,165,164,173,160,161,155,153,145,167,146,1200,462,174,,1201',
+',,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158',
+'159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145',
+'167,146,869,462,174,,870,,,,,,,,169,170,,166,148,149,150,157,154,156',
+',,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147,168,165,164',
+'173,160,161,155,153,145,167,146,1202,469,174,,1203,,,,,,,,169,170,,166',
+'148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,',
+',163,162,,147,168,165,164,173,160,161,155,153,145,167,146,839,469,174',
+',840,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172',
+'158,159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153',
+'145,167,146,1218,469,174,,1217,,,,,,,,169,170,,166,148,149,150,157,154',
+'156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147,168,165',
+'164,173,160,161,155,153,145,167,146,727,462,174,,728,,,,,,,,169,170',
+',166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,',
+',,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,,,174' ]
+ racc_action_table = arr = ::Array.new(28717, 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 = [
+'464,521,1016,837,1236,838,992,464,464,464,515,515,1053,464,464,289,464',
+'23,835,631,1087,1058,289,807,464,927,443,137,396,785,3,840,137,137,501',
+'31,464,464,1089,464,464,464,464,464,1104,1105,1108,384,385,392,850,622',
+'501,625,1092,932,1092,331,23,928,521,625,331,393,1058,927,464,464,464',
+'464,464,464,464,464,464,464,464,464,464,464,289,1165,464,464,464,443',
+'464,464,1200,807,464,1201,839,464,1053,928,840,9,464,31,464,932,464',
+'464,515,464,464,464,464,464,871,464,837,464,838,992,785,871,871,871',
+'1016,1202,31,871,871,1016,871,464,631,807,464,464,807,464,871,464,835',
+'396,1087,835,840,835,464,1087,807,464,871,871,1203,871,871,871,871,871',
+'1222,622,1089,839,392,850,622,1089,1104,1105,1108,384,385,1104,1105',
+'1108,384,385,393,981,981,12,871,871,871,871,871,871,871,871,871,871',
+'871,871,871,871,553,553,871,871,871,69,871,871,1202,1165,871,839,416',
+'871,1165,1127,1200,735,871,1201,871,1200,871,871,1201,871,871,871,871',
+'871,251,871,729,871,243,1203,244,641,641,729,729,729,358,358,729,729',
+'729,871,729,1202,871,871,802,871,1202,871,729,729,729,729,729,417,871',
+'735,802,871,14,808,729,729,246,729,729,729,729,729,1203,981,416,1127',
+'1127,1203,1222,810,979,15,251,1222,351,576,252,17,69,243,553,244,1127',
+'27,729,729,729,729,729,729,729,729,729,729,729,729,729,729,20,458,729',
+'729,729,656,729,729,358,358,729,48,48,729,729,417,729,246,729,641,729',
+'808,729,729,641,729,729,729,729,729,42,729,729,729,252,459,810,810,979',
+'947,351,576,576,576,658,45,414,729,458,413,729,729,729,729,53,729,20',
+'729,576,730,458,808,729,351,808,729,730,730,730,656,656,730,730,730',
+'1220,730,808,810,979,656,810,979,459,730,1220,730,730,730,1006,48,48',
+'727,810,979,459,730,730,216,730,730,730,730,730,947,947,947,756,229',
+'658,658,414,414,414,413,413,413,728,923,658,402,947,19,746,402,756,730',
+'730,730,730,730,730,730,730,730,730,730,730,730,730,746,44,730,730,730',
+'412,730,730,1006,231,730,727,291,730,730,418,730,288,730,291,730,235',
+'730,730,288,730,730,730,730,730,870,730,869,730,700,700,728,923,19,972',
+'415,972,972,972,972,972,245,730,44,290,730,730,730,730,972,730,290,730',
+'996,872,44,822,730,996,822,730,872,872,872,412,412,412,872,872,776,872',
+'972,291,776,418,418,418,288,872,872,972,972,972,972,870,931,869,972',
+'247,931,872,872,248,872,872,872,872,872,254,415,415,415,1022,634,1022',
+'1022,1022,1022,1022,290,634,362,914,972,914,914,914,1022,914,634,872',
+'872,872,872,872,872,872,872,872,872,872,872,872,872,305,43,872,872,872',
+'1022,872,872,319,389,872,411,320,872,389,914,1022,1022,872,323,872,1022',
+'872,872,362,872,872,872,872,872,108,872,872,872,634,5,362,108,108,108',
+'5,335,108,108,108,287,108,872,43,336,872,872,287,872,108,872,108,108',
+'108,744,43,1022,872,338,744,872,108,108,744,108,108,108,108,108,339',
+'411,411,411,340,347,286,294,295,29,759,759,347,286,294,295,29,376,346',
+'21,376,347,108,108,108,108,108,108,108,108,108,108,108,108,108,108,287',
+'345,108,108,108,1187,108,108,345,349,108,350,1187,108,108,352,108,345',
+'108,509,108,1187,108,108,509,108,108,108,108,108,21,108,111,108,347',
+'286,294,295,29,111,111,111,21,353,111,111,111,108,111,357,108,108,108',
+'108,359,108,111,108,111,111,111,377,108,366,377,108,345,368,111,111',
+'1187,111,111,111,111,111,371,442,374,404,378,54,293,292,442,379,404',
+'381,54,293,292,380,390,442,380,404,391,54,111,111,111,111,111,111,111',
+'111,111,111,111,111,111,111,395,939,111,111,111,394,111,111,1090,1090',
+'111,939,394,111,111,397,111,678,111,406,111,394,111,111,426,111,111',
+'111,111,111,442,111,404,111,54,293,292,432,1145,434,775,1157,775,775',
+'1157,1145,775,111,435,939,111,111,111,111,1145,111,437,111,440,465,444',
+'939,111,454,678,111,465,465,465,1132,394,456,465,465,811,465,678,775',
+'531,1132,457,811,466,465,465,472,811,823,823,473,811,762,762,762,762',
+'465,465,476,465,465,465,465,465,1145,383,383,477,762,762,762,531,478',
+'1132,1132,531,531,481,1132,482,532,762,762,16,16,762,465,465,465,465',
+'465,465,465,465,465,465,465,465,465,465,811,483,465,465,465,493,465',
+'465,1106,505,465,508,532,465,18,1106,532,532,465,511,465,18,465,465',
+'1106,465,465,465,465,465,18,465,465,465,517,762,762,762,762,525,762',
+'762,762,762,945,1190,1190,465,762,762,465,465,88,465,945,465,762,526',
+'762,762,762,533,465,534,88,465,387,387,387,387,387,387,535,1106,88,387',
+'387,536,561,18,387,842,387,387,387,387,387,387,387,562,563,567,945,583',
+'387,387,387,387,387,387,387,584,587,387,945,589,594,51,51,387,387,387',
+'387,387,387,387,387,387,387,387,387,598,387,387,387,843,387,387,387',
+'387,387,593,843,842,607,343,608,843,593,609,842,843,343,51,51,842,619',
+'593,623,842,387,343,624,387,626,653,387,387,363,661,387,663,387,670',
+'679,363,387,714,842,714,714,714,684,714,363,387,689,691,693,707,387',
+'387,387,387,712,387,387,387,387,713,843,715,722,387,387,731,593,740',
+'842,748,343,387,749,387,387,387,750,779,387,387,841,841,841,841,841',
+'841,782,784,790,841,841,791,792,363,841,400,841,841,841,841,841,841',
+'841,794,796,697,804,806,841,841,841,841,841,841,841,697,1099,841,1099',
+'1099,1099,809,1099,841,841,841,841,841,841,841,841,841,841,841,841,812',
+'841,841,841,242,841,841,841,841,841,344,242,400,697,697,813,816,344',
+'697,400,242,825,831,832,400,836,344,845,400,841,849,851,841,866,868',
+'841,841,877,890,841,1197,841,1197,1197,1197,841,1197,400,893,913,894',
+'913,913,913,841,913,897,899,902,841,841,841,841,903,841,841,841,841',
+'905,242,906,908,841,841,912,344,925,400,933,934,841,938,841,841,841',
+'941,913,841,841,236,236,236,236,236,236,913,649,649,236,236,649,649',
+'649,236,401,236,236,236,236,236,236,236,8,8,8,8,8,236,236,236,236,236',
+'236,236,946,494,236,494,494,494,965,494,236,236,236,236,236,236,236',
+'236,236,236,236,236,968,236,236,236,969,236,236,236,236,236,978,710',
+'401,710,710,710,983,710,494,401,986,993,995,1002,401,1003,1004,494,401',
+'236,1005,1031,236,1032,1037,236,236,1042,1043,236,1044,236,1045,1046',
+'1047,236,1051,401,710,1114,1052,1114,1114,1114,236,1114,1055,710,1059',
+'236,236,236,236,1066,236,236,236,236,1071,1072,1074,1075,236,236,1076',
+'1078,1079,401,1080,1096,236,1107,236,236,236,1110,1114,236,236,1103',
+'1103,1103,1103,1103,1103,1111,1112,1113,1103,1103,1124,1143,1146,1103',
+'1155,1103,1103,1103,1103,1103,1103,1103,25,1156,1161,1171,1172,1103',
+'1103,1103,1103,1103,1103,1103,1174,1177,1103,581,581,581,581,581,1103',
+'1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1180,1103,1103',
+'1103,1181,1103,1103,1103,1103,1103,25,25,25,25,25,25,25,25,25,25,25',
+'1182,25,25,1183,1185,25,25,1199,1103,1204,25,1103,1206,1217,1103,1103',
+'1218,1224,1103,1225,1103,25,1226,25,1103,25,25,1227,25,25,25,25,25,1103',
+'25,1,,,1103,1103,1103,1103,,1103,1103,1103,1103,,,,,1103,1103,,25,,',
+',,1103,,1103,1103,1103,,,1103,1103,997,997,997,997,997,997,,,,997,997',
+',,,997,,997,997,997,997,997,997,997,373,373,373,373,373,997,997,997',
+'997,997,997,997,,,997,,,,,447,997,997,997,997,997,997,997,997,997,997',
+'997,997,,997,997,997,,997,997,997,997,997,447,447,447,447,447,447,447',
+'447,447,447,447,,447,447,,,447,447,,997,,,997,,,997,997,,,997,,997,447',
+',447,997,447,447,,447,447,447,447,447,997,447,,,,997,997,997,997,,997',
+'997,997,997,,,,,997,997,,447,,447,,,997,,997,997,997,,,997,997,337,337',
+'337,337,337,337,,,,337,337,,,,337,,337,337,337,337,337,337,337,334,334',
+'334,334,334,337,337,337,337,337,337,337,,,337,,,,,692,337,337,337,337',
+'337,337,337,337,337,337,337,337,,337,337,337,,337,337,337,337,337,692',
+'692,692,692,692,692,692,692,692,692,692,,692,692,,,692,692,,337,,,337',
+',,337,337,,,337,,337,692,,692,337,692,692,,692,692,692,692,692,337,692',
+',,,337,337,337,337,,337,337,337,337,,,,,337,337,,692,,,,,337,,337,337',
+'337,,,337,337,38,38,38,38,38,38,,,,38,38,,,,38,,38,38,38,38,38,38,38',
+',,,,,38,38,38,38,38,38,38,,,38,,,,,453,38,38,38,38,38,38,38,38,38,38',
+'38,38,,38,38,38,,38,38,38,38,38,453,453,453,453,453,453,453,453,453',
+'453,453,,453,453,,,453,453,,38,,,38,,,38,38,,,38,,38,453,,453,38,453',
+'453,,453,453,453,453,453,38,453,,,,38,38,38,38,,38,38,38,38,,,,,38,38',
+',453,,,,,38,,38,38,38,,,38,38,642,642,642,642,642,642,,,,642,642,,,',
+'642,,642,642,642,642,642,642,642,,,,,,642,642,642,642,642,642,642,,',
+'642,,,,,723,642,642,642,642,642,642,642,642,642,642,642,642,,642,642',
+'642,,642,642,642,642,642,723,723,723,723,723,723,723,723,723,723,723',
+',723,723,,,723,723,,642,,,642,,,642,642,,,642,,642,723,,723,642,723',
+'723,,723,723,723,723,723,642,723,,,,642,642,642,642,,642,642,642,642',
+',,,,642,642,,723,,,,,642,,642,642,642,,,642,642,1068,1068,1068,1068',
+'1068,1068,,,,1068,1068,,,,1068,,1068,1068,1068,1068,1068,1068,1068,',
+',,,,1068,1068,1068,1068,1068,1068,1068,,,1068,,,,,,1068,1068,1068,1068',
+'1068,1068,1068,1068,1068,1068,1068,1068,,1068,1068,1068,,1068,1068,1068',
+'1068,1068,817,817,817,817,817,817,817,817,817,817,817,,817,817,,,817',
+'817,,1068,,,1068,,,1068,1068,,,1068,,1068,817,,817,1068,817,817,,817',
+'817,817,817,817,1068,817,,,,1068,1068,1068,1068,,1068,1068,1068,1068',
+',,,,1068,1068,,817,,,,,1068,,1068,1068,1068,,,1068,1068,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,874,874,874,874,874,874',
+'874,874,874,874,874,,874,874,,,874,874,,372,,,372,,,372,372,,,372,,372',
+'874,,874,372,874,874,,874,874,874,874,874,372,874,,,,372,372,372,372',
+',372,372,372,372,,,,,372,372,,874,,,,,372,,372,372,372,,,372,372,973',
+'973,973,973,973,973,,,,973,973,,,,973,,973,973,973,973,973,973,973,',
+',,,,973,973,973,973,973,973,973,,,973,,,,,,973,973,973,973,973,973,973',
+'973,973,973,973,973,,973,973,973,,973,973,973,973,973,317,317,317,317',
+'317,317,317,317,317,317,317,,317,317,,,317,317,,973,,,973,,,973,973',
+',,973,,973,317,,317,973,317,317,,317,317,317,317,317,973,317,,,,973',
+'973,973,973,,973,973,973,973,,,,,973,973,,317,,,,,973,,973,973,973,',
+',973,973,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2,2,,,,,,2,2,2,2,2,2,2,',
+',2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,2,2,2,550,550,550,550,550',
+'550,550,550,550,550,550,,550,550,,,550,550,,2,,,2,,,2,2,,,2,,2,550,',
+'550,2,550,550,,550,550,550,550,550,2,550,,,,2,2,2,2,,2,2,2,2,,,,,2,2',
+'550,550,,,,,2,,2,2,2,,,2,2,230,230,230,230,230,230,,,,230,230,,,,230',
+',230,230,230,230,230,230,230,,,,,,230,230,230,230,230,230,230,,,230',
+',,,,,230,230,230,230,230,230,230,230,230,230,230,230,,230,230,230,,230',
+'230,230,230,230,1067,1067,1067,1067,1067,1067,1067,1067,1067,1067,1067',
+',1067,1067,,,1067,1067,,230,,,230,,,230,230,,,230,,230,1067,,1067,230',
+'1067,1067,,1067,1067,1067,1067,1067,230,1067,,,,230,230,230,230,,230',
+'230,230,230,,,,,230,230,,1067,,,,,230,,230,230,230,,,230,230,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,1034,1034,1034,1034',
+'1034,1034,1034,1034,1034,1034,1034,,1034,1034,,,1034,1034,,342,,,342',
+',,342,342,,,342,,342,1034,,1034,342,1034,1034,,1034,1034,1034,1034,1034',
+'342,1034,,,,342,342,342,342,,342,342,342,342,,,,,342,342,,1034,,,,,342',
+',342,342,342,,,342,342,253,253,253,253,253,253,,,,253,253,,,,253,,253',
+'253,253,253,253,253,253,,,,,,253,253,253,253,253,253,253,,,253,,,,,',
+'253,253,253,253,253,253,253,253,253,253,253,253,,253,253,253,,253,253',
+'253,253,253,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,',
+'1033,1033,,,1033,1033,,253,,,253,,,253,253,,,253,,253,1033,,1033,253',
+'1033,1033,,1033,1033,1033,1033,1033,253,1033,,,,253,253,253,253,,253',
+'253,253,253,,,,,253,253,,1033,,,,,253,,253,253,253,,,253,253,1013,1013',
+'1013,1013,1013,1013,,,,1013,1013,,,,1013,,1013,1013,1013,1013,1013,1013',
+'1013,,,,,,1013,1013,1013,1013,1013,1013,1013,,,1013,,,,,,1013,1013,1013',
+'1013,1013,1013,1013,1013,1013,1013,1013,1013,,1013,1013,1013,,1013,1013',
+'1013,1013,1013,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011',
+',1011,1011,,,1011,1011,,1013,,,1013,,,1013,1013,,,1013,,1013,1011,,1011',
+'1013,1011,1011,,1011,1011,1011,1011,1011,1013,1011,,,,1013,1013,1013',
+'1013,,1013,1013,1013,1013,,,,,1013,1013,,1011,,,,,1013,,1013,1013,1013',
+',,1013,1013,1098,1098,1098,1098,1098,1098,,,,1098,1098,,,,1098,,1098',
+'1098,1098,1098,1098,1098,1098,,,,,,1098,1098,1098,1098,1098,1098,1098',
+',,1098,,,,,,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098',
+',1098,1098,1098,,1098,1098,1098,1098,1098,1010,1010,1010,1010,1010,1010',
+'1010,1010,1010,1010,1010,,1010,1010,,,1010,1010,,1098,,,1098,,,1098',
+'1098,,,1098,,1098,1010,,1010,1098,1010,1010,,1010,1010,1010,1010,1010',
+'1098,1010,,,,1098,1098,1098,1098,,1098,1098,1098,1098,,,,,1098,1098',
+',1010,,,,,1098,,1098,1098,1098,,,1098,1098,1097,1097,1097,1097,1097',
+'1097,,,,1097,1097,,,,1097,,1097,1097,1097,1097,1097,1097,1097,,,,,,1097',
+'1097,1097,1097,1097,1097,1097,,,1097,,,,,,1097,1097,1097,1097,1097,1097',
+'1097,1097,1097,1097,1097,1097,,1097,1097,1097,,1097,1097,1097,1097,1097',
+'529,529,529,529,529,529,529,529,529,529,529,,529,529,,,529,529,,1097',
+',,1097,,,1097,1097,,546,1097,,1097,529,,529,1097,529,529,,529,529,529',
+'529,529,1097,529,,,,1097,1097,1097,1097,,1097,1097,1097,1097,,,546,',
+'1097,1097,546,546,,546,546,,1097,,1097,1097,1097,,,1097,1097,1147,1147',
+'1147,1147,1147,1147,,,,1147,1147,,,,1147,,1147,1147,1147,1147,1147,1147',
+'1147,,,,,,1147,1147,1147,1147,1147,1147,1147,547,1115,1147,1115,1115',
+'1115,,1115,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147',
+',1147,1147,1147,,1147,1147,1147,1147,1147,604,,547,,,,547,547,1115,547',
+'547,,,,,,604,604,,1147,,,1147,,,1147,1147,,,1147,,1147,604,,604,1147',
+'604,604,,604,604,,,604,1147,604,,,,1147,1147,1147,1147,,1147,1147,1147',
+'1147,,,,,1147,1147,,,,,,,1147,,1147,1147,1147,,,1147,1147,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,364,364,364,364,364,364',
+'364,364,364,364,364,,364,364,,,364,364,,621,,,621,,,621,621,,,621,,621',
+'364,,364,621,364,364,,364,364,364,364,364,621,364,,,,621,621,621,621',
+',621,621,621,621,,,,,621,621,,,,,,,621,,621,621,621,,,621,621,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,365,365,365,365,365',
+'365,365,365,365,365,365,,365,365,,,365,365,,892,,,892,,,892,892,,,892',
+',892,365,,365,892,365,365,,365,365,365,365,365,892,365,,,,892,892,892',
+'892,,892,892,892,892,,,,,892,892,,,,,,,892,,892,892,892,,,892,892,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,551,,,,,,,,,,',
+',,,,,551,551,,618,,,618,,,618,618,,,618,,618,551,,551,618,551,551,,551',
+'551,,,551,618,551,,,,618,618,618,618,,618,618,618,618,,,,,618,618,,',
+',,,,618,,618,618,618,,,618,618,1191,1191,1191,1191,1191,1191,,,,1191',
+'1191,,,,1191,,1191,1191,1191,1191,1191,1191,1191,,,,,,1191,1191,1191',
+'1191,1191,1191,1191,,,1191,,,,,,1191,1191,1191,1191,1191,1191,1191,1191',
+'1191,1191,1191,1191,,1191,1191,1191,,1191,1191,1191,1191,1191,549,549',
+'549,549,549,549,549,549,,549,549,,,,,,549,549,,1191,,,1191,,,1191,1191',
+',,1191,,1191,549,,549,1191,549,549,,549,549,549,549,549,1191,549,,,',
+'1191,1191,1191,1191,,1191,1191,1191,1191,,,,,1191,1191,,,,,,,1191,,1191',
+'1191,1191,,,1191,1191,135,135,135,135,135,135,,,,135,135,,,,135,,135',
+'135,135,135,135,135,135,,,,,,135,135,135,135,135,135,135,,,135,,,,,',
+'135,135,135,135,135,135,135,135,135,135,135,135,,135,135,135,,135,135',
+'135,135,135,548,548,548,548,548,548,548,,,548,548,,,,,,548,548,,135',
+',,135,,,135,135,,,135,,135,548,,548,135,548,548,,548,548,548,548,548',
+'135,548,,,,135,135,135,135,,135,135,135,135,,,,,135,135,,,,,,,135,,135',
+'135,135,,,135,135,218,218,218,218,218,218,,,,218,218,,,,218,,218,218',
+'218,218,218,218,218,,,,,,218,218,218,218,218,218,218,,,218,,,,,,218',
+'218,218,218,218,218,218,218,218,218,218,218,,218,218,218,,218,218,218',
+'218,218,545,545,545,545,545,545,545,,,545,545,,,,,,545,545,,218,,,218',
+',,218,218,,,218,,218,545,,545,218,545,545,,545,545,545,545,545,218,545',
+',,,218,218,218,218,,218,218,218,218,,,,,218,218,,,,,,,218,,218,218,218',
+',,218,218,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',
+'544,544,544,544,544,544,544,,,544,544,,,,,,544,544,,846,,,846,,,846',
+'846,,,846,,846,544,,544,846,544,544,,544,544,544,544,544,846,544,,,',
+'846,846,846,846,,846,846,846,846,,,,,846,846,,,,,,,846,,846,846,846',
+',,846,846,857,857,857,857,857,857,,,,857,857,,,,857,,857,857,857,857',
+'857,857,857,,,,,,857,857,857,857,857,857,857,,,857,,,,,,857,857,857',
+'857,857,857,857,857,857,857,857,857,,857,857,857,,857,857,857,857,857',
+'543,543,543,543,543,543,543,,,543,543,,,,,,543,543,,857,,,857,,,857',
+'857,,,857,,857,543,,543,857,543,543,,543,543,543,543,543,857,543,,,',
+'857,857,857,857,,857,857,857,857,,,,,857,857,,,,,,,857,,857,857,857',
+',,857,857,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',
+'542,542,542,542,542,542,542,,,542,542,,,,,,542,542,,388,,,388,,,388',
+'388,,,388,,388,542,,542,388,542,542,,542,542,542,542,542,388,542,,,',
+'388,388,388,388,,388,388,388,388,,,,,388,388,,,,,,,388,,388,388,388',
+',,388,388,991,991,991,991,991,991,,,,991,991,,,,991,,991,991,991,991',
+'991,991,991,,,,,,991,991,991,991,991,991,991,,,991,,,,,,991,991,991',
+'991,991,991,991,991,991,991,991,991,,991,991,991,,991,991,991,991,991',
+'541,541,541,541,541,541,541,,,541,541,,,,,,541,541,,991,,,991,,,991',
+'991,,,991,,991,541,,541,991,541,541,,541,541,541,541,541,991,541,,,',
+'991,991,991,991,,991,991,991,991,,,,,991,991,,,,920,920,920,991,920',
+'991,991,991,920,920,991,991,,920,,920,920,920,920,920,920,920,,,,,,920',
+'920,920,920,920,920,920,,,920,,,,,,,920,,,920,920,920,920,920,920,920',
+'920,,920,920,920,,920,920,920,920,920,540,540,540,540,540,540,540,,',
+'540,540,,,,,,540,540,,920,,,920,,,920,920,,,920,,,540,,540,920,540,540',
+',540,540,540,540,540,920,540,,,,920,920,920,920,,920,920,920,920,,,',
+',920,920,,,,921,921,921,920,921,920,920,920,921,921,920,920,,921,,921',
+'921,921,921,921,921,921,,,,,,921,921,921,921,921,921,921,,,921,,,,,',
+',921,,,921,921,921,921,921,921,921,921,,921,921,921,,921,921,921,921',
+'921,530,530,530,530,530,530,530,530,530,530,530,,530,530,,,530,530,',
+'921,,,921,,,921,921,,,921,,,530,,530,921,530,530,,530,530,530,530,530',
+'921,530,,,,921,921,921,921,,921,921,921,921,,,,,921,921,,,,922,922,922',
+'921,922,921,921,921,922,922,921,921,,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,922,922,538,,,,,,,,,,,,,,,,538',
+'538,,922,,,922,,,922,922,,,922,,,538,,538,922,538,538,,538,538,,,,922',
+',,,,922,922,922,922,,922,922,922,922,,,,,922,922,,,,733,733,733,922',
+'733,922,922,922,733,733,922,922,,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,539,,,,,,,,,,,,,,,,539',
+'539,,733,,,733,,,733,733,,,733,,,539,,,733,539,539,,539,539,,,,733,',
+',,,733,733,733,733,,733,733,733,733,,,,,733,733,,,,732,732,732,733,732',
+'733,733,733,732,732,733,733,,732,,732,732,732,732,732,732,732,,,,,,732',
+'732,732,732,732,732,732,,,732,,,,,,,732,,,732,732,732,732,732,732,732',
+'732,,732,732,732,,732,732,732,732,732,537,,,,,,,,,,,,,,,,537,537,,732',
+',,732,,,732,732,,,732,,,537,,537,732,537,537,,537,537,,,,732,,,,,732',
+'732,732,732,,732,732,732,732,,,,,732,732,,,,,,,732,,732,732,732,,,732',
+'732,333,333,333,333,333,,,,333,333,,,,333,,333,333,333,333,333,333,333',
+',,,,,333,333,333,333,333,333,333,,,333,,,,,,333,333,,333,333,333,333',
+'333,333,333,333,333,,333,333,333,,333,333,333,333,333,,,,,,,,,,,,,,',
+',,,,,333,,,333,,,333,333,,,333,,333,,,,333,,,,,,,,,333,,,,,333,333,333',
+'333,,333,333,333,333,,,,,333,333,,,,265,265,265,333,265,333,333,333',
+'265,265,333,333,,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',
+',,,264,264,264,265,264,265,265,265,264,264,265,265,,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,,,,263,263,263,264,263,264',
+'264,264,263,263,264,264,,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,,,,262,262,262,263,262,263,263,263,262,262,263,263,,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,,,,261,261,261',
+'262,261,262,262,262,261,261,262,262,,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,,,,708,708,708,261,708,261,261,261,708,708,261',
+'261,,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,,,,260',
+'260,260,708,260,708,708,708,260,260,708,708,,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,,,,694,694,694,260,694,260,260,260',
+'694,694,260,260,,694,,694,694,694,694,694,694,694,,,,,,694,694,694,694',
+'694,694,694,,,694,,,,,,,694,,,694,694,694,694,694,694,694,694,,694,694',
+'694,,694,694,694,694,694,,,,,,,,,,,,,,,,,,,,694,,,694,,,694,694,,,694',
+',694,,,,694,,,,,,,,,694,,,,,694,694,694,694,,694,694,694,694,,,,,694',
+'694,,,,259,259,259,694,259,694,694,694,259,259,694,694,,259,,259,259',
+'259,259,259,259,259,,,,,,259,259,259,259,259,259,259,,,259,,,,,,,259',
+',,259,259,259,259,259,259,259,259,,259,259,259,,259,259,259,259,259',
+',,,,,,,,,,,,,,,,,,,259,,,259,,,259,259,,,259,,,,,,259,,,,,,,,,259,,',
+',,259,259,259,259,,259,259,259,259,,,,,259,259,,,,258,258,258,259,258',
+'259,259,259,258,258,259,259,,258,,258,258,258,258,258,258,258,,,,,,258',
+'258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258,258,258,258,258',
+'258,,258,258,258,,258,258,258,258,258,,,,,,,,,,,,,,,,,,,,258,,,258,',
+',258,258,,,258,,,,,,258,,,,,,,,,258,,,,,258,258,258,258,,258,258,258',
+'258,,,,,258,258,,,,257,257,257,258,257,258,258,258,257,257,258,258,',
+'257,,257,257,257,257,257,257,257,,,,,,257,257,257,257,257,257,257,,',
+'257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257,257,257,,257,257',
+'257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257,,,257,,,,,,257,,',
+',,,,,,257,,,,,257,257,257,257,,257,257,257,257,,,,,257,257,,,,688,688',
+'688,257,688,257,257,257,688,688,257,257,,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,,,,687,687,687,688,687,688,688,688,687',
+'687,688,688,,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,32,,687,687,,,,32,32,32,,,32,32,32,,32,,,,,,',
+',32,32,32,32,,,,,,,,,32,32,,32,32,32,32,32,,,,,,,,,,,,,,,,,,,,,,,32',
+'32,32,32,32,32,32,32,32,32,32,32,32,32,,,32,32,32,,,32,,32,32,,,32,32',
+',32,,32,,32,,32,32,,32,32,32,32,32,,32,32,32,,,,,,,,,,,,,,32,,,32,32',
+',32,,32,683,683,683,,683,,32,,683,683,,,,683,,683,683,683,683,683,683',
+'683,,,,,,683,683,683,683,683,683,683,,,683,,,,,,,683,,,683,683,683,683',
+'683,683,683,683,,683,683,683,,683,683,683,683,683,,,,,,,,,,,,,,,,,,',
+',683,,,683,,,683,683,,,683,,,,,,683,,,,,,,,,683,,,,,683,683,683,683',
+',683,683,683,683,,,,,683,683,,,,682,682,682,683,682,683,683,683,682',
+'682,683,683,,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',
+',,,681,681,681,682,681,682,682,682,681,681,682,682,,681,,681,681,681',
+'681,681,681,681,,,,,,681,681,681,681,681,681,681,,,681,,,,,,,681,,,681',
+'681,681,681,681,681,681,681,681,681,681,681,,681,681,681,681,681,,,',
+',,,,,,,,,,,,,,,,681,,,681,,,681,681,,,681,,,,681,,681,,,681,,,,,,681',
+',,,,681,681,681,681,,681,681,681,681,,,,,681,681,,,,956,956,956,681',
+'956,681,681,681,956,956,681,681,,956,,956,956,956,956,956,956,956,,',
+',,,956,956,956,956,956,956,956,,,956,,,,,,,956,,,956,956,956,956,956',
+'956,956,956,,956,956,956,,956,956,956,956,956,,,,,,,,,,,,,,,,,,,,956',
+',,956,,,956,956,,,956,,,,,,956,,,,,,,,,956,,,,,956,956,956,956,,956',
+'956,956,956,,,,,956,956,,,,962,962,962,956,962,956,956,956,962,962,956',
+'956,,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,,962,962,962,962,,,,,962,962,,,,,,,962',
+',962,962,962,33,,962,962,,,,33,33,33,,,33,33,33,,33,,,,,,,,33,,33,33',
+',,,,,,,,33,33,,33,33,33,33,33,,,,,,,,,,,,,,,,,,,,,,,33,33,33,33,33,33',
+'33,33,33,33,33,33,33,33,,,33,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,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34',
+'34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,34,34',
+'34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,34,,,,,,34',
+',,,,34,34,34,34,,34,34,34,34,,,,,34,34,,,,680,680,680,34,680,34,34,34',
+'680,680,34,34,,680,,680,680,680,680,680,680,680,,,,,,680,680,680,680',
+'680,680,680,,,680,,,,,,,680,,,680,680,680,680,680,680,680,680,680,680',
+'680,680,,680,680,680,680,680,,,,,,,,,,,,,,,,,,,,680,,,680,,,680,680',
+',,680,,680,,680,,680,,,680,,,,,,680,,,,,680,680,680,680,,680,680,680',
+'680,,,,,680,680,,,,677,677,677,680,677,680,680,680,677,677,680,680,',
+'677,,677,677,677,677,677,677,677,,,,,,677,677,677,677,677,677,677,,',
+'677,,,,,,,677,,,677,677,677,677,677,677,677,677,,677,677,677,,677,677',
+'677,677,677,,,,,,,,,,,,,,,,,,,,677,,,677,,,677,677,,,677,,,,,,677,,',
+',,,,,,677,,,,,677,677,677,677,,677,677,677,677,,,,,677,677,,,,,,,677',
+',677,677,677,,,677,677,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,,,,676,,,,,,,',
+',676,,,,,676,676,676,676,,676,676,676,676,,,,,676,676,,,,985,985,985',
+'676,985,676,676,676,985,985,676,676,,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,985,985,,,,,,,,,,,,,,,,,,,,985',
+',,985,,,985,985,,,985,,,,,,985,,,,,,,,,985,,,,,985,985,985,985,,985',
+'985,985,985,,,,,985,985,,,,673,673,673,985,673,985,985,985,673,673,985',
+'985,,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,,,,,673,673',
+',,,672,672,672,673,672,673,673,673,672,672,673,673,,672,,672,672,672',
+'672,672,672,672,,,,,,672,672,672,672,672,672,672,,,672,,,,,,,672,,,672',
+'672,672,672,672,672,672,672,,672,672,672,,672,672,672,672,672,,,,,,',
+',,,,,,,,,,,,,672,,,672,,,672,672,,,672,,,,,,672,,,,,,,,,672,,,,,672',
+'672,672,672,,672,672,672,672,,,,,672,672,,,,990,990,990,672,990,672',
+'672,672,990,990,672,672,,990,,990,990,990,990,990,990,990,,,,,,990,990',
+'990,990,990,990,990,,,990,,,,,,,990,,,990,990,990,990,990,990,990,990',
+',990,990,990,,990,990,990,990,990,,,,,,,,,,,,,,,,,,,,990,,,990,,,990',
+'990,,,990,,990,,,,990,,,,,,,,,990,,,,,990,990,990,990,,990,990,990,990',
+',,,,990,990,,,,671,671,671,990,671,990,990,990,671,671,990,990,,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,669,669,669,669,669,,,,669,669,,,,669,,669,669',
+'669,669,669,669,669,,,,,,669,669,669,669,669,669,669,,,669,,,,,,669',
+'669,,669,669,669,669,669,669,669,669,669,,669,669,669,,669,669,669,669',
+'669,,,,,,,,,,,,,,,,,,,,669,,,669,,,669,669,,,669,,669,,,,669,,,,,,,',
+',669,,,,,669,669,669,669,,669,669,669,669,,,,,669,669,,,,35,35,35,669',
+'35,669,669,669,35,35,669,669,,35,,35,35,35,35,35,35,35,,,,,,35,35,35',
+'35,35,35,35,,,35,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,,35',
+'35,35,35,35,,,,,,,,,,,,,,,,,,,,35,,,35,,,35,35,,,35,,35,,35,,35,,,35',
+',,,,,35,,,,,35,35,35,35,,35,35,35,35,,,,,35,35,,,,250,250,250,35,250',
+'35,35,35,250,250,35,35,,250,,250,250,250,250,250,250,250,,,,,,250,250',
+'250,250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250',
+',250,250,250,,250,250,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250',
+'250,,,250,,,,,,250,,,,,,,,,250,,,,,250,250,250,250,,250,250,250,250',
+',,,,250,250,,,,36,36,36,250,36,250,250,250,36,36,250,250,,36,,36,36',
+'36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,,36,,,36,36,36,36',
+'36,36,36,36,36,36,36,36,,36,36,36,36,36,,,,,,,,,,,,,,,,,,,,36,,,36,',
+',36,36,,,36,,36,,36,,36,,,36,,,,,,36,,,,,36,36,36,36,,36,36,36,36,,',
+',,36,36,,,,638,638,638,36,638,36,36,36,638,638,36,36,,638,,638,638,638',
+'638,638,638,638,,,,,,638,638,638,638,638,638,638,,,638,,,,,,,638,,,638',
+'638,638,638,638,638,638,638,638,638,638,638,,638,638,638,638,638,,,',
+',,,,,,,,,,,,,,,,638,,,638,,,638,638,,,638,,638,,638,,638,,,638,,,,,',
+'638,,,,,638,638,638,638,,638,638,638,638,,,,,638,638,,,,1009,1009,1009',
+'638,1009,638,638,638,1009,1009,638,638,,1009,,1009,1009,1009,1009,1009',
+'1009,1009,,,,,,1009,1009,1009,1009,1009,1009,1009,,,1009,,,,,,,1009',
+',,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,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,,,,628,628,628,1009,628,1009,1009,1009,628,628,1009',
+'1009,,628,,628,628,628,628,628,628,628,,,,,,628,628,628,628,628,628',
+'628,,,628,,,,,,,628,,,628,628,628,628,628,628,628,628,628,628,628,628',
+',628,628,628,628,628,,,,,,,,,,,,,,,,,,,,628,,,628,,,628,628,,,628,,628',
+',628,,628,,,628,,,,,,628,,,,,628,628,628,628,,628,628,628,628,,,,,628',
+'628,,,,627,627,627,628,627,628,628,628,627,627,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,,,,818,818,818,627',
+'818,627,627,627,818,818,627,627,,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,,,,614,614,614,818,614,818,818,818,614,614,818',
+'818,,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,,,,611',
+'611,611,614,611,614,614,614,611,611,614,614,,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,,,,239,239,239,611,239,611',
+'611,611,239,239,611,611,,239,,239,239,239,239,239,239,239,,,,,,239,239',
+'239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239,239',
+',239,239,239,,239,239,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239,,,239',
+'239,,,239,,,,,,239,,,,,,,,,239,,,,,239,239,239,239,,239,239,239,239',
+',,,,239,239,239,,,605,605,605,239,605,239,239,239,605,605,239,239,,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,,,,1035,1035',
+'1035,605,1035,605,605,605,1035,1035,605,605,,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,,,,603,603,603,1035,603,1035,1035,1035,603,603,1035,1035',
+',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,,,,600,600',
+'600,603,600,603,603,603,600,600,603,603,,600,,600,600,600,600,600,600',
+'600,,,,,,600,600,600,600,600,600,600,,,600,,,,,,,600,,,600,600,600,600',
+'600,600,600,600,,600,600,600,,600,600,600,600,600,,,,,,,,,,,,,,,,,,',
+',600,,,600,,,600,600,,,600,,,,,,600,,,,,,,,,600,,,,,600,600,600,600',
+',600,600,600,600,,,,,600,600,,,,238,238,238,600,238,600,600,600,238',
+'238,600,600,,238,,238,238,238,238,238,238,238,,,,,,238,238,238,238,238',
+'238,238,,,238,,,,,,,238,,,238,238,238,238,238,238,238,238,,238,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,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,,,,590,590,590,237,590,237',
+'237,237,590,590,237,237,,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,590,590,,,,,590,590,,,,,,,590,,590,590,590,,,590,590,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,,,580,580,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,574,,,,',
+'574,574,,,,369,369,369,574,369,574,574,574,369,369,574,574,,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,,,,46,46,46,369,46',
+'369,369,369,46,46,369,369,,46,,46,46,46,46,46,46,46,,,,,,46,46,46,46',
+'46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46,46,46',
+'46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,,,46,,,',
+',46,46,46,46,,46,46,46,46,,,,,46,46,,,,572,572,572,46,572,46,46,46,572',
+'572,46,46,,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,,,,570,570,570,572,570,572,572,572,570,570,572,572,,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,,,,47',
+'47,47,570,47,570,570,570,47,47,570,570,,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,,,,560,560,560,47,560',
+'47,47,47,560,560,47,47,,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,,,,49,49,49,560,49,560,560,560,49,49,560,560,,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,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,49,49,555,,49,49,,,,555,555,555,,,555,555,555,703,555,703',
+'703,703,703,703,,,555,555,555,,,,703,,,,,,555,555,,555,555,555,555,555',
+',701,,701,701,701,701,701,703,,,,,,,,701,703,703,703,703,,,,703,,1140',
+',1140,1140,1140,1140,1140,555,,,,,701,,555,1140,,,,555,555,701,701,701',
+'701,,,,701,,,,,,,,,1140,703,,,,555,555,,,,,1140,1140,,,,1140,,,,555',
+',,555,,283,283,283,555,283,,701,,283,283,555,,,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,,,,224,224,224,283,224,283,283',
+'283,224,224,283,283,,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,,,,,224,224,,,,223,223,223,224,223,224,224,224,223,223,224,224',
+',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,,,,50,50',
+'50,223,50,223,223,223,50,50,223,223,,50,,50,50,50,50,50,50,50,,,,,,50',
+'50,50,50,50,50,50,,,50,,,,,,,50,,,50,50,50,50,50,50,50,50,,50,50,50',
+',50,50,50,50,50,,,,,,,,,,,,,,,,,,,,50,,,50,,,50,50,,,50,,,,,,50,,,,',
+',,,,50,,,,,50,50,50,50,,50,50,50,50,,,,,50,50,,,,222,222,222,50,222',
+'50,50,50,222,222,50,50,,222,,222,222,222,222,222,222,222,,,,,,222,222',
+'222,222,222,222,222,,,222,,,,,,,222,,,222,222,222,222,222,222,222,222',
+',222,222,222,,222,222,222,222,222,,,,,,,,,,,,,,,,,,,,222,,,222,,,222',
+'222,,,222,,,,,,222,,,,,,,,,222,,,,,222,222,222,222,,222,222,222,222',
+',,,,222,222,,,,72,72,72,222,72,222,222,222,72,72,222,222,,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,,',
+',71,71,71,72,71,72,72,72,71,71,72,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,,71,71,71,71,71,,,,,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,,,,,71,',
+',,,,,,,71,,,,,71,71,71,71,,71,71,71,71,,,,,71,71,,,,436,436,436,71,436',
+'71,71,71,436,436,71,71,,436,,436,436,436,436,436,436,436,,,,,,436,436',
+'436,436,436,436,436,,,436,,,,,,,436,,,436,436,436,436,436,436,436,436',
+',436,436,436,,436,436,436,436,436,,,,,,,,,,,,,,,,,,,,436,,,436,,,436',
+'436,,,436,,,,,,436,,,,,,,,,436,,,,,436,436,436,436,,436,436,436,436',
+',,,,436,436,,,,68,68,68,436,68,436,436,436,68,68,436,436,,68,,68,68',
+'68,68,68,68,68,,,,,,68,68,68,68,68,68,68,,,68,,,,,,,68,,,68,68,68,68',
+'68,68,68,68,68,68,68,68,,68,68,68,68,68,,,,,,,,,,,,,,,,,,,,68,,,68,',
+',68,68,,,68,,,,,,68,,,68,,,,,,68,,,,,68,68,68,68,,68,68,68,68,,,,,68',
+'68,,,,407,407,407,68,407,68,68,68,407,407,68,68,,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,,,,847,847,847,407,847,407,407',
+'407,847,847,407,407,,847,,847,847,847,847,847,847,847,,,,,,847,847,847',
+'847,847,847,847,,,847,,,,,,,847,,,847,847,847,847,847,847,847,847,,847',
+'847,847,,847,847,847,847,847,,,,,,,,,,,,,,,,,,,,847,,,847,,,847,847',
+',,847,,,,,,847,,,,,,,,,847,,,,,847,847,847,847,,847,847,847,847,,,,',
+'847,847,,,,276,276,276,847,276,847,847,847,276,276,847,847,,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,,,,275,275,275,276',
+'275,276,276,276,275,275,276,276,,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,,,,67,67,67,275,67,275,275,275,67,67,275,275',
+',67,,67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,',
+'67,67,67,67,67,67,67,67,67,67,67,67,,67,67,67,67,67,,,,,,,,,,,,,,,,',
+',,,67,,,67,,,67,67,,,67,,67,,,,67,,,67,,,,,,67,,,,,67,67,67,67,,67,67',
+'67,67,,,,,67,67,,,,,,,67,,67,67,67,,,67,67,66,66,66,66,66,,,,66,66,',
+',,66,,66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,66,66',
+',66,66,66,66,66,66,66,66,66,,66,66,66,,66,66,66,66,66,,,,,,,,,,,,,,',
+',,,,,66,,,66,,,66,66,,,66,,66,,,,66,,,,,,,,,66,,,,,66,66,66,66,,66,66',
+'66,66,,,,,66,66,,,,299,299,299,66,299,66,66,66,299,299,66,66,,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,,,,274,274,274,299',
+'274,299,299,299,274,274,299,299,,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,,,,867,867,867,274,867,274,274,274,867,867,274',
+'274,,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,,,,24,24',
+'24,867,24,867,867,867,24,24,867,867,,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,,,,273,273,273,24,273',
+'24,24,24,273,273,24,24,,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,,,,788,788,788,273,788,273,273,273,788,788,273,273,,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,,,,,788,788',
+',,,272,272,272,788,272,788,788,788,272,272,788,788,,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,,,,875,875,875,272,875,272',
+'272,272,875,875,272,272,,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,,,875',
+'875,,,875,,,,,,875,,,,,,,,,875,,,,,875,875,875,875,,875,875,875,875',
+',,,,875,875,,,,306,306,306,875,306,875,875,875,306,306,875,875,,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,306,,,,,306,306',
+',,,888,888,888,306,888,306,306,306,888,888,306,306,,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,,,,889,889,889,888,889,888',
+'888,888,889,889,888,888,,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,889,,,,307,307,307,889,307,889,889,889,307,307,889,889,,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',
+',,,315,315,315,307,315,307,307,307,315,315,307,307,,315,,315,315,315',
+'315,315,315,315,,,,,,315,315,315,315,315,315,315,,,315,,,,,,,315,,,315',
+'315,315,315,315,315,315,315,315,315,315,315,,315,315,315,315,315,,,',
+',,,,,,,,,,,,,,,,315,,,315,,,315,315,,,315,,315,,315,,315,,,315,,,,,',
+'315,,,,,315,315,315,315,,315,315,315,315,,,,,315,315,315,,,271,271,271',
+'315,271,315,315,315,271,271,315,315,,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,,,,270,270,270,271,270,271,271,271,270,270,271',
+'271,,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,,,,269',
+'269,269,270,269,270,270,270,269,269,270,270,,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,,,,322,322,322,269,322,269,269,269',
+'322,322,269,269,,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,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,,,,327,327,327,324,327,324',
+'324,324,327,327,324,324,,327,,327,327,327,327,327,327,327,,,,,,327,327',
+'327,327,327,327,327,,,327,,,,,,,327,,,327,327,327,327,327,327,327,327',
+',327,327,327,,327,327,327,327,327,,,,,,,,,,,,,,,,,,,,327,,,327,,,327',
+'327,,,327,,,,,,327,,,,,,,,,327,,,,,327,327,327,327,,327,327,327,327',
+',,,,327,327,,,,328,328,328,327,328,327,327,327,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,,,,268,268,268',
+'328,268,328,328,328,268,268,328,328,,268,,268,268,268,268,268,268,268',
+',,,,,268,268,268,268,268,268,268,,,268,,,,,,,268,,,268,268,268,268,268',
+'268,268,268,,268,268,268,,268,268,268,268,268,,,,,,,,,,,,,,,,,,,,268',
+',,268,,,268,268,,,268,,,,,,268,,,,,,,,,268,,,,,268,268,268,268,,268',
+'268,268,268,,,,,268,268,,,,267,267,267,268,267,268,268,268,267,267,268',
+'268,,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,,,,266',
+'266,266,267,266,267,267,267,266,266,267,267,,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,,,,917,917,917,266,917,266,266,266',
+'917,917,266,266,,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',
+',,,918,918,918,917,918,917,917,917,918,918,917,917,,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,,918,918,918,918,,,,,918,918,,,,919,919,919,918,919,918',
+'918,918,919,919,918,918,,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,919,,919,919,919,919,919,,,,,,,,,,,,,,,,,,,,919,,,919,,,919',
+'919,,,919,,,,,,919,,,,,,,,,919,,,,,919,919,919,919,,919,919,919,919',
+',,,,919,919,,,,497,497,497,919,497,919,919,919,497,497,919,919,,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,133,133,133,133,133,,,,133,133,,,,133,,133,133,133',
+'133,133,133,133,,,,,,133,133,133,133,133,133,133,,,133,,,,,,133,133',
+',133,133,133,133,133,133,133,133,133,,133,133,133,,133,133,133,133,133',
+',,,,,,,,,,,,,,,,,,,133,,,133,,,133,133,,,133,,133,,,,133,,,,,,,,,133',
+',,,,133,133,133,133,,133,133,133,133,,,,,133,133,,,,132,132,132,133',
+'132,133,133,133,132,132,133,133,,132,,132,132,132,132,132,132,132,,',
+',,,132,132,132,132,132,132,132,,,132,,,,,,,132,,,132,132,132,132,132',
+'132,132,132,,132,132,132,,132,132,132,132,132,,,,,,,,,,,,,,,,,,,,132',
+',,132,,,132,132,,,132,,,,,,132,,,,,,,,,132,,,,,132,132,132,132,,132',
+'132,132,132,,,,,132,132,,,,131,131,131,132,131,132,132,132,131,131,132',
+'132,,131,,131,131,131,131,131,131,131,,,,,,131,131,131,131,131,131,131',
+',,131,,,,,,,131,,,131,131,131,131,131,131,131,131,,131,131,131,,131',
+'131,131,131,131,,,,,,,,,,,,,,,,,,,,131,,,131,,,131,131,,,131,,,,,,131',
+',,,,,,,,131,,,,,131,131,131,131,,131,131,131,131,,,,,131,131,,,,130',
+'130,130,131,130,131,131,131,130,130,131,131,,130,,130,130,130,130,130',
+'130,130,,,,,,130,130,130,130,130,130,130,,,130,,,,,,,130,,,130,130,130',
+'130,130,130,130,130,,130,130,130,,130,130,130,130,130,,,,,,,,,,,,,,',
+',,,,,130,,,130,,,130,130,,,130,,,,,,130,,,,,,,,,130,,,,,130,130,130',
+'130,,130,130,130,130,,,,,130,130,,,,1149,1149,1149,130,1149,130,130',
+'130,1149,1149,130,130,,1149,,1149,1149,1149,1149,1149,1149,1149,,,,',
+',1149,1149,1149,1149,1149,1149,1149,,,1149,,,,,,,1149,,,1149,1149,1149',
+'1149,1149,1149,1149,1149,,1149,1149,1149,,1149,1149,1149,1149,1149,',
+',,,,,,,,,,,,,,,,,,1149,,,1149,,,1149,1149,,,1149,,,,,,1149,,,,,,,,,1149',
+',,,,1149,1149,1149,1149,,1149,1149,1149,1149,,,,,1149,1149,,,,1150,1150',
+'1150,1149,1150,1149,1149,1149,1150,1150,1149,1149,,1150,,1150,1150,1150',
+'1150,1150,1150,1150,,,,,,1150,1150,1150,1150,1150,1150,1150,,,1150,',
+',,,,,1150,,,1150,1150,1150,1150,1150,1150,1150,1150,,1150,1150,1150',
+',1150,1150,1150,1150,1150,,,,,,,,,,,,,,,,,,,,1150,,,1150,,,1150,1150',
+',,1150,,,,,,1150,,,,,,,,,1150,,,,,1150,1150,1150,1150,,1150,1150,1150',
+'1150,,,,,1150,1150,,,,52,52,52,1150,52,1150,1150,1150,52,52,1150,1150',
+',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,,,,129,129,129,52,129,52,52,52,129,129,52,52,,129,,129,129',
+'129,129,129,129,129,,,,,,129,129,129,129,129,129,129,,,129,,,,,,,129',
+',,129,129,129,129,129,129,129,129,,129,129,129,,129,129,129,129,129',
+',,,,,,,,,,,,,,,,,,,129,,,129,,,129,129,,,129,,,,,,129,,,,,,,,,129,,',
+',,129,129,129,129,,129,129,129,129,,,,,129,129,,,,,,,129,,129,129,129',
+',,129,129,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,,,124,124,1162,1162,1162,,1162,,,,1162,1162,,,,1162,,1162,1162,1162',
+'1162,1162,1162,1162,,,,,,1162,1162,1162,1162,1162,1162,1162,,,1162,',
+',,,,,1162,,,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162',
+',1162,1162,1162,1162,1162,,,,,,,,,,,,,,,,,,,,1162,,,1162,,,1162,1162',
+',,1162,,1162,,1162,,1162,,,1162,,,,,,1162,,,,,1162,1162,1162,1162,,1162',
+'1162,1162,1162,,,,,1162,1162,,,,471,471,471,1162,471,1162,1162,1162',
+'471,471,1162,1162,,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,,,,277,277,277,471,277,471,471,471,277,277,471,471,,277,,277',
+'277,277,277,277,277,277,,,,,,277,277,277,277,277,277,277,,,277,,,,,',
+',277,,,277,277,277,277,277,277,277,277,,277,277,277,,277,277,277,277',
+'277,,,,,,,,,,,,,,,,,,,,277,,,277,,,277,277,,,277,,,,,,277,,,,,,,,,277',
+',,,,277,277,277,277,,277,277,277,277,,,,,277,277,,,,,,,277,,277,277',
+'277,470,,277,277,,,,470,470,470,,,470,470,470,,470,,,,,,,,470,470,470',
+'470,470,,,,,,,,470,470,,470,470,470,470,470,,,,,,,,,,,,,,,,,,,,,,,470',
+'470,470,470,470,470,470,470,470,470,470,470,470,470,,,470,470,470,,',
+'470,,,470,,,470,470,,470,,470,,470,,470,470,,470,470,470,470,470,,470',
+'470,470,,,,,,,,,,,,,,470,,,470,470,470,470,,470,469,470,,,,,470,469',
+'469,469,,,469,469,469,,469,,,,,,,,469,469,469,469,469,,,,951,951,951',
+'951,469,469,,469,469,469,469,469,,,,,951,951,951,,,,,,,,,,,951,951,',
+',951,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,,951,951,951,951,,951,951,951,951,,,,469,951,951,469,469',
+'469,469,,469,951,469,951,951,951,460,469,7,7,7,7,7,460,460,460,7,7,460',
+'460,460,7,460,7,7,7,7,7,7,7,460,460,460,460,,7,7,7,7,7,7,7,460,460,7',
+'460,460,460,460,460,7,7,7,7,7,7,7,7,7,7,7,7,,7,7,7,,7,7,7,7,7,460,460',
+'460,460,460,460,460,460,460,460,460,460,460,460,,,460,460,460,7,,460',
+'7,460,460,7,7,460,460,7,460,7,460,,460,7,460,460,,460,460,460,460,460',
+'7,460,460,460,,7,7,7,7,,7,7,7,7,,,,460,7,7,460,460,,460,,460,7,,7,7',
+'7,,460,7,7,75,75,75,,75,,,,75,75,,,,75,,75,75,75,75,75,75,75,,,,,,75',
+'75,75,75,75,75,75,,,75,,,,,,,75,,,75,75,75,75,75,75,75,75,,75,75,75',
+',75,75,75,75,75,,,,,,,,,,,,,,,,,,,,75,,,75,,,75,75,,,75,,,,,,75,,,,',
+',,,,75,,,,,75,75,75,75,,75,75,75,75,,,,,75,75,75,,,,,75,75,,75,75,75',
+'64,,75,75,,,,64,64,64,,,64,64,64,,64,,,,,,,,64,,64,64,64,,,,,,,,64,64',
+',64,64,64,64,64,,,,,,,,,,,,,,,,,,,,,,,64,64,64,64,64,64,64,64,64,64',
+'64,64,64,64,,,64,64,64,,,64,,,64,,,64,64,,64,,64,,64,,64,64,,64,64,64',
+'64,64,,64,,64,,,,,,,,,,,,,,64,,,64,64,64,64,,64,,64,,278,278,278,64',
+'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,,,,221,221,221,278,221,278,278,278,221,221,278,278,,221,,221',
+'221,221,221,221,221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,',
+',221,,,221,221,221,221,221,221,221,221,,221,221,221,,221,221,221,221',
+'221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221,,,,,,221,,,,,,,,,221',
+',,,,221,221,221,221,,221,221,221,221,,,,,221,221,,,,220,220,220,221',
+'220,221,221,221,220,220,221,221,,220,,220,220,220,220,220,220,220,,',
+',,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220,220,220',
+'220,220,220,,220,220,220,,220,220,220,220,220,,,,,,,,,,,,,,,,,,,,220',
+',,220,,,220,220,,,220,,220,,,,220,,,,,,,,,220,,,,,220,220,220,220,,220',
+'220,220,220,,,,,220,220,,,,800,800,800,220,800,220,220,220,800,800,220',
+'220,,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,,800,800,800,800,,,,,800,800,,,,797',
+'797,797,800,797,800,800,800,797,797,800,800,,797,,797,797,797,797,797',
+'797,797,,,,,,797,797,797,797,797,797,797,,,797,,,,,,,797,,,797,797,797',
+'797,797,797,797,797,,797,797,797,,797,797,797,797,797,,,,,,,,,,,,,,',
+',,,,,797,,,797,,,797,797,,,797,,,,,,797,,,,,,,,,797,,,,,797,797,797',
+'797,,797,797,797,797,,,,,797,797,,,,386,386,386,797,386,797,797,797',
+'386,386,797,797,,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',
+',,,524,524,524,386,524,386,386,386,524,524,386,386,,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,,,,523,523,523,524,523,524',
+'524,524,523,523,524,524,,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,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,,,,520,520,520',
+'522,520,522,522,522,520,520,522,522,,520,,520,520,520,520,520,520,520',
+',,,,,520,520,520,520,520,520,520,,,520,,,,,,,520,,,520,520,520,520,520',
+'520,520,520,520,520,520,520,,520,520,520,520,520,,,,,,,,,,,,,,,,,,,',
+'520,,,520,,,520,520,,,520,,520,,520,,520,,,520,,,,,,520,,,,,520,520',
+'520,520,,520,520,520,520,,,,,520,520,,,,219,219,219,520,219,520,520',
+'520,219,219,520,520,,219,,219,219,219,219,219,219,219,,,,,,219,219,219',
+'219,219,219,219,,,219,,,,,,,219,,,219,219,219,219,219,219,219,219,,219',
+'219,219,,219,219,219,219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219',
+',,219,,219,,,,219,,,,,,,,,219,,,,,219,219,219,219,,219,219,219,219,',
+',,,219,219,,,,510,510,510,219,510,219,219,219,510,510,219,219,,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,,,,1017,1017',
+'1017,510,1017,510,510,510,1017,1017,510,510,,1017,,1017,1017,1017,1017',
+'1017,1017,1017,,,,,,1017,1017,1017,1017,1017,1017,1017,,,1017,,,,,,',
+'1017,,,1017,1017,1017,1017,1017,1017,1017,1017,,1017,1017,1017,,1017',
+'1017,,,1017,,,,,,,,,,,,,,,,,,,,1017,,,1017,,,1017,1017,,,1017,,,,,,',
+',,,,,,,,,,,,,1017,1017,1017,1017,,1017,1017,1017,1017,,,,,1017,1017',
+',,,1081,1081,1081,1017,1081,1017,1017,1017,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,,,,341,341,341,1081,341,1081,1081,1081,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,,,1214,,1214,1214,1214,1214,1214',
+',,,,,,,,1214,,341,341,341,341,,341,341,341,341,,,,,341,341,,,,341,,1214',
+'341,,341,341,341,588,588,588,,588,1214,1214,,588,588,1214,,,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,,,,40,40,40,588,40,588,588,588',
+'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,,,1210,,1210,1210,1210,1210,1210,,,,,,,,,1210',
+',40,40,40,40,,40,40,40,40,,,,,40,40,,,,40,,1210,40,,40,40,40,803,803',
+'803,,803,1210,1210,,803,803,1210,,,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,,,,360,360,360,803,360,803,803,803,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,,,,1144,1144,1144,360,1144,360,360',
+'360,1144,1144,,,,1144,,1144,1144,1144,1144,1144,1144,1144,,,,,,1144',
+'1144,1144,1144,1144,1144,1144,,,1144,,,,,,,1144,,,1144,1144,1144,1144',
+'1144,1144,1144,1144,,1144,1144,1144,,1144,1144,,,1144,,,,,,,,,,,,,,',
+',,,,,1144,,,1144,,,1144,1144,,,1144,,,,,,,,,,,,,,,,,,,,1144,1144,1144',
+'1144,,1144,1144,1144,1144,,,,,1144,1144,,,,77,77,77,1144,77,1144,1144',
+'1144,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,77,,77,77,77,,77,77,,,77,,,,,,,,,,,',
+',,,,,77,,,77,,,77,,,77,77,,,77,,,,,,,,,,,,,,,,,,,,77,77,77,77,,77,77',
+'77,77,,,,,77,77,,,,814,814,814,77,814,77,77,77,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,,,,597,597,597,814,597,814,814,814',
+'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,,,,39,39,39',
+'597,39,597,597,597,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,,,,76,76,76,39,76,39,39,39,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,76',
+',,,78,78,78,76,78,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,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,10,10,10,10',
+'10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,,,,10,10',
+'10,10,10,10,10,10,10,10,,,,,,10,10,10,10,10,10,10,10,10,10,,10,,,,,',
+',,10,10,,10,10,10,10,10,10,10,,,10,10,,,,10,10,10,10,,,,,,,,,,,,,,10',
+'10,,10,10,10,10,10,10,10,10,10,10,10,10,,,10,10,,,,,,,,,,,,,,10,427',
+'427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427',
+'427,427,427,427,427,427,,,,427,427,427,427,427,427,427,427,427,427,',
+',,,,427,427,427,427,427,427,427,427,427,,,427,,,,,,,,427,427,,427,427',
+'427,427,427,427,427,,,427,427,,,,427,427,427,427,,,,,,,,,,,,,,427,427',
+',427,427,427,427,427,427,427,427,427,427,427,427,,,427,427,,,,,,,,,',
+',,,,427,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667',
+'667,667,667,667,667,667,667,667,667,,,,667,667,667,667,667,667,667,667',
+'667,667,,,,,,667,667,667,667,667,667,667,667,667,,,667,,,,,,,,667,667',
+',667,667,667,667,667,667,667,,,667,667,,,,667,667,667,667,,,,,,,,,,',
+',,,667,667,,667,667,667,667,667,667,667,667,667,667,667,667,,,667,667',
+',,,,,,,,,,,,,667,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11',
+'11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11,11',
+'11,11,11,11,11,11,,,11,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11,,',
+',11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11,11',
+',,11,11,,,,,,,,,,,,,,11,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26',
+'26,26,26,26,26,26,26,26,26,,,,26,26,26,26,26,26,26,26,26,26,,,,,,26',
+'26,26,26,26,26,26,26,26,26,26,26,,26,,,,,,26,26,,26,26,26,26,26,26,26',
+',,26,26,,,,26,26,26,26,,,,,,26,,,,,,,,26,26,,26,26,26,26,26,26,26,26',
+'26,26,26,26,,,26,753,753,753,753,,,,,,1026,,1026,1026,1026,1026,1026',
+'753,753,753,753,,,,753,1026,,,,,753,753,,,753,,,,,,,,,,,,,1026,,,,,',
+',753,,,753,1026,1026,,753,,1026,753,,,,,,,,,,,,,,,,753,,,,753,753,753',
+'753,,753,753,753,753,,,,,753,753,1205,1205,1205,1205,1026,,753,,753',
+'753,753,,,753,753,,1205,1205,1205,1205,,,1208,1205,1208,1208,1208,1208',
+'1208,1205,1205,,,1205,,,,1208,,,,,,,,,,,,,,,,1205,,,1205,,,1208,1205',
+',,1205,,,,,1208,1208,1208,1208,,,,1208,,,,1205,,,,1205,1205,1205,1205',
+',1205,1205,1205,1205,,,,,1205,1205,1129,1129,1129,1129,,,1205,,1205',
+'1205,1205,,,1205,1205,,1129,1129,1129,1129,,,1138,1129,1138,1138,1138',
+'1138,1138,1129,1129,,,1129,,,,1138,,,,,,,,,,,,,,,,1129,,,1129,,,1138',
+'1129,,,1129,,1129,,,1138,1138,1138,1138,,,,1138,,,,1129,,,,1129,1129',
+'1129,1129,,1129,1129,1129,1129,,,,,1129,1129,989,989,989,989,,,1129',
+',1129,1129,1129,,,1129,1129,,989,989,989,989,,,,989,989,,,,,989,989',
+',,989,989,,,,,,,,,,,,,,,,,,,989,,,989,,,,989,,,989,,989,,,,,,,989,,',
+',,,,989,,,,989,989,989,989,,989,989,989,989,,,,,989,989,942,942,942',
+'942,,,989,,989,989,989,,,989,989,,942,942,942,942,,,1135,942,1135,1135',
+'1135,1135,1135,942,942,,,942,,,,1135,,,,,,,,,,,,,,,,942,,,942,,,1135',
+'942,,,942,,,,,1135,1135,1135,1135,,,,1135,,,,942,,,,942,942,942,942',
+',942,942,942,942,,,,,942,942,924,924,924,924,,,942,,942,942,942,,,942',
+'942,,924,924,924,924,,,1231,924,1231,1231,1231,1231,1231,924,924,,,924',
+',,,1231,,,,,,,,,,,,,,,,924,,,924,,,1231,924,,,924,,924,,,,,1231,1231',
+',,,1231,,,,924,,,,924,924,924,924,,924,924,924,924,,,,,924,924,745,745',
+'745,745,,,924,,924,924,924,,,924,924,,745,745,745,745,,,,745,,,,,,745',
+'745,,,745,,,,,,,,,,,,,,,,,,,,745,,,745,,,,745,,,745,,745,,,,,,,1166',
+',1166,1166,1166,1166,1166,745,,,,745,745,745,745,1166,745,745,745,745',
+',,,,745,745,745,943,943,943,943,,745,,745,745,745,1166,,745,745,,,943',
+'943,943,943,,1166,1166,943,,,1166,,,943,943,,,943,,,,,,,,,,,,,,,,,,',
+',943,,,943,,,,943,,,943,,,1166,,,,,,,,,,,,,943,,,,943,943,943,943,,943',
+'943,943,943,,,,,943,943,930,930,930,930,,,943,,943,943,943,,,943,943',
+',930,930,930,930,,,,930,930,,,,,930,930,,,930,930,,,,,,,,,,,,,,,,,,',
+'930,,,930,,,,930,,,930,,930,,,,,,,930,,,,,,,930,,,,930,930,930,930,',
+'930,930,930,930,,,,,930,930,929,929,929,929,,,930,,930,930,930,,,930',
+'930,,929,929,929,929,,,,929,929,,,,,929,929,,,929,929,,,,,,,,,,,,,,',
+',,,,929,,,929,,,,929,,,929,,929,,,,,,,929,,,,,,,929,,,,929,929,929,929',
+',929,929,929,929,,,,,929,929,,,,,,,929,,929,929,929,,,929,929,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,780,,,780,780,,,,780,780,780,780,,,,,,,,,,,,,,780,780,,780',
+'780,780,780,780,780,780,780,780,780,780,780,,,780,528,528,528,528,,',
+'1212,,1212,1212,1212,1212,1212,,,,528,528,528,528,,1212,,528,528,,,',
+',528,528,,,528,528,,,,,,,,,1212,,,,,,,,,,528,1212,1212,528,,,1212,528',
+',,528,,528,,,,,,,528,,,,,,,528,,,,528,528,528,528,,528,528,528,528,',
+',,,528,528,527,527,527,527,,,528,,528,528,528,,,528,528,,527,527,527',
+'527,,,,527,527,,,,,527,527,,,527,527,,,,,,,,,,,,,,,,,,,527,,,527,,,',
+'527,,,527,,527,,,,,,,527,,,,,,,527,,,,527,527,527,527,,527,527,527,527',
+',,,,527,527,1173,1173,1173,1173,,,527,,527,527,527,,,527,527,,1173,1173',
+'1173,1173,,,,1173,,,,,,1173,1173,,,1173,,,,,,,,,,,,,,,,,,,,1173,,,1173',
+',,,1173,,,1173,,,,,,,,,,,,,,,,1173,,,,1173,1173,1173,1173,,1173,1173',
+'1173,1173,,,,,1173,1173,1116,1116,1116,1116,,,1173,,1173,1173,1173,',
+',1173,1173,,1116,1116,1116,1116,,,,1116,,,,,,1116,1116,,,1116,,,,,,',
+',,,,,,,,,,,,,1116,,,1116,,,,1116,,,1116,,,,,,,,,,,,,,,,1116,,,,1116',
+'1116,1116,1116,,1116,1116,1116,1116,,,,,1116,1116,926,926,926,926,,',
+'1116,,1116,1116,1116,,,1116,1116,,926,926,926,926,,,,926,,,,,,926,926',
+',,926,,,,,,,,,,,,,,,,,,,,926,,,926,,,,926,,,926,,,,,,,,,,,,,,,,926,',
+',,926,926,926,926,,926,926,926,926,,,,,926,926,1125,1125,1125,1125,',
+',926,,926,926,926,,,926,926,,1125,1125,1125,1125,,,,1125,,,,,,1125,1125',
+',,1125,,,,,,,,,,,,,,,,,,,,1125,,,1125,,,,1125,,,1125,,,,,,,,,,,,,,,',
+'1125,,,,1125,1125,1125,1125,,1125,1125,1125,1125,,,,,1125,1125,936,936',
+'936,936,,,1125,,1125,1125,1125,,,1125,1125,,936,936,936,936,,,,936,',
+',,,,936,936,,,936,,,,,,,,763,763,763,763,,,,,,,,,936,,,936,763,763,763',
+'936,,,936,,936,,,,,763,763,,,763,,,,,936,,,,936,936,936,936,,936,936',
+'936,936,,,,,936,936,,,,,,,936,,936,936,936,,,936,936,233,,233,233,233',
+'233,233,,,,,763,763,763,763,233,763,763,763,763,,,,,763,763,950,950',
+'950,950,,,763,,763,763,763,233,,,,,950,950,950,,233,233,233,233,,,,233',
+',950,950,,,950,,,,,,,,,,,,705,,705,705,705,705,705,,,,,,,,,705,,,,,',
+'234,233,234,234,234,234,234,,,,,,,,,234,705,950,950,950,950,,950,950',
+'950,950,,705,705,,950,950,705,,,,,234,950,,950,950,950,,,,234,234,234',
+'234,,,409,234,409,409,409,409,409,,1020,,1020,1020,1020,1020,1020,409',
+',,,,705,,,1020,,644,,644,644,644,644,644,,,,,,409,409,,644,234,,,,1020',
+'409,409,409,409,,,,409,1020,1020,1020,1020,,,,1020,644,,,,,,,,,644,644',
+'644,644,,,1024,644,1024,1024,1024,1024,1024,,,,,,,,,1024,409,,,,,,,',
+'1020,,,,,,,,,,,,,1024,,,,644,,,,,,,1024,1024,675,675,,1024,675,,,,,',
+',,675,675,,675,675,675,675,675,675,675,,,675,675,,,,675,675,675,675',
+',,,,,675,,,,,1024,,,675,675,,675,675,675,675,675,675,675,675,675,675',
+'675,675,636,636,675,,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,629,629,636,,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,226,226,629',
+',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,602,602,226,,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,637,637,602,,637,,,,,,,,637,637',
+',637,637,637,637,637,637,637,,,637,637,,,,637,637,637,637,,,,,,637,',
+',,,,,,637,637,,637,637,637,637,637,637,637,637,637,637,637,637,225,225',
+'637,,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,302,302,225,,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,519,519,302,,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,518,518',
+'519,,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,591,591,518,,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,592,592,591,,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,1163',
+'1163,592,,1163,,,,,,,,1163,1163,,1163,1163,1163,1163,1163,1163,1163',
+',,1163,1163,,,,1163,1163,1163,1163,,,,,,1163,,,,,,,,1163,1163,,1163',
+'1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,1163,674,674,1163',
+',674,,,,,,,,674,674,,674,674,674,674,674,674,674,,,674,674,,,,674,674',
+'674,674,,,,,,674,,,,,,,,674,674,,674,674,674,674,674,674,674,674,674',
+'674,674,674,1164,1164,674,,1164,,,,,,,,1164,1164,,1164,1164,1164,1164',
+'1164,1164,1164,,,1164,1164,,,,1164,1164,1164,1164,,,,,,1164,,,,,,,,1164',
+'1164,,1164,1164,1164,1164,1164,1164,1164,1164,1164,1164,1164,1164,630',
+'630,1164,,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,1188,1188,630,,1188,,,,,,,,1188,1188,,1188,1188',
+'1188,1188,1188,1188,1188,,,1188,1188,,,,1188,1188,1188,1188,,,,,,1188',
+',,,,,,,1188,1188,,1188,1188,1188,1188,1188,1188,1188,1188,1188,1188',
+'1188,1188,601,601,1188,,601,,,,,,,,601,601,,601,601,601,601,601,601',
+'601,,,601,601,,,,601,601,601,601,,,,,,601,,,,,,,,601,601,,601,601,601',
+'601,601,601,601,601,601,601,601,601,,,601' ]
+ racc_action_check = arr = ::Array.new(28717, nil)
+ idx = 0
+ clist.each do |str|
+ str.split(',', -1).each do |i|
+ arr[idx] = i.to_i unless i.empty?
+ idx += 1
+ end
+ end
+
+racc_action_pointer = [
+ nil, 1550, 2590, 30, nil, 485, nil, 21057, 1279, -15,
+ 24908, 25292, 63, nil, 111, 130, 888, 195, 878, 334,
+ 213, 587, nil, -72, 16018, 1438, 25420, 260, nil, 586,
+ nil, 10, 7680, 8479, 8613, 9947, 10209, nil, 1870, 24507,
+ 23582, nil, 199, 495, 356, 292, 12722, 13115, 252, 13377,
+ 14041, 977, 19960, 226, 694, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 21341, nil, 15494, 15351, 14696, 170,
+ nil, 14434, 14303, nil, nil, 21200, 24638, 24114, 24769, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 877, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 610, nil,
+ nil, 722, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 20234, nil, nil, nil, nil, 20091,
+ 19567, 19436, 19305, 19174, nil, 4318, nil, -26, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 266, nil, 4462, 22788,
+ 21740, 21609, 14172, 13910, 13779, 27931, 27748, nil, nil, 264,
+ 2734, 305, nil, 27294, 27386, 317, 1294, 12043, 11912, 11257,
+ nil, nil, 1133, 138, 140, 432, 174, 389, 452, nil,
+ 10078, 131, 191, 3022, 455, nil, nil, 7277, 7146, 7015,
+ 6753, 6491, 6360, 6229, 6098, 5967, 18507, 18376, 18245, 17590,
+ 17459, 17328, 16411, 16149, 15756, 15220, 15089, 20639, 21478, nil,
+ nil, nil, nil, 13648, nil, nil, 583, 548, 381, -62,
+ 413, 376, 696, 695, 584, 585, nil, nil, nil, 15625,
+ nil, nil, 27992, nil, nil, 484, 16673, 17066, nil, nil,
+ nil, nil, nil, nil, nil, 17197, nil, 2446, nil, 455,
+ 459, nil, 17721, 512, 17852, nil, nil, 17983, 18114, nil,
+ nil, -73, nil, 5836, 1711, 509, 484, 1726, 513, 564,
+ 525, 23312, 2878, 999, 1139, 614, 617, 582, nil, 610,
+ 571, 253, 616, 644, nil, nil, nil, 650, 171, 611,
+ 23852, nil, 471, 1022, 3742, 3886, 687, nil, 691, 12591,
+ nil, 677, 2302, 1567, 638, nil, 541, 621, 676, 662,
+ 651, 690, nil, 870, 35, 36, 22133, 1006, 4894, 459,
+ 766, 651, 25, 39, 730, 747, 4, 793, nil, nil,
+ 1141, 1285, 370, nil, 692, nil, 714, 14827, nil, 27438,
+ nil, 531, 386, 291, 288, 421, 142, 191, 396, nil,
+ nil, nil, nil, nil, nil, nil, 713, 25036, nil, nil,
+ nil, nil, 726, nil, 798, 717, 14565, 725, nil, nil,
+ 715, nil, 690, -60, 819, nil, nil, 1582, nil, nil,
+ nil, nil, nil, 1870, 735, nil, 740, 749, 217, 251,
+ 21057, nil, nil, nil, 0, 861, 795, nil, nil, 20916,
+ 20780, 20508, 880, 882, nil, nil, 769, 775, 780, nil,
+ nil, 785, 787, 809, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 801, 1280, nil, nil, 19031, nil, nil,
+ nil, 1, nil, nil, nil, 899, nil, nil, 901, 579,
+ 22919, 951, nil, nil, nil, -26, nil, 885, 28114, 28053,
+ 22657, -85, 22526, 22395, 22264, 835, 853, 26710, 26612, 3454,
+ 5300, 814, 855, 936, 938, 947, 952, 5693, 5431, 5562,
+ 5169, 5038, 4894, 4750, 4606, 4462, 3482, 3568, 4318, 4174,
+ 2590, 4030, nil, 154, nil, 13518, nil, nil, nil, nil,
+ 13246, 889, 897, 901, nil, nil, nil, 902, nil, nil,
+ 12984, nil, 12853, nil, 12460, nil, 219, nil, nil, nil,
+ 12317, 1438, nil, 904, 909, nil, nil, 910, 23451, 916,
+ 12174, 28175, 28236, 995, 958, nil, nil, 24376, 929, nil,
+ 11781, 28602, 27809, 11650, 3598, 11388, nil, 1066, 947, 990,
+ nil, 11126, nil, nil, 10995, nil, nil, nil, 4030, 1075,
+ nil, 3742, 25, 1080, 1084, 37, 1086, 10733, 10602, 27687,
+ 28480, -5, nil, nil, 472, nil, 27626, 27870, 10340, nil,
+ nil, 191, 2014, nil, 27463, nil, nil, nil, nil, 1249,
+ nil, nil, nil, 977, nil, nil, 247, nil, 286, nil,
+ nil, 966, nil, 968, nil, nil, nil, 25164, nil, 9816,
+ 971, 9673, 9411, 9280, 28358, 27565, 9018, 8875, 733, 1011,
+ 8744, 8076, 7945, 7814, 1017, nil, nil, 7539, 7408, 1021,
+ nil, 1075, 1726, 1105, 6884, nil, nil, 1120, nil, nil,
+ 376, 13512, nil, 13482, nil, 27365, nil, 975, 6622, nil,
+ 1310, nil, 992, 997, 1057, 1002, nil, nil, nil, nil,
+ nil, nil, 1090, 2014, nil, nil, nil, 307, 332, 222,
+ 361, 1006, 5693, 5562, nil, 120, nil, nil, nil, nil,
+ 1029, nil, nil, nil, 555, 26091, 311, nil, 1007, 1092,
+ 1014, nil, nil, 25503, nil, nil, 375, nil, nil, 586,
+ nil, nil, 861, 27241, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 791, 464, nil, nil, 1016,
+ 26529, nil, 1148, nil, 1131, 4, nil, nil, 16280, nil,
+ 1046, 1053, 1154, nil, 1041, nil, 1088, 22002, nil, nil,
+ 21871, nil, 109, 23721, 1044, nil, 1048, -1, 233, 1103,
+ 249, 799, 1117, 1088, 24245, nil, 1156, 2158, 10864, nil,
+ nil, nil, 372, 876, nil, 1213, nil, nil, nil, nil,
+ nil, 1219, 1220, nil, nil, 6, 1101, -21, -19, 68,
+ 7, 1150, 997, 989, nil, 1103, 4606, 14958, nil, 1227,
+ 22, 1107, nil, nil, nil, nil, nil, 4750, nil, nil,
+ nil, nil, nil, nil, nil, nil, 1106, 15887, 1110, 387,
+ 385, 110, 500, nil, 2302, 16542, nil, 1110, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 16804, 16935,
+ 1236, nil, 3886, 1121, 1169, nil, nil, 1129, nil, 1212,
+ nil, nil, 1131, 1136, nil, 1141, 1143, nil, 1144, nil,
+ nil, nil, 1150, 1204, 507, nil, nil, 18638, 18769, 18900,
+ 5169, 5300, 5431, 333, 25993, 1231, 27004, -65, -35, 26386,
+ 26288, 480, -32, 1154, 1155, nil, 27200, nil, 1154, 747,
+ nil, 1178, 25895, 26190, nil, 929, 1243, 281, nil, nil,
+ 27339, 20916, nil, nil, nil, nil, 8207, nil, nil, nil,
+ nil, nil, 8338, nil, nil, 1227, nil, nil, 1237, 1224,
+ nil, nil, 429, 2446, nil, nil, nil, nil, 1227, 250,
+ nil, 137, nil, 1357, nil, 9149, 1361, nil, nil, 25797,
+ 9542, 5038, -18, 1362, nil, 1363, 369, 1582, nil, nil,
+ nil, nil, 1238, 1285, 1249, 1247, 304, nil, nil, 10471,
+ 3310, 3166, nil, 3166, nil, nil, -10, 23050, nil, nil,
+ 27446, nil, 497, nil, 27515, nil, 25493, nil, nil, nil,
+ nil, 1248, 1250, 3022, 2878, 11519, nil, 1251, nil, nil,
+ nil, nil, 1257, 1258, 1260, 1262, 1263, 1264, nil, nil,
+ nil, 1309, 1267, -39, nil, 1276, nil, nil, -66, 1275,
+ nil, nil, nil, nil, nil, nil, 1323, 2734, 2158, nil,
+ nil, 1285, 1286, nil, 1287, 1288, 1291, nil, 1316, 1296,
+ 1283, 23181, nil, nil, nil, nil, nil, 8, nil, 26,
+ 771, nil, 40, nil, nil, nil, 1420, 3454, 3310, 1136,
+ nil, nil, nil, 1438, 32, 33, 872, 1376, 34, nil,
+ 1302, 1312, 1313, 1314, 1348, 3584, 26906, nil, nil, nil,
+ nil, nil, nil, nil, 1317, 27102, nil, 145, nil, 25699,
+ nil, nil, 815, nil, nil, 25898, nil, nil, 25702, nil,
+ 13537, nil, nil, 1342, 23983, 763, 1397, 3598, nil, 19698,
+ 19829, nil, nil, nil, nil, 1341, 1454, 713, nil, nil,
+ nil, 1457, 20377, 28297, 28419, 69, 26144, nil, nil, nil,
+ nil, 1332, 1333, 26808, 1341, nil, nil, 1342, nil, nil,
+ 1361, 1365, 1382, 1385, nil, 1386, nil, 618, 28541, nil,
+ 973, 4174, nil, nil, nil, nil, nil, 1195, nil, 1392,
+ 76, 79, 109, 136, 1391, 25601, 1394, nil, 25604, nil,
+ 23629, nil, 26599, nil, 23359, nil, nil, 1439, 1442, nil,
+ 362, nil, 142, nil, 1399, 1401, 1404, 1409, nil, nil,
+ nil, 25996, nil, nil, nil, nil, -129, nil ]
+
+racc_action_default = [
+ -1, -745, -4, -745, -2, -730, -5, -745, -8, -745,
+ -745, -745, -745, -31, -745, -745, -36, -745, -745, -639,
+ -639, -311, -52, -732, -745, -61, -745, -69, -70, -71,
+ -75, -287, -287, -287, -324, -352, -353, -87, -13, -91,
+ -99, -101, -745, -626, -627, -745, -745, -745, -745, -745,
+ -745, -239, -745, -732, -258, -302, -303, -304, -305, -306,
+ -307, -308, -309, -310, -718, -313, -317, -744, -707, -333,
+ -335, -745, -745, -63, -63, -730, -745, -745, -745, -354,
+ -355, -357, -358, -359, -360, -419, -563, -564, -565, -566,
+ -587, -569, -570, -589, -591, -574, -579, -583, -585, -601,
+ -602, -603, -587, -605, -607, -608, -609, -610, -716, -615,
+ -616, -717, -618, -619, -620, -621, -622, -623, -624, -625,
+ -630, -631, 1238, -3, -731, -740, -741, -742, -7, -745,
+ -745, -745, -745, -745, -9, -4, -19, -745, -130, -131,
+ -132, -133, -134, -135, -136, -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, -200, -201, -202, -203, -204,
+ -205, -206, -207, -208, -209, -210, -24, -137, -13, -745,
+ -745, -745, -745, -745, -277, -745, -745, -728, -729, -745,
+ -13, -638, -636, -662, -662, -745, -13, -745, -745, -732,
+ -733, -56, -745, -626, -627, -745, -311, -745, -745, -245,
+ -745, -639, -639, -13, -745, -57, -59, -222, -223, -745,
+ -745, -745, -745, -745, -745, -745, -745, -745, -745, -745,
+ -745, -745, -745, -745, -745, -745, -745, -745, -745, -259,
+ -260, -261, -262, -745, -65, -66, -745, -130, -131, -170,
+ -171, -172, -188, -193, -200, -203, -626, -627, -705, -745,
+ -428, -430, -745, -726, -727, -76, -277, -745, -332, -434,
+ -443, -445, -82, -440, -83, -732, -84, -265, -282, -292,
+ -292, -286, -290, -293, -745, -587, -709, -713, -745, -85,
+ -86, -730, -14, -745, -17, -745, -89, -13, -732, -745,
+ -92, -95, -13, -107, -108, -745, -745, -115, -324, -327,
+ -732, -745, -639, -639, -352, -353, -356, -441, -745, -97,
+ -745, -103, -321, -745, -224, -225, -606, -233, -234, -745,
+ -246, -251, -13, -315, -732, -266, -737, -737, -745, -745,
+ -737, -745, -334, -62, -745, -745, -745, -13, -13, -730,
+ -745, -731, -626, -627, -745, -745, -311, -745, -370, -371,
+ -125, -126, -745, -128, -745, -311, -634, -745, -348, -662,
+ -567, -745, -745, -745, -745, -745, -745, -745, -745, -6,
+ -743, -25, -26, -27, -28, -29, -745, -745, -21, -22,
+ -23, -138, -745, -32, -35, -298, -745, -745, -297, -33,
+ -745, -37, -745, -311, -49, -51, -211, -270, -293, -53,
+ -54, -38, -212, -270, -732, -278, -292, -292, -719, -720,
+ -287, -438, -721, -722, -720, -719, -287, -437, -439, -721,
+ -722, -745, -555, -745, -383, -384, -732, -704, -704, -644,
+ -645, -647, -647, -647, -661, -663, -664, -665, -666, -667,
+ -668, -669, -670, -671, -745, -673, -675, -677, -682, -684,
+ -685, -688, -693, -695, -696, -698, -699, -700, -702, -745,
+ -745, -745, -48, -219, -55, -732, -331, -745, -745, -745,
+ -277, -321, -745, -745, -745, -745, -745, -745, -745, -220,
+ -221, -226, -227, -228, -229, -230, -231, -235, -236, -237,
+ -238, -240, -241, -242, -243, -244, -247, -248, -249, -250,
+ -732, -263, -67, -732, -449, -287, -719, -720, -73, -77,
+ -663, -732, -292, -732, -288, -447, -449, -732, -326, -283,
+ -745, -284, -745, -289, -745, -294, -745, -712, -715, -12,
+ -731, -16, -18, -732, -88, -319, -104, -93, -745, -732,
+ -277, -745, -745, -114, -745, -638, -606, -745, -100, -105,
+ -745, -745, -745, -745, -264, -745, -328, -745, -732, -745,
+ -267, -739, -738, -269, -739, -322, -323, -708, -13, -361,
+ -362, -13, -745, -745, -745, -745, -745, -745, -277, -745,
+ -745, -321, -63, -125, -126, -127, -745, -745, -277, -344,
+ -632, -745, -13, -420, -662, -423, -568, -588, -593, -745,
+ -595, -571, -590, -745, -592, -573, -745, -576, -745, -578,
+ -581, -745, -582, -745, -604, -10, -20, -745, -30, -745,
+ -301, -745, -745, -277, -745, -745, -745, -745, -442, -745,
+ -279, -281, -745, -745, -78, -276, -435, -745, -745, -80,
+ -436, -44, -254, -744, -744, -350, -637, -745, -642, -643,
+ -745, -745, -654, -745, -657, -745, -659, -745, -745, -372,
+ -745, -374, -376, -379, -382, -732, -676, -686, -687, -697,
+ -701, -640, -46, -256, -351, -330, -734, -719, -720, -719,
+ -720, -732, -745, -745, -58, -463, -466, -467, -468, -469,
+ -471, -473, -476, -477, -534, -732, -489, -492, -504, -508,
+ -513, -515, -516, -519, -520, -587, -523, -525, -526, -527,
+ -532, -533, -745, -745, -537, -538, -539, -540, -541, -542,
+ -543, -544, -545, -546, -547, -745, -745, -553, -60, -745,
+ -745, -706, -745, -450, -72, -431, -447, -272, -279, -274,
+ -745, -409, -745, -325, -292, -291, -295, -745, -710, -711,
+ -745, -15, -90, -745, -96, -102, -732, -719, -720, -275,
+ -723, -113, -745, -98, -745, -218, -232, -252, -745, -314,
+ -316, -318, -737, -744, -363, -744, -64, -364, -365, -338,
+ -339, -745, -745, -455, -341, -745, -732, -719, -720, -723,
+ -320, -13, -125, -126, -129, -732, -13, -745, -346, -745,
+ -745, -732, -594, -597, -598, -599, -600, -13, -572, -575,
+ -577, -580, -584, -586, -139, -34, -299, -745, -732, -719,
+ -720, -720, -719, -50, -271, -745, -735, -292, -40, -214,
+ -41, -215, -79, -42, -217, -43, -216, -81, -745, -745,
+ -744, -368, -13, -556, -744, -557, -558, -704, -683, -688,
+ -703, -646, -647, -647, -674, -647, -647, -694, -647, -671,
+ -386, -689, -732, -745, -745, -381, -672, -745, -745, -745,
+ -745, -745, -745, -442, -464, -745, -745, -474, -475, -745,
+ -745, -745, -494, -732, -732, -488, -495, -501, -745, -745,
+ -491, -745, -745, -745, -507, -514, -518, -745, -522, -524,
+ -530, -531, -535, -536, -548, -549, -745, -611, -612, -613,
+ -126, -551, -745, -68, -429, -409, -433, -432, -745, -732,
+ -444, -410, -732, -13, -446, -285, -296, -714, -94, -442,
+ -106, -732, -268, -745, -366, -745, -745, -340, -342, -745,
+ -745, -13, -442, -745, -442, -745, -745, -13, -349, -421,
+ -424, -426, -413, -745, -745, -300, -442, -39, -213, -280,
+ -45, -255, -11, -13, -562, -369, -745, -745, -560, -641,
+ -745, -650, -745, -652, -745, -655, -745, -658, -660, -373,
+ -375, -377, -380, -47, -257, -745, -465, -504, -470, -472,
+ -481, -485, -732, -732, -732, -732, -732, -732, -552, -486,
+ -487, -511, -496, -499, -502, -732, -587, -736, -732, -505,
+ -509, -512, -517, -521, -528, -529, -745, -253, -13, -74,
+ -273, -704, -704, -390, -392, -392, -392, -408, -745, -732,
+ -671, -679, -680, -691, -448, -329, -336, -745, -337, -745,
+ -460, -295, -744, -343, -345, -633, -745, -13, -13, -745,
+ -422, -596, -561, -13, -626, -627, -745, -745, -311, -559,
+ -647, -647, -647, -647, -745, -745, -745, -478, -479, -480,
+ -482, -483, -484, -503, -497, -745, -490, -745, -493, -745,
+ -550, -451, -745, -388, -389, -393, -399, -401, -745, -404,
+ -745, -406, -411, -745, -745, -678, -745, -13, -456, -745,
+ -745, -452, -453, -454, -347, -745, -745, -732, -415, -417,
+ -418, -555, -277, -745, -745, -321, -745, -648, -651, -653,
+ -656, -378, -505, -745, -500, -506, -510, -704, -681, -391,
+ -392, -392, -392, -392, -692, -392, -412, -690, -745, -321,
+ -744, -13, -461, -462, -425, -427, -414, -745, -554, -732,
+ -719, -720, -723, -320, -647, -745, -498, -387, -745, -396,
+ -745, -398, -745, -402, -745, -405, -407, -320, -723, -367,
+ -744, -416, -442, -649, -392, -392, -392, -392, -457, -458,
+ -459, -745, -394, -397, -400, -403, -392, -395 ]
+
+clist = [
+'44,411,301,309,313,44,141,141,318,318,318,340,285,418,454,493,493,284',
+'382,384,385,473,141,389,297,19,626,511,709,832,19,693,460,466,356,356',
+'44,344,344,635,127,698,699,571,225,618,621,339,563,702,704,706,144,144',
+'890,303,708,598,897,241,983,19,352,352,44,134,387,388,366,136,217,356',
+'356,356,393,297,297,421,422,423,424,798,232,232,305,312,314,907,8,19',
+'795,445,795,8,445,302,561,678,940,352,352,352,359,734,778,737,737,790',
+'445,555,127,124,438,439,1003,451,383,383,236,559,383,715,44,798,610',
+'613,1160,1059,617,512,375,44,904,44,1158,484,484,756,756,123,229,235',
+'336,1037,4,476,509,19,320,320,320,1030,373,973,1032,1184,19,1075,19',
+'1016,782,128,2,607,656,658,17,1012,338,1044,1047,17,792,801,383,383',
+'383,383,216,1055,571,377,380,933,595,595,986,399,516,434,798,493,934',
+'406,408,427,527,461,318,528,795,795,17,826,952,953,286,780,786,390,8',
+'667,652,654,657,657,44,369,605,425,378,8,470,785,1160,1184,298,432,44',
+'379,17,397,1221,639,44,1078,576,372,608,374,818,19,846,19,709,997,19',
+'642,915,1031,1077,44,1136,19,433,444,1079,1157,444,19,19,831,339,903',
+'568,905,449,450,518,319,319,319,444,844,643,999,19,426,419,409,318,318',
+'850,514,515,804,1097,584,17,318,1098,554,565,566,813,965,1151,17,1089',
+'17,1172,1228,376,989,1191,1038,1039,899,795,1174,731,484,303,929,232',
+'232,316,329,330,930,1180,645,939,309,942,460,466,1068,968,313,1061,44',
+'599,1062,622,44,356,912,955,344,44,894,1143,1,553,410,339,412,1175,413',
+'236,339,552,1030,1171,356,19,1206,344,414,19,415,1036,416,352,19,127',
+'1042,1045,417,44,591,525,526,923,852,1043,1046,596,857,806,847,17,352',
+'17,44,44,17,935,601,902,582,1064,1065,17,19,623,624,809,898,17,17,1178',
+'587,907,,,1126,809,,19,19,,961,,,,17,836,581,629,320,,141,127,696,493',
+'1219,845,320,,383,685,849,,,809,580,690,,,336,,,809,691,336,709,709',
+'979,,236,641,1152,437,437,860,904,860,,,1019,,868,725,579,,583,674,144',
+'1021,1023,589,1025,1027,,1028,,,992,,460,466,493,722,493,666,,994,,461',
+',,1177,318,,991,17,882,,978,17,781,887,,,17,238,,,787,1006,789,684,452',
+'470,793,975,798,689,,,,625,,772,772,685,513,795,969,,802,,1076,,17,371',
+'805,756,756,562,319,445,721,,484,,,756,319,17,17,445,445,756,851,820',
+'445,445,599,735,735,461,318,1090,904,737,1048,599,982,1041,,461,878',
+'880,1049,1050,44,883,885,1229,1110,356,1052,,344,895,470,564,,1060,356',
+',,344,,567,470,756,975,461,318,19,,,,,784,461,,352,318,,,,44,,,44,352',
+',,,1230,841,470,823,,,825,,470,,,1133,1134,995,,,44,19,,1144,19,904',
+'461,318,709,709,,,,,,,,827,,,,,,141,916,19,947,44,,,900,470,,900,44',
+',848,1103,1167,1168,1169,1170,,,794,,,,1120,1121,1122,,19,,,19,,1181',
+',19,1182,,,,,19,19,444,,144,19,19,,,,,,444,444,,1198,,444,444,,822,864',
+',1153,,,,,,967,,,,,,,1207,899,772,17,,445,,1147,,1148,772,,,1080,865',
+',896,,966,772,772,873,,1060,,963,1007,,,1224,284,1223,1060,,599,141',
+'1176,,932,,685,17,,690,17,980,946,1096,,,,,,877,996,,,356,,,344,493',
+',,,17,,,356,,,344,513,,452,,,,,,1060,,,,,352,,,,,1072,,17,594,,17,352',
+',44,17,,1222,,44,,17,17,,,993,17,17,1176,,44,,,609,1131,,1029,835,981',
+'19,,1004,,,19,,,,,,,1040,,,,19,,,,,,,,,1156,44,815,383,,,,,,19,,,1015',
+'877,,1066,,,,,,444,,,,,19,,1080,1070,,1080,,772,,772,,,772,772,437,1085',
+',,1087,772,,,,679,,772,772,,,,1073,,,772,772,,,1199,1014,,,,1018,932',
+',,,,932,932,,,1127,,,809,44,,879,881,,1058,,884,886,,,1084,,,,,772,',
+'44,1080,1117,1118,1119,1072,44,19,1072,,1072,1092,383,,,,17,,1128,,',
+'17,44,356,,19,1105,,,,31,19,17,1102,735,31,,,,,,383,1095,,,779,,19,',
+',17,352,31,,,,,,,,,,31,31,31,,31,17,,,,,,,,,,44,1072,,1072,,1072,,1072',
+',,356,,,297,,,,31,,,,,31,31,1072,19,31,,,44,44,1192,1193,,,44,,,352',
+'900,1155,,1073,,,1073,1161,1073,772,,906,,908,,19,19,,772,,,19,772,',
+',,,1163,,,461,318,17,,356,,31,297,765,765,44,31,31,31,31,31,,31,,,17',
+'1190,,,,470,17,,,,,1008,352,,,19,772,,,,,,17,,,,1073,,1073,470,1073',
+',1073,,44,,,,,383,383,,,,,1220,,1081,772,1073,,,,,,879,881,886,884,19',
+'679,,,,,,,,,,,,,,679,941,,17,,,31,31,31,31,31,31,31,,,,,,31,,,,,,31',
+'31,31,31,,,,,17,17,381,18,,,17,,18,31,,,,,,,,,,,,,,,,242,,,,679,,,,',
+',242,242,242,,18,345,345,,,,,,,,,17,,,,,31,,,,679,,,31,31,,1008,,18',
+'679,,,31,242,242,1002,,242,394,404,404,,,1137,1139,1141,,,,,31,,679',
+',31,17,,,,31,,765,1081,,,1081,,,1081,765,1081,,,,,,764,764,765,765,',
+',,,,1074,18,,,31,,242,242,242,242,18,,18,,,,,,31,31,31,,,,,,,679,,435',
+'448,,679,679,,,,,,31,,,,,,,,,1111,,1112,,1113,1081,,1081,,1081,,1081',
+',,,,1209,1211,1213,1215,,1216,,1002,,,,,1081,,,,,,,,,,,,,,,,,,,18,242',
+'442,242,242,442,242,,31,,,,18,1232,1233,1234,1235,,18,442,242,242,,',
+',1237,,,,,,,,,,18,,573,,575,,,577,578,,,,31,,679,679,679,,,,,,31,,941',
+'765,,765,,,765,765,,,,,1183,765,1185,,,,,765,765,,242,,1002,,,765,765',
+'242,242,,,,,,,,242,,1204,,,,,,,,,,,,,,,764,18,,31,,18,,,764,345,18,765',
+',31,,,,764,764,,,,,,,,,1225,345,1226,,1227,,20,,,,670,20,,18,31,,,31',
+',,1196,,,1236,31,,,242,18,18,,,,,31,,,,31,,,,20,353,353,,,,242,,,,,',
+',,,,,,,,679,,,31,,,31,31,20,716,31,,,,,,31,31,353,353,353,31,31,,,,',
+',,,,,,,,,,,,,,,,,,,,,,765,242,,,,,,,,765,,,,765,,,,20,,,,,,,,,20,,20',
+',,,,796,,381,,799,,,242,764,,764,,,764,764,,,242,,,764,,,,765,,764,764',
+',,,,,,764,764,,,,,,796,,,381,,,,,,,,,,,,765,448,,,,,,,,,,,,,31,,,764',
+',,,18,20,,20,,,20,,345,,242,,,20,,,31,345,,20,20,31,31,,866,,,,,,,,31',
+'796,381,,20,,18,,,18,,,,,,893,242,,31,,,,,,,,242,,,911,18,,,,,31,,,',
+',,,,,,,,,,,,,,,,,,18,,,442,242,,,18,,,,,,442,442,,,,442,442,,,,,,,,20',
+',,,20,,,764,353,20,,,,,,31,764,,,,764,,,,,796,,353,,,,,31,,976,,,977',
+',20,,,,,31,,,,,,31,,,,20,20,31,,,,,,,,764,,,,,,,,31,,,,,,,,,,,,,,,,',
+',,,,,,,764,,,,,,,,1005,,,345,,,,,15,,,,,15,345,,,,242,,,,,31,,,,,,,',
+',,,,,,,,,,18,,,15,,18,242,,,,,31,31,,,,18,31,,,21,,,,,21,,,,,,15,,,442',
+',,,,,,398,773,773,,,,,,,,18,,,,,21,347,347,,,31,,31,31,,,,,,,,,,,,31',
+',,,,,1091,,21,,,,,15,,,,,396,405,405,,15,,15,381,20,,,31,,,,,353,,,',
+',242,,,,353,,,,,,,,,,,,,18,,,,,,,,20,,21,20,242,,,771,771,,18,21,,21',
+',,18,,,,,,,,20,,,,,,,,18,,,,1106,,,,,,,15,,440,,,440,,,20,,,20,15,,',
+'20,,,15,440,,20,20,,,,20,20,,,,,,,,15,,,,,,,,,18,,,,,,,,,21,,443,,1145',
+'443,,,,,,,21,,,,,,21,443,18,18,,,773,,18,,,,,,773,,,21,,,,,,773,773',
+',770,770,,,,,,,,,,,,,,,,,15,,,,15,1187,,,18,15,242,242,,,,,,,,,,,,242',
+',,,353,,,,,,,,,,,353,15,,,,,,,,,,,,,18,21,15,15,,21,,,,347,21,,,20,',
+'771,,,20,,,,,771,,,,,347,20,,,771,771,,,,,,,21,,,,,,,20,43,,,,,43,,21',
+'21,,,,,,,,20,,,,,,,,296,,,,,,,,,,,,43,343,343,,,773,,773,,,773,773,',
+',,,,773,,,,,,773,773,,,,43,,,773,773,,,,,,392,296,296,,,,,,,,,,,,,,',
+',,,769,769,,20,,,770,,,,,,773,,770,,,,,,,20,,770,770,,,20,43,,,,,,,',
+',43,,43,,,,20,,768,768,353,,,,,771,15,771,,,771,771,,,,,,771,,,,,,771',
+'771,,,,,,,771,771,,,,,,,,,,,,15,,,15,,,,20,,,,,,,,21,,,,,353,,,347,15',
+',771,,,,,43,347,,,,20,20,,,,,20,43,767,767,,,773,43,,15,,21,440,,21',
+'773,15,,,773,,,440,440,43,,,440,440,,,,,,,21,,,,,,353,856,,20,,,,,,',
+',770,,770,,,770,770,,,,21,773,770,443,,,,21,770,770,,,,443,443,,770',
+'770,443,443,,,,769,,,20,,,,,769,,773,,,,,,,769,769,43,,,,43,,,771,343',
+'43,,,,770,,,771,,,,771,,,,,,768,343,,,,,,,768,,,,,43,,,,768,768,,,,',
+',,,,,43,43,,,,,,,,,771,,,,,,,,,,,,,15,,,,,15,,,,,,,,,,347,15,,,771,',
+',,,,,347,,,,,,,,440,,,,,767,,,,,,,,767,,,,15,,21,,,767,767,21,,,,,770',
+',,,,,21,,,770,,,,770,,,,,,,769,,769,,443,769,769,,,,,,769,,,,,,769,769',
+',21,,,,,769,769,,,,,,,,,,770,,766,766,,,,,768,,768,,15,768,768,,,,,',
+'768,,,,,,768,768,769,,15,,770,,768,768,15,,,,,,,,,,,,,,43,,15,,,,1109',
+',343,,,,,,,21,,343,,,,,,768,,,,,,,,,,21,,,,,43,21,,43,,,,,,,767,,767',
+',,767,767,21,,15,,1108,767,,43,,,,767,767,34,,,,,34,767,767,,,,,,,,',
+',,15,15,,43,34,,15,,,,43,,,,34,34,34,,34,769,,,,,21,,,767,769,,,,769',
+',,,,405,,,,,,,,,34,,,,15,34,34,21,21,34,,,,21,,,,,768,,,,,,,,,768,,',
+'769,768,,,,,,,766,,,,,,,,766,,15,,,,,,405,766,766,21,34,,,,769,34,34',
+'34,34,34,,34,,,,,,768,,,,,,,,,,,,,,,,343,,,,,,,,,,21,343,,,,,768,767',
+',,,,,,,,767,,,,767,,,,,,,,43,,,,,43,,,,,,,,,,,43,,,,,,,34,34,34,34,34',
+'34,34,,,,,,34,767,,,,,34,34,34,34,,,,,,,43,,,,,,,34,,,,,,,,,,767,,,',
+',,,,,,,,,,,,,,,,766,,766,,,766,766,,,,,,766,,,,34,,766,766,,,,34,34',
+',766,766,,,,,34,,,,,,,,,,,,43,,,,,,34,,,,34,,,,,34,,,43,,,766,,,43,',
+',,,,,,,,,,,,,,43,,,,1104,34,,,,,,,,,,,,,,34,34,34,,,,,,,,,,,,,,,,,,',
+'34,,,,,,,,,,,,,,,43,,,,,,,,,,,,,296,,,,,,,,,,,,,,,,43,43,,,,,43,,,,',
+',,,,,,249,,,34,,,,766,,,317,317,317,,,,766,,,,766,,364,365,,367,368',
+',370,,296,,,43,,,,,,,,,34,317,317,,,,,,,,34,,,,,,,,,,,,766,,,,,,,,,',
+',,,43,,,,,,,,,,,,,,,,,,,766,,,,,,,,,,,,,,,,34,,,,,,,,,,34,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,34,,,34,,,,,,,34,,,,,,,,,,34,,,,34,,,,,,,,,,,,,,,,',
+',,,,317,447,,,453,317,34,,,34,34,,,34,,,,,453,34,34,,,,34,34,,,,,,249',
+',,,,,,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544',
+'545,546,547,548,549,550,,,,,551,,,,,,,,,,,,,,,,,,,,,,,317,317,,,,,,',
+',317,,,,,,,317,,317,,,317,317,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,604,,,,,34,,,,,,,,,,,,,,,,,,,,,,,34,,,,,34,34,,,,,,,,,,34,,,,,,,,',
+',,,,,,,,,34,,,,,317,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,692,,,,,,,,',
+',,,,,,,,,,,,,,,,,317,,,,,,,,,,,,,723,,34,,,,,,,,317,,453,453,453,,,',
+',34,,,,,,,,,,,,34,,,,,,34,,,,,,34,,,,,,,365,,,,,,,,,34,317,,317,,317',
+',,,,,,,,,,,,,,,317,,,,,,,,,,453,,,816,,817,,,,,,317,,,317,,,,,,,,,,34',
+',,317,317,,,,,,,,,,317,,,,,,,,,,,,,,,34,34,,,,,34,,,,,,,,,,,,317,453',
+'317,,,,874,,,317,317,453,453,,,,453,453,,,,,,317,,,,,,,,,34,,34,34,',
+'317,,,,,,,,,,34,,,,,,,,,,,,,,692,723,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,317,,,,,,,,,317,,,317,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,317,,,,,,,,453,,,,,,,,',
+',,,,1010,1011,,,,,,,,,,,,,,,,,,,,,,,,,,,,1033,1034,453,453,453,453,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1067,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,317,,,,,,,,,,,,,,,,,,,317,,,,,,,,,,,,,,,,,,,,,,,,,,453,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,317' ]
+ racc_goto_table = arr = ::Array.new(4752, 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 = [
+'72,198,158,91,91,72,75,75,36,36,36,68,46,198,31,230,230,48,107,19,19',
+'10,75,19,72,34,112,10,128,113,34,12,55,55,82,82,72,72,72,73,117,139',
+'139,94,33,110,110,11,92,228,228,228,77,77,13,33,135,70,133,22,111,34',
+'34,34,72,9,44,44,80,17,17,82,82,82,72,72,72,19,19,19,19,239,87,87,56',
+'56,56,235,8,34,95,20,95,8,20,51,31,32,187,34,34,34,69,41,41,177,177',
+'58,20,55,117,7,24,24,149,28,26,26,119,57,26,129,72,239,89,89,152,192',
+'89,28,87,72,231,72,151,225,225,200,200,5,35,35,64,193,2,157,157,34,90',
+'90,90,127,8,147,130,236,34,145,34,207,161,6,3,10,214,214,29,14,65,178',
+'178,29,161,16,26,26,26,26,18,178,94,90,90,175,224,224,13,21,66,25,239',
+'230,176,74,74,27,42,91,36,43,95,95,29,45,202,202,50,52,60,5,8,78,215',
+'215,215,215,72,83,84,8,86,8,75,93,152,236,105,11,72,106,29,114,151,116',
+'72,149,198,120,121,122,123,34,124,34,128,125,34,126,128,131,136,72,142',
+'34,22,22,143,150,22,34,34,112,11,146,66,146,26,26,33,88,88,88,22,73',
+'153,154,34,2,6,155,36,36,156,26,26,70,159,66,29,36,160,162,164,165,70',
+'168,169,29,170,29,192,171,88,172,173,180,182,200,95,192,31,225,33,183',
+'87,87,63,63,63,184,145,157,188,91,189,55,55,147,58,91,195,72,68,196',
+'19,72,82,129,205,72,72,206,149,1,26,210,11,211,193,212,119,11,51,127',
+'130,82,34,192,72,213,34,216,175,217,34,34,117,175,175,218,72,33,35,35',
+'32,219,176,176,80,220,31,223,29,34,29,72,72,29,32,33,229,9,202,202,29',
+'34,11,11,55,233,29,29,234,69,235,,,187,55,,34,34,,73,,,,29,31,8,33,90',
+',75,117,66,230,111,31,90,,26,91,10,,,55,7,91,,,64,,,55,36,64,128,128',
+'32,,119,26,13,88,88,215,231,215,,,139,,31,66,5,,65,33,77,228,228,65',
+'228,228,,228,,,32,,55,55,230,36,230,17,,32,,91,,,133,36,,110,29,57,',
+'70,29,66,57,,,29,40,,,66,32,66,56,79,75,66,94,239,56,,,,5,,72,72,91',
+'79,95,92,,66,,146,,29,40,66,200,200,88,88,20,117,,225,,,200,88,29,29',
+'20,20,200,157,66,20,20,68,174,174,91,36,41,231,177,73,68,89,32,,91,28',
+'28,32,32,72,28,28,13,146,82,191,,72,24,75,63,,191,82,,,72,,63,75,200',
+'94,91,36,34,,,,,56,91,,34,36,,,,72,,,72,34,,,,113,44,75,11,,,11,,75',
+',,139,139,10,,,72,34,,135,34,231,91,36,128,128,,,,,,,,117,,,,,,75,66',
+'34,198,72,,,140,75,,140,72,,117,110,228,228,228,228,,,90,,,,32,32,32',
+',34,,,34,,146,,34,146,,,,,34,34,22,,77,34,34,,,,,,22,22,,12,,22,22,',
+'90,17,,112,,,,,,107,,,,,,,139,200,72,29,,20,,110,,110,72,,,230,8,,87',
+',158,72,72,8,,191,,46,28,,,146,48,228,191,,68,75,191,,174,,91,29,,91',
+'29,68,174,10,,,,,,90,19,,,82,,,72,230,,,,29,,,82,,,72,79,,79,,,,,,191',
+',,,,34,,,,,132,,29,40,,29,34,,72,29,,32,,72,,29,29,,,11,29,29,191,,72',
+',,40,10,,66,88,26,34,,11,,,34,,,,,,,66,,,,34,,,,,,,,,10,72,79,26,,,',
+',,34,,,11,90,,19,,,,,,22,,,,,34,,230,66,,230,,72,,72,,,72,72,88,66,',
+',19,72,,,,40,,72,72,,,,140,,,72,72,,,31,87,,,,87,174,,,,,174,174,,,198',
+',,55,72,,79,79,,174,,79,79,,,11,,,,,72,,72,230,66,66,66,132,72,34,132',
+',132,11,26,,,,29,,66,,,29,72,82,,34,72,,,,59,34,29,11,174,59,,,,,,26',
+'117,,,40,,34,,,29,34,59,,,,,,,,,,59,59,59,,59,29,,,,,,,,,,72,132,,132',
+',132,,132,,,82,,,72,,,,59,,,,,59,59,132,34,59,,,72,72,19,19,,,72,,,34',
+'140,11,,140,,,140,11,140,72,,144,,144,,34,34,,72,,,34,72,,,,,33,,,91',
+'36,29,,82,,59,72,98,98,72,59,59,59,59,59,,59,,,29,11,,,,75,29,,,,,79',
+'34,,,34,72,,,,,,29,,,,140,,140,75,140,,140,,72,,,,,26,26,,,,,11,,232',
+'72,140,,,,,,79,79,79,79,34,40,,,,,,,,,,,,,,40,40,,29,,,59,59,59,59,59',
+'59,59,,,,,,59,,,,,,59,59,59,59,,,,,29,29,85,30,,,29,,30,59,,,,,,,,,',
+',,,,,,30,,,,40,,,,,,30,30,30,,30,30,30,,,,,,,,,29,,,,,59,,,,40,,,59',
+'59,,79,,30,40,,,59,30,30,40,,30,30,30,30,,,141,141,141,,,,,59,,40,,59',
+'29,,,,59,,98,232,,,232,,,232,98,232,,,,,,97,97,98,98,,,,,,144,30,,,59',
+',30,30,30,30,30,,30,,,,,,59,59,59,,,,,,,40,,85,85,,40,40,,,,,,59,,,',
+',,,,,144,,144,,144,232,,232,,232,,232,,,,,141,141,141,141,,141,,40,',
+',,,232,,,,,,,,,,,,,,,,,,,30,30,30,30,30,30,30,,59,,,,30,141,141,141',
+'141,,30,30,30,30,,,,141,,,,,,,,,,30,,85,,85,,,85,85,,,,59,,40,40,40',
+',,,,,59,,40,98,,98,,,98,98,,,,,144,98,144,,,,,98,98,,30,,40,,,98,98',
+'30,30,,,,,,,,30,,144,,,,,,,,,,,,,,,97,30,,59,,30,,,97,30,30,98,,59,',
+',,97,97,,,,,,,,,144,30,144,,144,,38,,,,85,38,,30,59,,,59,,,40,,,144',
+'59,,,30,30,30,,,,,59,,,,59,,,,38,38,38,,,,30,,,,,,,,,,,,,,40,,,59,,',
+'59,59,38,85,59,,,,,,59,59,38,38,38,59,59,,,,,,,,,,,,,,,,,,,,,,,,,,,98',
+'30,,,,,,,,98,,,,98,,,,38,,,,,,,,,38,,38,,,,,85,,85,,85,,,30,97,,97,',
+',97,97,,,30,,,97,,,,98,,97,97,,,,,,,97,97,,,,,,85,,,85,,,,,,,,,,,,98',
+'85,,,,,,,,,,,,,59,,,97,,,,30,38,,38,,,38,,30,,30,,,38,,,59,30,,38,38',
+'59,59,,85,,,,,,,,59,85,85,,38,,30,,,30,,,,,,85,30,,59,,,,,,,,30,,,85',
+'30,,,,,59,,,,,,,,,,,,,,,,,,,,,,30,,,30,30,,,30,,,,,,30,30,,,,30,30,',
+',,,,,,38,,,,38,,,97,38,38,,,,,,59,97,,,,97,,,,,85,,38,,,,,59,,85,,,85',
+',38,,,,,59,,,,,,59,,,,38,38,59,,,,,,,,97,,,,,,,,59,,,,,,,,,,,,,,,,,',
+',,,,,,97,,,,,,,,85,,,30,,,,,23,,,,,23,30,,,,30,,,,,59,,,,,,,,,,,,,,',
+',,,30,,,23,,30,30,,,,,59,59,,,,30,59,,,39,,,,,39,,,,,,23,,,30,,,,,,',
+'23,109,109,,,,,,,,30,,,,,39,39,39,,,59,,59,59,,,,,,,,,,,,59,,,,,,85',
+',39,,,,,23,,,,,39,39,39,,23,,23,85,38,,,59,,,,,38,,,,,30,,,,38,,,,,',
+',,,,,,,30,,,,,,,,38,,39,38,30,,,104,104,,30,39,,39,,,30,,,,,,,,38,,',
+',,,,,30,,,,30,,,,,,,23,,23,,,23,,,38,,,38,23,,,38,,,23,23,,38,38,,,',
+'38,38,,,,,,,,23,,,,,,,,,30,,,,,,,,,39,,39,,30,39,,,,,,,39,,,,,,39,39',
+'30,30,,,109,,30,,,,,,109,,,39,,,,,,109,109,,103,103,,,,,,,,,,,,,,,,',
+'23,,,,23,30,,,30,23,30,30,,,,,,,,,,,,30,,,,38,,,,,,,,,,,38,23,,,,,,',
+',,,,,,30,39,23,23,,39,,,,39,39,,,38,,104,,,38,,,,,104,,,,,39,38,,,104',
+'104,,,,,,,39,,,,,,,38,71,,,,,71,,39,39,,,,,,,,38,,,,,,,,71,,,,,,,,,',
+',,71,71,71,,,109,,109,,,109,109,,,,,,109,,,,,,109,109,,,,71,,,109,109',
+',,,,,71,71,71,,,,,,,,,,,,,,,,,,102,102,,38,,,103,,,,,,109,,103,,,,,',
+',38,,103,103,,,38,71,,,,,,,,,71,,71,,,,38,,101,101,38,,,,,104,23,104',
+',,104,104,,,,,,104,,,,,,104,104,,,,,,,104,104,,,,,,,,,,,,23,,,23,,,',
+'38,,,,,,,,39,,,,,38,,,39,23,,104,,,,,71,39,,,,38,38,,,,,38,71,100,100',
+',,109,71,,23,,39,23,,39,109,23,,,109,,,23,23,71,,,23,23,,,,,,,39,,,',
+',,38,39,,38,,,,,,,,103,,103,,,103,103,,,,39,109,103,39,,,,39,103,103',
+',,,39,39,,103,103,39,39,,,,102,,,38,,,,,102,,109,,,,,,,102,102,71,,',
+',71,,,104,71,71,,,,103,,,104,,,,104,,,,,,101,71,,,,,,,101,,,,,71,,,',
+'101,101,,,,,,,,,,71,71,,,,,,,,,104,,,,,,,,,,,,,23,,,,,23,,,,,,,,,,39',
+'23,,,104,,,,,,,39,,,,,,,,23,,,,,100,,,,,,,,100,,,,23,,39,,,100,100,39',
+',,,,103,,,,,,39,,,103,,,,103,,,,,,,102,,102,,39,102,102,,,,,,102,,,',
+',,102,102,,39,,,,,102,102,,,,,,,,,,103,,99,99,,,,,101,,101,,23,101,101',
+',,,,,101,,,,,,101,101,102,,23,,103,,101,101,23,,,,,,,,,,,,,,71,,23,',
+',,23,,71,,,,,,,39,,71,,,,,,101,,,,,,,,,,39,,,,,71,39,,71,,,,,,,100,',
+'100,,,100,100,39,,23,,39,100,,71,,,,100,100,62,,,,,62,100,100,,,,,,',
+',,,,23,23,,71,62,,23,,,,71,,,,62,62,62,,62,102,,,,,39,,,100,102,,,,102',
+',,,,39,,,,,,,,,62,,,,23,62,62,39,39,62,,,,39,,,,,101,,,,,,,,,101,,,102',
+'101,,,,,,,99,,,,,,,,99,,23,,,,,,39,99,99,39,62,,,,102,62,62,62,62,62',
+',62,,,,,,101,,,,,,,,,,,,,,,,71,,,,,,,,,,39,71,,,,,101,100,,,,,,,,,100',
+',,,100,,,,,,,,71,,,,,71,,,,,,,,,,,71,,,,,,,62,62,62,62,62,62,62,,,,',
+',62,100,,,,,62,62,62,62,,,,,,,71,,,,,,,62,,,,,,,,,,100,,,,,,,,,,,,,',
+',,,,,,99,,99,,,99,99,,,,,,99,,,,62,,99,99,,,,62,62,,99,99,,,,,62,,,',
+',,,,,,,,71,,,,,,62,,,,62,,,,,62,,,71,,,99,,,71,,,,,,,,,,,,,,,,71,,,',
+'71,62,,,,,,,,,,,,,,62,62,62,,,,,,,,,,,,,,,,,,,62,,,,,,,,,,,,,,,71,,',
+',,,,,,,,,,71,,,,,,,,,,,,,,,,71,71,,,,,71,,,,,,,,,,,37,,,62,,,,99,,,37',
+'37,37,,,,99,,,,99,,37,37,,37,37,,37,,71,,,71,,,,,,,,,62,37,37,,,,,,',
+',62,,,,,,,,,,,,99,,,,,,,,,,,,,71,,,,,,,,,,,,,,,,,,,99,,,,,,,,,,,,,,',
+',62,,,,,,,,,,62,,,,,,,,,,,,,,,,,,,,,,,,,,,,62,,,62,,,,,,,62,,,,,,,,',
+',62,,,,62,,,,,,,,,,,,,,,,,,,,,37,37,,,37,37,62,,,62,62,,,62,,,,,37,62',
+'62,,,,62,62,,,,,,37,,,,,,,37,37,37,37,37,37,37,37,37,37,37,37,37,37',
+'37,37,37,37,37,37,37,37,,,,,37,,,,,,,,,,,,,,,,,,,,,,,37,37,,,,,,,,37',
+',,,,,,37,,37,,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,',
+'62,,,,,,,,,,,,,,,,,,,,,,,62,,,,,62,62,,,,,,,,,,62,,,,,,,,,,,,,,,,,,62',
+',,,,37,,,,,,,,,,,,62,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,',
+',,,37,,,,,,,,,,,,,37,,62,,,,,,,,37,,37,37,37,,,,,62,,,,,,,,,,,,62,,',
+',,,62,,,,,,62,,,,,,,37,,,,,,,,,62,37,,37,,37,,,,,,,,,,,,,,,,37,,,,,',
+',,,,37,,,37,,37,,,,,,37,,,37,,,,,,,,,,62,,,37,37,,,,,,,,,,37,,,,,,,',
+',,,,,,,62,62,,,,,62,,,,,,,,,,,,37,37,37,,,,37,,,37,37,37,37,,,,37,37',
+',,,,,37,,,,,,,,,62,,62,62,,37,,,,,,,,,,62,,,,,,,,,,,,,,37,37,,,,,,,',
+',,,,,,62,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,37,,,37',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37',
+',,,,,,,37,,,,,,,,,,,,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,37,37,37,37',
+'37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,37,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37' ]
+ racc_goto_check = arr = ::Array.new(4752, 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, 343, 142, 162, nil, 134, 154, 106, 86, 56,
+ -209, 9, -441, -639, -723, nil, -407, 59, 167, -52,
+ -129, 111, 35, 2068, -107, -30, 45, 59, -108, 164,
+ 1262, -210, -357, 26, 23, 121, -26, 3589, 1625, 2121,
+ 484, -424, -59, -57, -7, -419, -14, nil, -9, nil,
+ 180, 66, -345, nil, nil, -193, 53, -186, -458, 1017,
+ -350, nil, 3145, 282, 104, 130, -51, nil, -28, 62,
+ -303, 2499, -2, -363, 116, -4, nil, 42, -220, 291,
+ 20, nil, -5, 166, -153, 1195, 153, 63, 235, -252,
+ 114, -28, -258, -332, -277, -480, nil, 849, 616, 2504,
+ 2203, 2113, 2068, 1856, 1723, 200, 161, -51, nil, 1618,
+ -339, -763, -364, -596, 155, nil, -173, 35, nil, 98,
+ 172, -135, 173, -366, -397, -603, -161, -762, -466, -373,
+ -760, -664, -141, -639, nil, -437, -722, nil, nil, -436,
+ -27, 269, -822, -716, 413, -815, -438, -638, nil, -737,
+ -842, -965, -973, -135, -575, 194, -361, -88, -25, -714,
+ -711, -394, -9, nil, -18, -18, nil, nil, -488, -796,
+ -691, -919, -530, -844, 34, -562, -553, -422, -760, nil,
+ -620, nil, -620, -431, -425, nil, nil, -648, -424, -423,
+ nil, -352, -816, -781, nil, -615, -612, nil, -89, nil,
+ -390, nil, -558, nil, nil, -437, -353, -735, nil, nil,
+ 257, 254, 255, 264, -250, -200, 265, 266, 271, -274,
+ -271, nil, nil, -259, -168, -98, nil, nil, -432, -311,
+ -218, -569, 230, -298, -730, -616, -983, nil, nil, -491 ]
+
+racc_goto_default = [
+ nil, nil, nil, nil, 5, nil, 6, 391, 334, nil,
+ nil, 472, nil, 984, nil, 331, 332, nil, nil, nil,
+ 13, 14, 22, 247, nil, nil, 16, nil, 441, 248,
+ 363, nil, nil, 637, 251, nil, 27, 25, 252, 246,
+ 517, nil, nil, nil, nil, nil, nil, 386, 143, 26,
+ nil, nil, nil, 28, 29, 812, nil, nil, nil, 351,
+ nil, 30, 348, 455, 37, nil, nil, 39, 42, 41,
+ nil, 243, 244, 403, nil, 463, 142, 87, nil, 446,
+ 103, 51, 54, 283, nil, 323, nil, 891, 456, nil,
+ 457, 468, 480, 686, 569, 321, 307, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, nil, 308, 69, 70,
+ nil, nil, nil, nil, nil, 77, nil, 619, 78, 230,
+ nil, nil, nil, nil, nil, nil, nil, 711, 492, nil,
+ 712, 713, 478, 474, 475, nil, 1179, 707, 1071, nil,
+ 479, nil, nil, nil, 481, nil, 483, nil, 971, nil,
+ nil, nil, 490, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 467, nil, nil, 791, 783, nil, nil,
+ nil, nil, nil, nil, 1051, nil, 736, 937, 738, 739,
+ 743, 740, 741, nil, nil, 742, 744, nil, nil, nil,
+ 936, 938, nil, 748, 750, 751, 752, 753, nil, 757,
+ 501, 758, 759, 760, 761, nil, nil, nil, 86, 88,
+ 89, nil, nil, nil, nil, 647, nil, nil, nil, nil,
+ nil, 99, 100, nil, 231, 901, 234, 477, nil, 482,
+ 909, 495, 497, 498, 1082, 502, 1083, 505, 508, 326 ]
+
+racc_reduce_table = [
+ 0, 0, :racc_error,
+ 0, 150, :_reduce_1,
+ 2, 148, :_reduce_2,
+ 2, 149, :_reduce_3,
+ 0, 151, :_reduce_4,
+ 1, 151, :_reduce_5,
+ 3, 151, :_reduce_6,
+ 2, 151, :_reduce_7,
+ 1, 153, :_reduce_none,
+ 2, 153, :_reduce_9,
+ 3, 156, :_reduce_10,
+ 4, 157, :_reduce_11,
+ 2, 158, :_reduce_12,
+ 0, 162, :_reduce_13,
+ 1, 162, :_reduce_14,
+ 3, 162, :_reduce_15,
+ 2, 162, :_reduce_16,
+ 1, 163, :_reduce_none,
+ 2, 163, :_reduce_18,
+ 0, 174, :_reduce_19,
+ 4, 155, :_reduce_20,
+ 3, 155, :_reduce_21,
+ 3, 155, :_reduce_22,
+ 3, 155, :_reduce_23,
+ 2, 155, :_reduce_24,
+ 3, 155, :_reduce_25,
+ 3, 155, :_reduce_26,
+ 3, 155, :_reduce_27,
+ 3, 155, :_reduce_28,
+ 3, 155, :_reduce_29,
+ 4, 155, :_reduce_30,
+ 1, 155, :_reduce_none,
+ 3, 155, :_reduce_32,
+ 3, 155, :_reduce_33,
+ 5, 155, :_reduce_34,
+ 3, 155, :_reduce_35,
+ 1, 155, :_reduce_none,
+ 3, 167, :_reduce_37,
+ 3, 167, :_reduce_38,
+ 6, 167, :_reduce_39,
+ 5, 167, :_reduce_40,
+ 5, 167, :_reduce_41,
+ 5, 167, :_reduce_42,
+ 5, 167, :_reduce_43,
+ 4, 167, :_reduce_44,
+ 6, 167, :_reduce_45,
+ 4, 167, :_reduce_46,
+ 6, 167, :_reduce_47,
+ 3, 167, :_reduce_48,
+ 1, 175, :_reduce_none,
+ 3, 175, :_reduce_50,
+ 1, 175, :_reduce_none,
+ 1, 173, :_reduce_none,
+ 3, 173, :_reduce_53,
+ 3, 173, :_reduce_54,
+ 3, 173, :_reduce_55,
+ 2, 173, :_reduce_56,
+ 0, 189, :_reduce_57,
+ 4, 173, :_reduce_58,
+ 0, 190, :_reduce_59,
+ 4, 173, :_reduce_60,
+ 1, 173, :_reduce_none,
+ 1, 166, :_reduce_none,
+ 0, 194, :_reduce_63,
+ 3, 191, :_reduce_64,
+ 1, 193, :_reduce_65,
+ 2, 181, :_reduce_66,
+ 0, 199, :_reduce_67,
+ 5, 185, :_reduce_68,
+ 1, 169, :_reduce_none,
+ 1, 169, :_reduce_none,
+ 1, 200, :_reduce_none,
+ 4, 200, :_reduce_72,
+ 0, 207, :_reduce_73,
+ 4, 204, :_reduce_74,
+ 1, 206, :_reduce_none,
+ 2, 183, :_reduce_76,
+ 3, 183, :_reduce_77,
+ 4, 183, :_reduce_78,
+ 5, 183, :_reduce_79,
+ 4, 183, :_reduce_80,
+ 5, 183, :_reduce_81,
+ 2, 183, :_reduce_82,
+ 2, 183, :_reduce_83,
+ 2, 183, :_reduce_84,
+ 2, 183, :_reduce_85,
+ 2, 183, :_reduce_86,
+ 1, 168, :_reduce_87,
+ 3, 168, :_reduce_88,
+ 1, 212, :_reduce_89,
+ 3, 212, :_reduce_90,
+ 1, 211, :_reduce_none,
+ 2, 211, :_reduce_92,
+ 3, 211, :_reduce_93,
+ 5, 211, :_reduce_94,
+ 2, 211, :_reduce_95,
+ 4, 211, :_reduce_96,
+ 2, 211, :_reduce_97,
+ 4, 211, :_reduce_98,
+ 1, 211, :_reduce_99,
+ 3, 211, :_reduce_100,
+ 1, 215, :_reduce_none,
+ 3, 215, :_reduce_102,
+ 2, 214, :_reduce_103,
+ 3, 214, :_reduce_104,
+ 1, 217, :_reduce_105,
+ 3, 217, :_reduce_106,
+ 1, 216, :_reduce_107,
+ 1, 216, :_reduce_108,
+ 4, 216, :_reduce_109,
+ 3, 216, :_reduce_110,
+ 3, 216, :_reduce_111,
+ 3, 216, :_reduce_112,
+ 3, 216, :_reduce_113,
+ 2, 216, :_reduce_114,
+ 1, 216, :_reduce_115,
+ 1, 170, :_reduce_116,
+ 1, 170, :_reduce_117,
+ 4, 170, :_reduce_118,
+ 3, 170, :_reduce_119,
+ 3, 170, :_reduce_120,
+ 3, 170, :_reduce_121,
+ 3, 170, :_reduce_122,
+ 2, 170, :_reduce_123,
+ 1, 170, :_reduce_124,
+ 1, 220, :_reduce_125,
+ 1, 220, :_reduce_none,
+ 2, 221, :_reduce_127,
+ 1, 221, :_reduce_128,
+ 3, 221, :_reduce_129,
+ 1, 195, :_reduce_none,
+ 1, 195, :_reduce_none,
+ 1, 195, :_reduce_none,
+ 1, 195, :_reduce_none,
+ 1, 195, :_reduce_none,
+ 1, 164, :_reduce_135,
+ 1, 164, :_reduce_none,
+ 1, 165, :_reduce_137,
+ 0, 225, :_reduce_138,
+ 4, 165, :_reduce_139,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 3, 184, :_reduce_211,
+ 3, 184, :_reduce_212,
+ 6, 184, :_reduce_213,
+ 5, 184, :_reduce_214,
+ 5, 184, :_reduce_215,
+ 5, 184, :_reduce_216,
+ 5, 184, :_reduce_217,
+ 4, 184, :_reduce_218,
+ 3, 184, :_reduce_219,
+ 3, 184, :_reduce_220,
+ 3, 184, :_reduce_221,
+ 2, 184, :_reduce_222,
+ 2, 184, :_reduce_223,
+ 2, 184, :_reduce_224,
+ 2, 184, :_reduce_225,
+ 3, 184, :_reduce_226,
+ 3, 184, :_reduce_227,
+ 3, 184, :_reduce_228,
+ 3, 184, :_reduce_229,
+ 3, 184, :_reduce_230,
+ 3, 184, :_reduce_231,
+ 4, 184, :_reduce_232,
+ 2, 184, :_reduce_233,
+ 2, 184, :_reduce_234,
+ 3, 184, :_reduce_235,
+ 3, 184, :_reduce_236,
+ 3, 184, :_reduce_237,
+ 3, 184, :_reduce_238,
+ 1, 184, :_reduce_none,
+ 3, 184, :_reduce_240,
+ 3, 184, :_reduce_241,
+ 3, 184, :_reduce_242,
+ 3, 184, :_reduce_243,
+ 3, 184, :_reduce_244,
+ 2, 184, :_reduce_245,
+ 2, 184, :_reduce_246,
+ 3, 184, :_reduce_247,
+ 3, 184, :_reduce_248,
+ 3, 184, :_reduce_249,
+ 3, 184, :_reduce_250,
+ 0, 231, :_reduce_251,
+ 4, 184, :_reduce_252,
+ 6, 184, :_reduce_253,
+ 4, 184, :_reduce_254,
+ 6, 184, :_reduce_255,
+ 4, 184, :_reduce_256,
+ 6, 184, :_reduce_257,
+ 1, 184, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 3, 228, :_reduce_263,
+ 3, 228, :_reduce_264,
+ 1, 232, :_reduce_none,
+ 1, 233, :_reduce_none,
+ 2, 233, :_reduce_none,
+ 4, 233, :_reduce_268,
+ 2, 233, :_reduce_269,
+ 1, 226, :_reduce_none,
+ 3, 226, :_reduce_271,
+ 3, 238, :_reduce_272,
+ 5, 238, :_reduce_273,
+ 3, 238, :_reduce_274,
+ 0, 240, :_reduce_275,
+ 1, 240, :_reduce_none,
+ 0, 178, :_reduce_277,
+ 1, 178, :_reduce_none,
+ 2, 178, :_reduce_none,
+ 4, 178, :_reduce_280,
+ 2, 178, :_reduce_281,
+ 1, 210, :_reduce_282,
+ 2, 210, :_reduce_283,
+ 2, 210, :_reduce_284,
+ 4, 210, :_reduce_285,
+ 1, 210, :_reduce_286,
+ 0, 243, :_reduce_287,
+ 2, 203, :_reduce_288,
+ 2, 242, :_reduce_289,
+ 1, 242, :_reduce_290,
+ 2, 241, :_reduce_291,
+ 0, 241, :_reduce_292,
+ 1, 235, :_reduce_293,
+ 2, 235, :_reduce_294,
+ 3, 235, :_reduce_295,
+ 4, 235, :_reduce_296,
+ 1, 172, :_reduce_297,
+ 1, 172, :_reduce_none,
+ 3, 171, :_reduce_299,
+ 4, 171, :_reduce_300,
+ 2, 171, :_reduce_301,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_312,
+ 0, 267, :_reduce_313,
+ 4, 229, :_reduce_314,
+ 0, 268, :_reduce_315,
+ 4, 229, :_reduce_316,
+ 0, 269, :_reduce_317,
+ 4, 229, :_reduce_318,
+ 3, 229, :_reduce_319,
+ 3, 229, :_reduce_320,
+ 2, 229, :_reduce_321,
+ 3, 229, :_reduce_322,
+ 3, 229, :_reduce_323,
+ 1, 229, :_reduce_324,
+ 4, 229, :_reduce_325,
+ 3, 229, :_reduce_326,
+ 1, 229, :_reduce_327,
+ 0, 270, :_reduce_328,
+ 6, 229, :_reduce_329,
+ 4, 229, :_reduce_330,
+ 3, 229, :_reduce_331,
+ 2, 229, :_reduce_332,
+ 1, 229, :_reduce_none,
+ 2, 229, :_reduce_334,
+ 1, 229, :_reduce_none,
+ 6, 229, :_reduce_336,
+ 6, 229, :_reduce_337,
+ 4, 229, :_reduce_338,
+ 4, 229, :_reduce_339,
+ 5, 229, :_reduce_340,
+ 4, 229, :_reduce_341,
+ 5, 229, :_reduce_342,
+ 6, 229, :_reduce_343,
+ 0, 271, :_reduce_344,
+ 6, 229, :_reduce_345,
+ 0, 272, :_reduce_346,
+ 7, 229, :_reduce_347,
+ 0, 273, :_reduce_348,
+ 5, 229, :_reduce_349,
+ 4, 229, :_reduce_350,
+ 4, 229, :_reduce_351,
+ 1, 229, :_reduce_352,
+ 1, 229, :_reduce_353,
+ 1, 229, :_reduce_354,
+ 1, 229, :_reduce_355,
+ 1, 177, :_reduce_none,
+ 1, 262, :_reduce_357,
+ 1, 265, :_reduce_358,
+ 1, 196, :_reduce_359,
+ 1, 209, :_reduce_360,
+ 1, 257, :_reduce_none,
+ 1, 257, :_reduce_none,
+ 2, 257, :_reduce_363,
+ 1, 192, :_reduce_none,
+ 1, 192, :_reduce_none,
+ 1, 258, :_reduce_none,
+ 5, 258, :_reduce_367,
+ 1, 160, :_reduce_none,
+ 2, 160, :_reduce_369,
+ 1, 261, :_reduce_none,
+ 1, 261, :_reduce_none,
+ 1, 274, :_reduce_372,
+ 3, 274, :_reduce_373,
+ 1, 277, :_reduce_374,
+ 3, 277, :_reduce_375,
+ 1, 276, :_reduce_none,
+ 3, 276, :_reduce_377,
+ 5, 276, :_reduce_378,
+ 1, 276, :_reduce_379,
+ 3, 276, :_reduce_380,
+ 2, 278, :_reduce_381,
+ 1, 278, :_reduce_382,
+ 1, 279, :_reduce_none,
+ 1, 279, :_reduce_none,
+ 0, 284, :_reduce_385,
+ 2, 282, :_reduce_386,
+ 4, 283, :_reduce_387,
+ 2, 283, :_reduce_388,
+ 2, 283, :_reduce_389,
+ 1, 283, :_reduce_390,
+ 2, 288, :_reduce_391,
+ 0, 288, :_reduce_392,
+ 1, 289, :_reduce_none,
+ 6, 290, :_reduce_394,
+ 8, 290, :_reduce_395,
+ 4, 290, :_reduce_396,
+ 6, 290, :_reduce_397,
+ 4, 290, :_reduce_398,
+ 2, 290, :_reduce_none,
+ 6, 290, :_reduce_400,
+ 2, 290, :_reduce_401,
+ 4, 290, :_reduce_402,
+ 6, 290, :_reduce_403,
+ 2, 290, :_reduce_404,
+ 4, 290, :_reduce_405,
+ 2, 290, :_reduce_406,
+ 4, 290, :_reduce_407,
+ 1, 290, :_reduce_none,
+ 0, 294, :_reduce_409,
+ 1, 294, :_reduce_410,
+ 3, 295, :_reduce_411,
+ 4, 295, :_reduce_412,
+ 1, 296, :_reduce_413,
+ 4, 296, :_reduce_414,
+ 1, 297, :_reduce_415,
+ 3, 297, :_reduce_416,
+ 1, 298, :_reduce_417,
+ 1, 298, :_reduce_none,
+ 0, 302, :_reduce_419,
+ 0, 303, :_reduce_420,
+ 5, 256, :_reduce_421,
+ 4, 300, :_reduce_422,
+ 1, 300, :_reduce_423,
+ 0, 306, :_reduce_424,
+ 4, 301, :_reduce_425,
+ 0, 307, :_reduce_426,
+ 4, 301, :_reduce_427,
+ 0, 309, :_reduce_428,
+ 4, 305, :_reduce_429,
+ 2, 201, :_reduce_430,
+ 4, 201, :_reduce_431,
+ 5, 201, :_reduce_432,
+ 5, 201, :_reduce_433,
+ 2, 255, :_reduce_434,
+ 4, 255, :_reduce_435,
+ 4, 255, :_reduce_436,
+ 3, 255, :_reduce_437,
+ 3, 255, :_reduce_438,
+ 3, 255, :_reduce_439,
+ 2, 255, :_reduce_440,
+ 1, 255, :_reduce_441,
+ 4, 255, :_reduce_442,
+ 0, 311, :_reduce_443,
+ 4, 254, :_reduce_444,
+ 0, 312, :_reduce_445,
+ 4, 254, :_reduce_446,
+ 0, 313, :_reduce_447,
+ 3, 205, :_reduce_448,
+ 0, 314, :_reduce_449,
+ 0, 315, :_reduce_450,
+ 4, 308, :_reduce_451,
+ 5, 259, :_reduce_452,
+ 1, 316, :_reduce_453,
+ 1, 316, :_reduce_none,
+ 0, 319, :_reduce_455,
+ 0, 320, :_reduce_456,
+ 7, 260, :_reduce_457,
+ 1, 318, :_reduce_458,
+ 1, 318, :_reduce_none,
+ 1, 317, :_reduce_460,
+ 3, 317, :_reduce_461,
+ 3, 317, :_reduce_462,
+ 1, 188, :_reduce_none,
+ 2, 188, :_reduce_464,
+ 3, 188, :_reduce_465,
+ 1, 188, :_reduce_466,
+ 1, 188, :_reduce_467,
+ 1, 188, :_reduce_468,
+ 1, 321, :_reduce_none,
+ 3, 326, :_reduce_470,
+ 1, 326, :_reduce_none,
+ 3, 328, :_reduce_472,
+ 1, 328, :_reduce_none,
+ 1, 330, :_reduce_474,
+ 1, 331, :_reduce_475,
+ 1, 329, :_reduce_none,
+ 1, 329, :_reduce_none,
+ 4, 329, :_reduce_478,
+ 4, 329, :_reduce_479,
+ 4, 329, :_reduce_480,
+ 3, 329, :_reduce_481,
+ 4, 329, :_reduce_482,
+ 4, 329, :_reduce_483,
+ 4, 329, :_reduce_484,
+ 3, 329, :_reduce_485,
+ 3, 329, :_reduce_486,
+ 3, 329, :_reduce_487,
+ 2, 329, :_reduce_488,
+ 0, 335, :_reduce_489,
+ 4, 329, :_reduce_490,
+ 2, 329, :_reduce_491,
+ 0, 336, :_reduce_492,
+ 4, 329, :_reduce_493,
+ 1, 322, :_reduce_494,
+ 1, 322, :_reduce_495,
+ 2, 322, :_reduce_496,
+ 3, 322, :_reduce_497,
+ 5, 322, :_reduce_498,
+ 2, 322, :_reduce_499,
+ 4, 322, :_reduce_500,
+ 1, 322, :_reduce_none,
+ 2, 337, :_reduce_502,
+ 3, 337, :_reduce_503,
+ 1, 324, :_reduce_504,
+ 3, 324, :_reduce_505,
+ 5, 323, :_reduce_506,
+ 2, 340, :_reduce_507,
+ 1, 340, :_reduce_508,
+ 1, 339, :_reduce_509,
+ 3, 339, :_reduce_510,
+ 1, 338, :_reduce_none,
+ 3, 325, :_reduce_512,
+ 1, 325, :_reduce_513,
+ 2, 325, :_reduce_514,
+ 1, 325, :_reduce_515,
+ 1, 341, :_reduce_516,
+ 3, 341, :_reduce_517,
+ 2, 343, :_reduce_518,
+ 1, 343, :_reduce_519,
+ 1, 344, :_reduce_520,
+ 3, 344, :_reduce_521,
+ 2, 346, :_reduce_522,
+ 1, 346, :_reduce_523,
+ 2, 348, :_reduce_524,
+ 1, 342, :_reduce_none,
+ 1, 342, :_reduce_none,
+ 1, 332, :_reduce_none,
+ 3, 332, :_reduce_528,
+ 3, 332, :_reduce_529,
+ 2, 332, :_reduce_530,
+ 2, 332, :_reduce_531,
+ 1, 332, :_reduce_none,
+ 1, 332, :_reduce_none,
+ 1, 332, :_reduce_none,
+ 2, 332, :_reduce_535,
+ 2, 332, :_reduce_536,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_545,
+ 1, 349, :_reduce_none,
+ 1, 327, :_reduce_547,
+ 2, 350, :_reduce_548,
+ 2, 350, :_reduce_549,
+ 4, 351, :_reduce_550,
+ 2, 333, :_reduce_551,
+ 3, 333, :_reduce_552,
+ 1, 333, :_reduce_553,
+ 6, 159, :_reduce_554,
+ 0, 159, :_reduce_555,
+ 1, 353, :_reduce_556,
+ 1, 353, :_reduce_none,
+ 1, 353, :_reduce_none,
+ 2, 354, :_reduce_559,
+ 1, 354, :_reduce_none,
+ 2, 161, :_reduce_561,
+ 1, 161, :_reduce_none,
+ 1, 244, :_reduce_none,
+ 1, 244, :_reduce_none,
+ 1, 245, :_reduce_565,
+ 1, 356, :_reduce_566,
+ 2, 356, :_reduce_567,
+ 3, 357, :_reduce_568,
+ 1, 357, :_reduce_569,
+ 1, 357, :_reduce_570,
+ 3, 246, :_reduce_571,
+ 4, 247, :_reduce_572,
+ 3, 248, :_reduce_573,
+ 0, 360, :_reduce_574,
+ 3, 360, :_reduce_575,
+ 1, 361, :_reduce_576,
+ 2, 361, :_reduce_577,
+ 3, 250, :_reduce_578,
+ 0, 363, :_reduce_579,
+ 3, 363, :_reduce_580,
+ 3, 249, :_reduce_581,
+ 3, 251, :_reduce_582,
+ 0, 364, :_reduce_583,
+ 3, 364, :_reduce_584,
+ 0, 365, :_reduce_585,
+ 3, 365, :_reduce_586,
+ 0, 345, :_reduce_587,
+ 2, 345, :_reduce_588,
+ 0, 358, :_reduce_589,
+ 2, 358, :_reduce_590,
+ 0, 359, :_reduce_591,
+ 2, 359, :_reduce_592,
+ 1, 362, :_reduce_593,
+ 2, 362, :_reduce_594,
+ 0, 367, :_reduce_595,
+ 4, 362, :_reduce_596,
+ 1, 366, :_reduce_597,
+ 1, 366, :_reduce_598,
+ 1, 366, :_reduce_599,
+ 1, 366, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 368, :_reduce_603,
+ 3, 369, :_reduce_604,
+ 1, 355, :_reduce_605,
+ 2, 355, :_reduce_606,
+ 1, 227, :_reduce_607,
+ 1, 227, :_reduce_608,
+ 1, 227, :_reduce_609,
+ 1, 227, :_reduce_610,
+ 1, 352, :_reduce_611,
+ 1, 352, :_reduce_612,
+ 1, 352, :_reduce_613,
+ 1, 218, :_reduce_614,
+ 1, 218, :_reduce_615,
+ 1, 218, :_reduce_616,
+ 1, 218, :_reduce_617,
+ 1, 218, :_reduce_618,
+ 1, 219, :_reduce_619,
+ 1, 219, :_reduce_620,
+ 1, 219, :_reduce_621,
+ 1, 219, :_reduce_622,
+ 1, 219, :_reduce_623,
+ 1, 219, :_reduce_624,
+ 1, 219, :_reduce_625,
+ 1, 252, :_reduce_626,
+ 1, 252, :_reduce_627,
+ 1, 176, :_reduce_628,
+ 1, 176, :_reduce_629,
+ 1, 186, :_reduce_630,
+ 1, 186, :_reduce_631,
+ 0, 370, :_reduce_632,
+ 4, 263, :_reduce_633,
+ 0, 263, :_reduce_634,
+ 1, 182, :_reduce_none,
+ 1, 182, :_reduce_636,
+ 3, 371, :_reduce_637,
+ 1, 266, :_reduce_none,
+ 0, 373, :_reduce_639,
+ 3, 266, :_reduce_640,
+ 4, 372, :_reduce_641,
+ 2, 372, :_reduce_642,
+ 2, 372, :_reduce_643,
+ 1, 372, :_reduce_644,
+ 1, 372, :_reduce_645,
+ 2, 375, :_reduce_646,
+ 0, 375, :_reduce_647,
+ 6, 304, :_reduce_648,
+ 8, 304, :_reduce_649,
+ 4, 304, :_reduce_650,
+ 6, 304, :_reduce_651,
+ 4, 304, :_reduce_652,
+ 6, 304, :_reduce_653,
+ 2, 304, :_reduce_654,
+ 4, 304, :_reduce_655,
+ 6, 304, :_reduce_656,
+ 2, 304, :_reduce_657,
+ 4, 304, :_reduce_658,
+ 2, 304, :_reduce_659,
+ 4, 304, :_reduce_660,
+ 1, 304, :_reduce_661,
+ 0, 304, :_reduce_662,
+ 1, 239, :_reduce_663,
+ 1, 299, :_reduce_664,
+ 1, 299, :_reduce_665,
+ 1, 299, :_reduce_666,
+ 1, 299, :_reduce_667,
+ 1, 275, :_reduce_none,
+ 1, 275, :_reduce_669,
+ 1, 377, :_reduce_670,
+ 1, 378, :_reduce_671,
+ 3, 378, :_reduce_672,
+ 1, 291, :_reduce_673,
+ 3, 291, :_reduce_674,
+ 1, 379, :_reduce_675,
+ 2, 380, :_reduce_676,
+ 1, 380, :_reduce_677,
+ 2, 381, :_reduce_678,
+ 1, 381, :_reduce_679,
+ 1, 285, :_reduce_680,
+ 3, 285, :_reduce_681,
+ 1, 374, :_reduce_682,
+ 3, 374, :_reduce_683,
+ 1, 347, :_reduce_none,
+ 1, 347, :_reduce_none,
+ 2, 281, :_reduce_686,
+ 2, 280, :_reduce_687,
+ 1, 280, :_reduce_688,
+ 3, 382, :_reduce_689,
+ 3, 383, :_reduce_690,
+ 1, 292, :_reduce_691,
+ 3, 292, :_reduce_692,
+ 1, 376, :_reduce_693,
+ 3, 376, :_reduce_694,
+ 1, 384, :_reduce_none,
+ 1, 384, :_reduce_none,
+ 2, 293, :_reduce_697,
+ 1, 293, :_reduce_698,
+ 1, 385, :_reduce_none,
+ 1, 385, :_reduce_none,
+ 2, 287, :_reduce_701,
+ 1, 287, :_reduce_702,
+ 2, 286, :_reduce_703,
+ 0, 286, :_reduce_704,
+ 1, 197, :_reduce_none,
+ 3, 197, :_reduce_706,
+ 0, 253, :_reduce_707,
+ 2, 253, :_reduce_none,
+ 1, 237, :_reduce_709,
+ 3, 237, :_reduce_710,
+ 3, 386, :_reduce_711,
+ 2, 386, :_reduce_712,
+ 1, 386, :_reduce_713,
+ 4, 386, :_reduce_714,
+ 2, 386, :_reduce_715,
+ 1, 208, :_reduce_none,
+ 1, 208, :_reduce_none,
+ 1, 208, :_reduce_none,
+ 1, 202, :_reduce_none,
+ 1, 202, :_reduce_none,
+ 1, 202, :_reduce_none,
+ 1, 202, :_reduce_none,
+ 1, 310, :_reduce_none,
+ 1, 310, :_reduce_none,
+ 1, 310, :_reduce_none,
+ 1, 198, :_reduce_none,
+ 1, 198, :_reduce_none,
+ 1, 180, :_reduce_728,
+ 1, 180, :_reduce_729,
+ 0, 152, :_reduce_none,
+ 1, 152, :_reduce_none,
+ 0, 187, :_reduce_none,
+ 1, 187, :_reduce_none,
+ 2, 213, :_reduce_734,
+ 2, 179, :_reduce_735,
+ 2, 334, :_reduce_736,
+ 0, 236, :_reduce_none,
+ 1, 236, :_reduce_none,
+ 1, 236, :_reduce_none,
+ 1, 264, :_reduce_740,
+ 1, 264, :_reduce_none,
+ 1, 154, :_reduce_none,
+ 2, 154, :_reduce_none,
+ 0, 234, :_reduce_744 ]
+
+racc_reduce_n = 745
+
+racc_shift_n = 1238
+
+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",
+ "@1",
+ "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",
+ "@2",
+ "command_rhs",
+ "var_lhs",
+ "primary_value",
+ "opt_call_args",
+ "rbracket",
+ "call_op",
+ "defn_head",
+ "f_opt_paren_args",
+ "command",
+ "arg",
+ "defs_head",
+ "backref",
+ "opt_nl",
+ "p_top_expr_body",
+ "@3",
+ "@4",
+ "expr_value_do",
+ "do",
+ "def_name",
+ "@5",
+ "fname",
+ "k_def",
+ "singleton",
+ "dot_or_colon",
+ "@6",
+ "block_command",
+ "block_call",
+ "operation2",
+ "command_args",
+ "cmd_brace_block",
+ "brace_body",
+ "fcall",
+ "@7",
+ "operation",
+ "k_return",
+ "call_args",
+ "mlhs_basic",
+ "mlhs_inner",
+ "rparen",
+ "mlhs_head",
+ "mlhs_item",
+ "mlhs_node",
+ "mlhs_post",
+ "user_variable",
+ "keyword_variable",
+ "cname",
+ "cpath",
+ "op",
+ "reswords",
+ "symbol",
+ "@8",
+ "arg_rhs",
+ "simple_numeric",
+ "rel_expr",
+ "primary",
+ "relop",
+ "@9",
+ "arg_value",
+ "aref_args",
+ "none",
+ "args",
+ "trailer",
+ "assocs",
+ "paren_args",
+ "args_forward",
+ "opt_paren_args",
+ "opt_block_arg",
+ "block_arg",
+ "@10",
+ "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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "@11",
+ "@12",
+ "@13",
+ "@14",
+ "@15",
+ "@16",
+ "@17",
+ "f_marg",
+ "f_norm_arg",
+ "f_margs",
+ "f_marg_list",
+ "f_rest_marg",
+ "f_any_kwrest",
+ "f_kwrest",
+ "f_no_kwarg",
+ "f_eq",
+ "block_args_tail",
+ "@18",
+ "f_block_kwarg",
+ "opt_f_block_arg",
+ "f_block_arg",
+ "opt_block_args_tail",
+ "excessed_comma",
+ "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",
+ "@19",
+ "@20",
+ "f_args",
+ "do_block",
+ "@21",
+ "@22",
+ "do_body",
+ "@23",
+ "operation3",
+ "@24",
+ "@25",
+ "@26",
+ "@27",
+ "@28",
+ "cases",
+ "p_top_expr",
+ "p_cases",
+ "@29",
+ "@30",
+ "p_expr",
+ "p_args",
+ "p_find",
+ "p_args_tail",
+ "p_kwargs",
+ "p_as",
+ "p_variable",
+ "p_alt",
+ "p_expr_basic",
+ "p_lparen",
+ "p_lbracket",
+ "p_value",
+ "p_const",
+ "rbrace",
+ "@31",
+ "@32",
+ "p_args_head",
+ "p_arg",
+ "p_args_post",
+ "p_rest",
+ "p_kwarg",
+ "p_any_kwrest",
+ "p_kw",
+ "p_kw_label",
+ "string_contents",
+ "p_kwrest",
+ "kwrest_mark",
+ "p_kwnorest",
+ "p_primitive",
+ "p_var_ref",
+ "p_expr_ref",
+ "nonlocal_var",
+ "exc_list",
+ "exc_var",
+ "numeric",
+ "string",
+ "string1",
+ "xstring_contents",
+ "regexp_contents",
+ "word_list",
+ "word",
+ "string_content",
+ "symbol_list",
+ "qword_list",
+ "qsym_list",
+ "string_dvar",
+ "@33",
+ "ssym",
+ "dsym",
+ "@34",
+ "f_paren_args",
+ "args_tail",
+ "@35",
+ "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
+
+def _reduce_1(val, _values, result)
+ @current_arg_stack.push(nil)
+ @max_numparam_stack.push(static: true)
+
+ result
+end
+
+def _reduce_2(val, _values, result)
+ result = val[1]
+
+ @current_arg_stack.pop
+ @max_numparam_stack.pop
+
+ 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
+
+# reduce 8 omitted
+
+def _reduce_9(val, _values, result)
+ result = @builder.preexe(val[0], *val[1])
+
+ result
+end
+
+def _reduce_10(val, _values, result)
+ result = val
+
+ result
+end
+
+def _reduce_11(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_12(val, _values, result)
+ result = @builder.compstmt(val[0])
+
+ result
+end
+
+def _reduce_13(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_14(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_15(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_16(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+# reduce 17 omitted
+
+def _reduce_18(val, _values, result)
+ diagnostic :error, :begin_in_method, nil, val[0]
+
+ result
+end
+
+def _reduce_19(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_20(val, _values, result)
+ result = @builder.alias(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_21(val, _values, result)
+ result = @builder.alias(val[0],
+ @builder.gvar(val[1]),
+ @builder.gvar(val[2]))
+
+ result
+end
+
+def _reduce_22(val, _values, result)
+ result = @builder.alias(val[0],
+ @builder.gvar(val[1]),
+ @builder.back_ref(val[2]))
+
+ result
+end
+
+def _reduce_23(val, _values, result)
+ diagnostic :error, :nth_ref_alias, nil, val[2]
+
+ result
+end
+
+def _reduce_24(val, _values, result)
+ result = @builder.undef_method(val[0], val[1])
+
+ result
+end
+
+def _reduce_25(val, _values, result)
+ result = @builder.condition_mod(val[0], nil,
+ val[1], val[2])
+
+ result
+end
+
+def _reduce_26(val, _values, result)
+ result = @builder.condition_mod(nil, val[0],
+ val[1], val[2])
+
+ result
+end
+
+def _reduce_27(val, _values, result)
+ result = @builder.loop_mod(:while, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_28(val, _values, result)
+ result = @builder.loop_mod(:until, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_29(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_30(val, _values, result)
+ result = @builder.postexe(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+# reduce 31 omitted
+
+def _reduce_32(val, _values, result)
+ result = @builder.multi_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_33(val, _values, result)
+ result = @builder.assign(val[0], val[1],
+ @builder.array(nil, val[2], nil))
+
+ result
+end
+
+def _reduce_34(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_35(val, _values, result)
+ result = @builder.multi_assign(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 36 omitted
+
+def _reduce_37(val, _values, result)
+ result = @builder.assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_38(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_39(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_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)
+ 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)
+ 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_43(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_44(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ result = @builder.def_endless_method(def_t, name_t,
+ val[1], val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_45(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_method(def_t, name_t,
+ val[1], val[2], method_body)
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_46(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t,
+ val[1], val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_47(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t,
+ val[1], val[2], method_body)
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_48(val, _values, result)
+ @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 49 omitted
+
+def _reduce_50(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 51 omitted
+
+# reduce 52 omitted
+
+def _reduce_53(val, _values, result)
+ result = @builder.logical_op(:and, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_54(val, _values, result)
+ result = @builder.logical_op(:or, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_55(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[2], nil)
+
+ result
+end
+
+def _reduce_56(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[1], nil)
+
+ result
+end
+
+def _reduce_57(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_58(val, _values, result)
+ @pattern_variables.pop
+ @context.in_kwarg = val[2]
+ result = @builder.match_pattern(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_59(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_60(val, _values, result)
+ @pattern_variables.pop
+ @context.in_kwarg = val[2]
+ result = @builder.match_pattern_p(val[0], val[1], val[3])
+
+ result
+end
+
+# reduce 61 omitted
+
+# reduce 62 omitted
+
+def _reduce_63(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_64(val, _values, result)
+ @lexer.cond.pop
+ result = [ val[1], val[2] ]
+
+ result
+end
+
+def _reduce_65(val, _values, result)
+ local_push
+ @current_arg_stack.push(nil)
+
+ result = [ val[0], @context.dup ]
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_66(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+def _reduce_67(val, _values, result)
+ @lexer.state = :expr_fname
+ @context.in_argdef = true
+
+ result
+end
+
+def _reduce_68(val, _values, result)
+ result = [ val[0], val[1], val[2], val[4] ]
+
+ result
+end
+
+# reduce 69 omitted
+
+# reduce 70 omitted
+
+# reduce 71 omitted
+
+def _reduce_72(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_73(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_74(val, _values, result)
+ @context.in_block = val[1].in_block
+ result = [ val[0], *val[2], val[3] ]
+
+ result
+end
+
+# reduce 75 omitted
+
+def _reduce_76(val, _values, result)
+ result = @builder.call_method(nil, nil, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_77(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_78(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_79(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_80(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_81(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_82(val, _values, result)
+ result = @builder.keyword_cmd(:super, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_83(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_84(val, _values, result)
+ result = @builder.keyword_cmd(:return, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_85(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_86(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_87(val, _values, result)
+ result = @builder.multi_lhs(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_88(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_89(val, _values, result)
+ result = @builder.multi_lhs(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_90(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 91 omitted
+
+def _reduce_92(val, _values, result)
+ result = val[0].
+ push(val[1])
+
+ result
+end
+
+def _reduce_93(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1], val[2]))
+
+ result
+end
+
+def _reduce_94(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1], val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_95(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1]))
+
+ result
+end
+
+def _reduce_96(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1])).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_97(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_98(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_99(val, _values, result)
+ result = [ @builder.splat(val[0]) ]
+
+ result
+end
+
+def _reduce_100(val, _values, result)
+ result = [ @builder.splat(val[0]),
+ *val[2] ]
+
+ result
+end
+
+# reduce 101 omitted
+
+def _reduce_102(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_103(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_104(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_105(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_106(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_107(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_108(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_109(val, _values, result)
+ result = @builder.index_asgn(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_110(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_111(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_112(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_113(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_fetch(val[0], val[1], val[2]))
+
+ result
+end
+
+def _reduce_114(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_global(val[0], val[1]))
+
+ result
+end
+
+def _reduce_115(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_116(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_117(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_118(val, _values, result)
+ result = @builder.index_asgn(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_119(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_120(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_121(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_122(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_fetch(val[0], val[1], val[2]))
+
+ result
+end
+
+def _reduce_123(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_global(val[0], val[1]))
+
+ result
+end
+
+def _reduce_124(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_125(val, _values, result)
+ diagnostic :error, :module_name_const, nil, val[0]
+
+ result
+end
+
+# reduce 126 omitted
+
+def _reduce_127(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_128(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_129(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 130 omitted
+
+# reduce 131 omitted
+
+# reduce 132 omitted
+
+# reduce 133 omitted
+
+# reduce 134 omitted
+
+def _reduce_135(val, _values, result)
+ result = @builder.symbol_internal(val[0])
+
+ result
+end
+
+# reduce 136 omitted
+
+def _reduce_137(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_138(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_139(val, _values, result)
+ result = val[0] << val[3]
+
+ result
+end
+
+# 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
+
+# reduce 200 omitted
+
+# reduce 201 omitted
+
+# reduce 202 omitted
+
+# reduce 203 omitted
+
+# reduce 204 omitted
+
+# reduce 205 omitted
+
+# reduce 206 omitted
+
+# reduce 207 omitted
+
+# reduce 208 omitted
+
+# reduce 209 omitted
+
+# reduce 210 omitted
+
+def _reduce_211(val, _values, result)
+ result = @builder.assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_212(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_213(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_214(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_215(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_216(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_217(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_218(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_219(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_220(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_221(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_222(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_223(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_224(val, _values, result)
+ result = @builder.range_inclusive(nil, val[0], val[1])
+
+ result
+end
+
+def _reduce_225(val, _values, result)
+ result = @builder.range_exclusive(nil, 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.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+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.unary_op(val[0],
+ @builder.binary_op(
+ val[1], val[2], val[3]))
+
+ result
+end
+
+def _reduce_233(val, _values, result)
+ result = @builder.unary_op(val[0], val[1])
+
+ result
+end
+
+def _reduce_234(val, _values, result)
+ result = @builder.unary_op(val[0], val[1])
+
+ result
+end
+
+def _reduce_235(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ 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.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 239 omitted
+
+def _reduce_240(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_241(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+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.match_op(val[0], val[1], val[2])
+
+ result
+end
+
+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.not_op(val[0], nil, val[1], nil)
+
+ result
+end
+
+def _reduce_246(val, _values, result)
+ result = @builder.unary_op(val[0], val[1])
+
+ result
+end
+
+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
+
+def _reduce_249(val, _values, result)
+ result = @builder.logical_op(:and, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_250(val, _values, result)
+ result = @builder.logical_op(:or, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_251(val, _values, result)
+ @context.in_defined = true
+
+ result
+end
+
+def _reduce_252(val, _values, result)
+ @context.in_defined = false
+ result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[3] ], nil)
+
+ result
+end
+
+def _reduce_253(val, _values, result)
+ result = @builder.ternary(val[0], val[1],
+ val[2], val[4], val[5])
+
+ result
+end
+
+def _reduce_254(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ result = @builder.def_endless_method(def_t, name_t,
+ val[1], val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_255(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_method(def_t, name_t,
+ val[1], val[2], method_body)
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_256(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t,
+ val[1], val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_257(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t,
+ val[1], val[2], method_body)
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+# reduce 258 omitted
+
+# reduce 259 omitted
+
+# reduce 260 omitted
+
+# reduce 261 omitted
+
+# reduce 262 omitted
+
+def _reduce_263(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_264(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 265 omitted
+
+# reduce 266 omitted
+
+# reduce 267 omitted
+
+def _reduce_268(val, _values, result)
+ result = val[0] << @builder.associate(nil, val[2], nil)
+
+ result
+end
+
+def _reduce_269(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+
+ result
+end
+
+# reduce 270 omitted
+
+def _reduce_271(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_272(val, _values, result)
+ result = val
+
+ result
+end
+
+def _reduce_273(val, _values, result)
+ unless @static_env.declared_forward_args?
+ diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3]
+ end
+
+ result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]]
+
+ result
+end
+
+def _reduce_274(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_275(val, _values, result)
+ result = [ nil, [], nil ]
+
+ result
+end
+
+# reduce 276 omitted
+
+def _reduce_277(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 278 omitted
+
+# reduce 279 omitted
+
+def _reduce_280(val, _values, result)
+ result = val[0] << @builder.associate(nil, val[2], nil)
+
+ result
+end
+
+def _reduce_281(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+
+ result
+end
+
+def _reduce_282(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_283(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_284(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+ result.concat(val[1])
+
+ result
+end
+
+def _reduce_285(val, _values, result)
+ assocs = @builder.associate(nil, val[2], nil)
+ result = val[0] << assocs
+ result.concat(val[3])
+
+ result
+end
+
+def _reduce_286(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_287(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_288(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_289(val, _values, result)
+ result = @builder.block_pass(val[0], val[1])
+
+ result
+end
+
+def _reduce_290(val, _values, result)
+ if !@static_env.declared_anonymous_blockarg?
+ diagnostic :error, :no_anonymous_blockarg, nil, val[0]
+ end
+
+ result = @builder.block_pass(val[0], nil)
+
+ result
+end
+
+def _reduce_291(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_292(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_293(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_294(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_295(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_296(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_297(val, _values, result)
+ result = @builder.array(nil, val[0], nil)
+
+ result
+end
+
+# reduce 298 omitted
+
+def _reduce_299(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_300(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_301(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+# reduce 302 omitted
+
+# reduce 303 omitted
+
+# reduce 304 omitted
+
+# reduce 305 omitted
+
+# reduce 306 omitted
+
+# reduce 307 omitted
+
+# reduce 308 omitted
+
+# reduce 309 omitted
+
+# reduce 310 omitted
+
+# reduce 311 omitted
+
+def _reduce_312(val, _values, result)
+ result = @builder.call_method(nil, nil, val[0])
+
+ result
+end
+
+def _reduce_313(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_314(val, _values, result)
+ @lexer.cmdarg.pop
+
+ result = @builder.begin_keyword(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_315(val, _values, result)
+ @lexer.state = :expr_endarg
+
+ result
+end
+
+def _reduce_316(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_317(val, _values, result)
+ @lexer.state = :expr_endarg
+
+ result
+end
+
+def _reduce_318(val, _values, result)
+ result = @builder.begin(val[0], nil, val[3])
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ result = @builder.array(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ result = @builder.associate(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ result = @builder.keyword_cmd(:return, val[0])
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2])
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0])
+
+ result
+end
+
+def _reduce_328(val, _values, result)
+ @context.in_defined = true
+
+ result
+end
+
+def _reduce_329(val, _values, result)
+ @context.in_defined = false
+ result = @builder.keyword_cmd(:defined?, val[0],
+ val[2], [ val[4] ], val[5])
+
+ result
+end
+
+def _reduce_330(val, _values, result)
+ result = @builder.not_op(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_331(val, _values, result)
+ result = @builder.not_op(val[0], val[1], nil, val[2])
+
+ result
+end
+
+def _reduce_332(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 333 omitted
+
+def _reduce_334(val, _values, result)
+ begin_t, args, body, end_t = val[1]
+ result = @builder.block(val[0],
+ begin_t, args, body, end_t)
+
+ result
+end
+
+# reduce 335 omitted
+
+def _reduce_336(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_337(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_338(val, _values, result)
+ result = @builder.loop(:while, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_339(val, _values, result)
+ result = @builder.loop(:until, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_340(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_341(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_342(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_343(val, _values, result)
+ result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5])
+
+ result
+end
+
+def _reduce_344(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_345(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_346(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_347(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_349(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ result = @builder.def_method(def_t, name_t, val[1],
+ val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_351(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ result = @builder.def_singleton(def_t, recv, dot_t, name_t, val[1],
+ val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_352(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_353(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_354(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_355(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 356 omitted
+
+def _reduce_357(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_358(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_359(val, _values, result)
+ result = val[0]
+ @context.in_argdef = true
+
+ result
+end
+
+def _reduce_360(val, _values, result)
+ if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda)
+ diagnostic :error, :invalid_return, nil, val[0]
+ end
+
+ result
+end
+
+# reduce 361 omitted
+
+# reduce 362 omitted
+
+def _reduce_363(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 364 omitted
+
+# reduce 365 omitted
+
+# reduce 366 omitted
+
+def _reduce_367(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 368 omitted
+
+def _reduce_369(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 370 omitted
+
+# reduce 371 omitted
+
+def _reduce_372(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_373(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_374(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_375(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 376 omitted
+
+def _reduce_377(val, _values, result)
+ result = val[0].
+ push(val[2])
+
+ result
+end
+
+def _reduce_378(val, _values, result)
+ result = val[0].
+ push(val[2]).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_379(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_380(val, _values, result)
+ result = [ val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_381(val, _values, result)
+ result = @builder.restarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_382(val, _values, result)
+ result = @builder.restarg(val[0])
+
+ result
+end
+
+# reduce 383 omitted
+
+# reduce 384 omitted
+
+def _reduce_385(val, _values, result)
+ @context.in_argdef = false
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_391(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_392(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 393 omitted
+
+def _reduce_394(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_395(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_396(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 399 omitted
+
+def _reduce_400(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_401(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_402(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_403(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_404(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_405(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_406(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_407(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 408 omitted
+
+def _reduce_409(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_410(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_411(val, _values, result)
+ @max_numparam_stack.has_ordinary_params!
+ @current_arg_stack.set(nil)
+ @context.in_argdef = false
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_412(val, _values, result)
+ @max_numparam_stack.has_ordinary_params!
+ @current_arg_stack.set(nil)
+ @context.in_argdef = false
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_413(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_414(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_415(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_416(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_417(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 418 omitted
+
+def _reduce_419(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_421(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+ args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2]
+ begin_t, body, end_t = val[4]
+
+ @max_numparam_stack.pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @context.in_lambda = val[1].in_lambda
+
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ result
+end
+
+def _reduce_422(val, _values, result)
+ @context.in_argdef = false
+ @max_numparam_stack.has_ordinary_params!
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_423(val, _values, result)
+ @context.in_argdef = false
+ if val[0].any?
+ @max_numparam_stack.has_ordinary_params!
+ end
+ result = @builder.args(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_424(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ @context.in_lambda = val[1].in_lambda
+ result = [ val[0], val[2], val[3] ]
+
+ result
+end
+
+def _reduce_426(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_427(val, _values, result)
+ @context.in_lambda = val[1].in_lambda
+ result = [ val[0], val[2], val[3] ]
+
+ result
+end
+
+def _reduce_428(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_429(val, _values, result)
+ @context.in_block = val[1].in_block
+ result = [ val[0], *val[2], val[3] ]
+
+ result
+end
+
+def _reduce_430(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_431(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_432(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_433(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_434(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_435(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_436(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_437(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_438(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_439(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_440(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_441(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_442(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_443(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ @context.in_block = val[1].in_block
+ result = [ val[0], *val[2], val[3] ]
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ @context.in_block = val[1].in_block
+ result = [ val[0], *val[2], val[3] ]
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+
+ result
+end
+
+def _reduce_448(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_449(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+
+ result
+end
+
+def _reduce_450(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_451(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_452(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_453(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 454 omitted
+
+def _reduce_455(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+ @pattern_hash_keys.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ @pattern_variables.pop
+ @pattern_hash_keys.pop
+ @context.in_kwarg = val[1]
+
+ result
+end
+
+def _reduce_457(val, _values, result)
+ result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]),
+ *val[6] ]
+
+ result
+end
+
+def _reduce_458(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 459 omitted
+
+def _reduce_460(val, _values, result)
+ result = [ val[0], nil ]
+
+ result
+end
+
+def _reduce_461(val, _values, result)
+ result = [ val[0], @builder.if_guard(val[1], val[2]) ]
+
+ result
+end
+
+def _reduce_462(val, _values, result)
+ result = [ val[0], @builder.unless_guard(val[1], val[2]) ]
+
+ result
+end
+
+# reduce 463 omitted
+
+def _reduce_464(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], val[1])
+ result = @builder.array_pattern(nil, [ item ], nil)
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil)
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ result = @builder.find_pattern(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_467(val, _values, result)
+ result = @builder.array_pattern(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ result = @builder.hash_pattern(nil, val[0], nil)
+
+ result
+end
+
+# reduce 469 omitted
+
+def _reduce_470(val, _values, result)
+ result = @builder.match_as(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 471 omitted
+
+def _reduce_472(val, _values, result)
+ result = @builder.match_alt(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 473 omitted
+
+def _reduce_474(val, _values, result)
+ result = val[0]
+ @pattern_hash_keys.push
+
+ result
+end
+
+def _reduce_475(val, _values, result)
+ result = val[0]
+ @pattern_hash_keys.push
+
+ result
+end
+
+# reduce 476 omitted
+
+# reduce 477 omitted
+
+def _reduce_478(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_479(val, _values, result)
+ @pattern_hash_keys.pop
+ pattern = @builder.find_pattern(nil, val[2], nil)
+ result = @builder.const_pattern(val[0], val[1], pattern, val[3])
+
+ result
+end
+
+def _reduce_480(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_481(val, _values, result)
+ pattern = @builder.array_pattern(val[1], nil, val[2])
+ result = @builder.const_pattern(val[0], val[1], pattern, val[2])
+
+ result
+end
+
+def _reduce_482(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_483(val, _values, result)
+ @pattern_hash_keys.pop
+ pattern = @builder.find_pattern(nil, val[2], nil)
+ result = @builder.const_pattern(val[0], val[1], pattern, val[3])
+
+ result
+end
+
+def _reduce_484(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_485(val, _values, result)
+ pattern = @builder.array_pattern(val[1], nil, val[2])
+ result = @builder.const_pattern(val[0], val[1], pattern, val[2])
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ result = @builder.array_pattern(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ result = @builder.find_pattern(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ result = @builder.array_pattern(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_489(val, _values, result)
+ @pattern_hash_keys.push
+ result = @context.in_kwarg
+ @context.in_kwarg = false
+
+ result
+end
+
+def _reduce_490(val, _values, result)
+ @pattern_hash_keys.pop
+ @context.in_kwarg = val[1]
+ result = @builder.hash_pattern(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_491(val, _values, result)
+ result = @builder.hash_pattern(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_492(val, _values, result)
+ @pattern_hash_keys.push
+
+ result
+end
+
+def _reduce_493(val, _values, result)
+ @pattern_hash_keys.pop
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ result = [ *val[0], val[1] ]
+
+ result
+end
+
+def _reduce_497(val, _values, result)
+ match_rest = @builder.match_rest(val[1], val[2])
+ result = [ *val[0], match_rest ]
+
+ result
+end
+
+def _reduce_498(val, _values, result)
+ match_rest = @builder.match_rest(val[1], val[2])
+ result = [ *val[0], match_rest, *val[4] ]
+
+ result
+end
+
+def _reduce_499(val, _values, result)
+ result = [ *val[0], @builder.match_rest(val[1]) ]
+
+ result
+end
+
+def _reduce_500(val, _values, result)
+ result = [ *val[0], @builder.match_rest(val[1]), *val[3] ]
+
+ result
+end
+
+# reduce 501 omitted
+
+def _reduce_502(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], val[1])
+ result = [ item ]
+
+ result
+end
+
+def _reduce_503(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], val[2])
+ result = [ *val[0], last_item ]
+
+ 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
+
+def _reduce_506(val, _values, result)
+ result = [ val[0], *val[2], val[4] ]
+
+ result
+end
+
+def _reduce_507(val, _values, result)
+ result = @builder.match_rest(val[0], val[1])
+
+ result
+end
+
+def _reduce_508(val, _values, result)
+ result = @builder.match_rest(val[0])
+
+ 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
+
+def _reduce_512(val, _values, result)
+ result = [ *val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_513(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_514(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_515(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_516(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_517(val, _values, result)
+ result = [ *val[0], val[2] ]
+
+ result
+end
+
+def _reduce_518(val, _values, result)
+ result = @builder.match_pair(*val[0], val[1])
+
+ result
+end
+
+def _reduce_519(val, _values, result)
+ result = @builder.match_label(*val[0])
+
+ result
+end
+
+def _reduce_520(val, _values, result)
+ result = [:label, val[0]]
+
+ result
+end
+
+def _reduce_521(val, _values, result)
+ result = [:quoted, [val[0], val[1], val[2]]]
+
+ result
+end
+
+def _reduce_522(val, _values, result)
+ result = [ @builder.match_rest(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_523(val, _values, result)
+ result = [ @builder.match_rest(val[0], nil) ]
+
+ result
+end
+
+def _reduce_524(val, _values, result)
+ result = [ @builder.match_nil_pattern(val[0], val[1]) ]
+
+ result
+end
+
+# reduce 525 omitted
+
+# reduce 526 omitted
+
+# reduce 527 omitted
+
+def _reduce_528(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_529(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_530(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_531(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], nil)
+
+ result
+end
+
+# reduce 532 omitted
+
+# reduce 533 omitted
+
+# reduce 534 omitted
+
+def _reduce_535(val, _values, result)
+ result = @builder.range_inclusive(nil, val[0], val[1])
+
+ result
+end
+
+def _reduce_536(val, _values, result)
+ result = @builder.range_exclusive(nil, val[0], val[1])
+
+ result
+end
+
+# reduce 537 omitted
+
+# reduce 538 omitted
+
+# reduce 539 omitted
+
+# reduce 540 omitted
+
+# reduce 541 omitted
+
+# reduce 542 omitted
+
+# reduce 543 omitted
+
+# reduce 544 omitted
+
+def _reduce_545(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+# reduce 546 omitted
+
+def _reduce_547(val, _values, result)
+ result = @builder.assignable(@builder.match_var(val[0]))
+
+ result
+end
+
+def _reduce_548(val, _values, result)
+ name = val[1][0]
+ unless static_env.declared?(name)
+ diagnostic :error, :undefined_lvar, { :name => name }, val[1]
+ end
+
+ lvar = @builder.accessible(@builder.ident(val[1]))
+ result = @builder.pin(val[0], lvar)
+
+ result
+end
+
+def _reduce_549(val, _values, result)
+ non_lvar = @builder.accessible(val[1])
+ result = @builder.pin(val[0], non_lvar)
+
+ result
+end
+
+def _reduce_550(val, _values, result)
+ expr = @builder.begin(val[1], val[2], val[3])
+ result = @builder.pin(val[0], expr)
+
+ result
+end
+
+def _reduce_551(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_552(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_553(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_554(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_555(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_556(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 557 omitted
+
+# reduce 558 omitted
+
+def _reduce_559(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 560 omitted
+
+def _reduce_561(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 562 omitted
+
+# reduce 563 omitted
+
+# reduce 564 omitted
+
+def _reduce_565(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_566(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_567(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_568(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_569(val, _values, result)
+ string = @builder.string(val[0])
+ result = @builder.dedent_string(string, @lexer.dedent_level)
+
+ result
+end
+
+def _reduce_570(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_571(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_572(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_573(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_574(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_575(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_576(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_577(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_578(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_579(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_580(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_581(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_582(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_583(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_584(val, _values, result)
+ result = val[0] << @builder.string_internal(val[1])
+
+ result
+end
+
+def _reduce_585(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_586(val, _values, result)
+ result = val[0] << @builder.symbol_internal(val[1])
+
+ result
+end
+
+def _reduce_587(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_588(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_589(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_590(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_591(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_592(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_593(val, _values, result)
+ result = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_594(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_595(val, _values, result)
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+
+ result
+end
+
+def _reduce_596(val, _values, result)
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_597(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_598(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_599(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 600 omitted
+
+# reduce 601 omitted
+
+# reduce 602 omitted
+
+def _reduce_603(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_604(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_605(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_606(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_607(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_608(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_609(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.rational(val[0])
+
+ result
+end
+
+def _reduce_610(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.complex(val[0])
+
+ result
+end
+
+def _reduce_611(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_612(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_613(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_614(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_615(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_616(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_617(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_618(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_619(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_620(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_621(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_622(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_623(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_624(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_625(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_626(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_627(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_628(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_629(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_630(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_631(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_632(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_633(val, _values, result)
+ result = [ val[0], val[2] ]
+
+ result
+end
+
+def _reduce_634(val, _values, result)
+ result = nil
+
+ result
+end
+
+# reduce 635 omitted
+
+def _reduce_636(val, _values, result)
+ @context.in_argdef = false
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_637(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+ @context.in_argdef = false
+
+ result
+end
+
+# reduce 638 omitted
+
+def _reduce_639(val, _values, result)
+ result = @context.dup
+ @context.in_kwarg = true
+ @context.in_argdef = true
+
+ result
+end
+
+def _reduce_640(val, _values, result)
+ @context.in_kwarg = val[0].in_kwarg
+ @context.in_argdef = false
+ result = @builder.args(nil, val[1], nil)
+
+ result
+end
+
+def _reduce_641(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_642(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_643(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_644(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_645(val, _values, result)
+ @static_env.declare_forward_args
+ result = [ @builder.forward_arg(val[0]) ]
+
+ result
+end
+
+def _reduce_646(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_647(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_648(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_649(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_650(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_651(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_652(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_653(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_654(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_655(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_656(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_657(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_658(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_659(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_660(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_661(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_662(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_663(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_664(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_665(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_666(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_667(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 668 omitted
+
+def _reduce_669(val, _values, result)
+ @static_env.declare val[0][0]
+
+ @max_numparam_stack.has_ordinary_params!
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_670(val, _values, result)
+ @current_arg_stack.set(val[0][0])
+ result = val[0]
+
+ result
+end
+
+def _reduce_671(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_672(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_673(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_674(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_675(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])
+ @context.in_argdef = false
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_676(val, _values, result)
+ @current_arg_stack.set(nil)
+ @context.in_argdef = true
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_677(val, _values, result)
+ @current_arg_stack.set(nil)
+ @context.in_argdef = true
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_678(val, _values, result)
+ @context.in_argdef = true
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_679(val, _values, result)
+ @context.in_argdef = true
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_680(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_681(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_682(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_683(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 684 omitted
+
+# reduce 685 omitted
+
+def _reduce_686(val, _values, result)
+ result = [ @builder.kwnilarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_687(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_688(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ result
+end
+
+def _reduce_689(val, _values, result)
+ @current_arg_stack.set(0)
+ @context.in_argdef = true
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_690(val, _values, result)
+ @current_arg_stack.set(0)
+ @context.in_argdef = true
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_691(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_692(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_693(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_694(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 695 omitted
+
+# reduce 696 omitted
+
+def _reduce_697(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_698(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 699 omitted
+
+# reduce 700 omitted
+
+def _reduce_701(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_702(val, _values, result)
+ @static_env.declare_anonymous_blockarg
+
+ result = @builder.blockarg(val[0], nil)
+
+ result
+end
+
+def _reduce_703(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_704(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 705 omitted
+
+def _reduce_706(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_707(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 708 omitted
+
+def _reduce_709(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_710(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_711(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_712(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_713(val, _values, result)
+ result = @builder.pair_label(val[0])
+
+ result
+end
+
+def _reduce_714(val, _values, result)
+ result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_715(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# reduce 716 omitted
+
+# reduce 717 omitted
+
+# reduce 718 omitted
+
+# reduce 719 omitted
+
+# reduce 720 omitted
+
+# reduce 721 omitted
+
+# reduce 722 omitted
+
+# reduce 723 omitted
+
+# reduce 724 omitted
+
+# reduce 725 omitted
+
+# reduce 726 omitted
+
+# reduce 727 omitted
+
+def _reduce_728(val, _values, result)
+ result = [:dot, val[0][1]]
+
+ result
+end
+
+def _reduce_729(val, _values, result)
+ result = [:anddot, val[0][1]]
+
+ result
+end
+
+# reduce 730 omitted
+
+# reduce 731 omitted
+
+# reduce 732 omitted
+
+# reduce 733 omitted
+
+def _reduce_734(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_735(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_736(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 737 omitted
+
+# reduce 738 omitted
+
+# reduce 739 omitted
+
+def _reduce_740(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 741 omitted
+
+# reduce 742 omitted
+
+# reduce 743 omitted
+
+def _reduce_744(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby31
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby32.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby32.rb
new file mode 100644
index 000000000..d75b3aecc
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/ruby32.rb
@@ -0,0 +1,8334 @@
+# -*- 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 Ruby32 < Parser::Base
+
+
+ def version
+ 32
+ end
+
+ def default_encoding
+ Encoding::UTF_8
+ end
+
+ def endless_method_name(name_t)
+ if !%w[=== == != <= >=].include?(name_t[0]) && name_t[0].end_with?('=')
+ diagnostic :error, :endless_setter, nil, name_t
+ end
+ end
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ @max_numparam_stack.push(static: true)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ @max_numparam_stack.pop
+ end
+
+ def try_declare_numparam(node)
+ 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_max_numparam_stack = max_numparam_stack.stack.dup
+ # ignore current block scope
+ raw_max_numparam_stack.pop
+
+ raw_max_numparam_stack.reverse_each do |outer_scope|
+ if outer_scope[:static]
+ # found an outer scope that can't have numparams
+ # like def/class/etc
+ break
+ else
+ outer_scope_has_numparams = outer_scope[:value] > 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
+ # like proc { _1; proc { proc { proc { _2 }} }}
+ # with numparams, so we need to continue
+ end
+ end
+ end
+
+ static_env.declare(name)
+ max_numparam_stack.register(name[1].to_i)
+
+ true
+ else
+ false
+ end
+ end
+##### State transition tables begin ###
+
+clist = [
+'-615,-116,-118,-124,1036,-121,830,-615,-615,-615,-728,-120,-615,-615',
+'-615,927,-615,311,622,239,-122,1212,221,222,-615,311,-615,-615,-615',
+'663,311,-117,-102,665,698,-118,-615,-615,-123,-615,-615,-615,-615,-615',
+'-88,894,240,-728,-119,-620,622,622,699,-122,622,835,-620,894,240,629',
+'240,-121,-124,-118,240,622,-615,-615,-615,-615,-615,-615,-615,-615,-615',
+'-615,-615,-615,-615,-615,-119,622,-615,-615,-615,-120,-615,-615,-714',
+'306,-615,-116,-123,-615,-615,662,-615,-715,-615,664,-615,-626,-615,-615',
+'310,-615,-615,-615,-615,-615,126,-615,310,-615,-620,125,240,310,-715',
+'-116,-118,-124,-117,-121,-116,-118,-124,-615,-121,-120,-615,-615,-615',
+'-615,-120,-615,126,-615,-122,-719,1002,125,-615,-122,-109,-615,-719',
+'-719,-719,-117,-714,-719,-719,-719,-117,-719,-123,-110,-112,122,-116',
+'-123,-113,-719,-719,-719,-719,-719,126,126,-112,-115,126,125,125,-719',
+'-719,125,-719,-719,-719,-719,-719,126,104,105,991,-110,125,-111,-728',
+'-109,927,135,-111,221,222,-627,-119,126,-107,-114,524,-119,125,-719',
+'-719,-719,-719,-719,-719,-719,-719,-719,-719,-719,-719,-719,-719,221',
+'222,-719,-719,-719,-112,923,-719,927,218,-719,240,-108,-719,-719,233',
+'-719,-617,-719,926,-719,602,-719,-719,-617,-719,-719,-719,-719,-719',
+'1001,-719,-719,-719,-110,-714,-111,-117,-109,650,104,105,-124,106,107',
+'-112,219,-719,-112,-618,-719,-719,-719,-719,-509,-719,-618,-719,237',
+'-719,-112,629,-719,220,921,-120,-719,-719,-719,835,240,-740,-719,-719',
+'-110,-719,-111,-110,-109,-111,-123,-109,-617,-719,-719,221,222,311,922',
+'-110,223,-111,233,-109,240,-719,-719,300,-719,-719,-719,-719,-719,652',
+'651,648,698,493,-619,490,489,488,498,491,-618,-619,877,-124,106,107',
+'1064,684,501,-119,950,-719,-719,-719,-719,-719,-719,-719,-719,-719,-719',
+'-719,-719,-719,-719,685,237,-719,-719,-719,496,690,-719,-121,-740,-719',
+'650,306,-719,506,505,509,508,-719,361,-719,502,-719,-719,650,-719,-719',
+'-719,-719,-719,-320,-719,-719,-719,-619,310,-118,-320,-320,-320,126',
+'-119,-320,-320,-320,125,-320,-719,-115,264,-719,-719,90,-719,-320,-719',
+'-320,-320,-320,-121,-124,487,-719,233,91,-120,-320,-320,362,-320,-320',
+'-320,-320,-320,92,652,651,648,233,126,650,261,240,650,125,263,262,227',
+'652,651,653,635,802,431,304,961,-320,-320,-320,-320,-320,-320,-320,-320',
+'-320,-320,-320,-320,-320,-320,126,-623,-320,-320,-320,125,924,-320,-623',
+'-740,-320,472,650,-320,-320,650,-320,650,-320,-633,-320,512,-320,-320',
+'-740,-320,-320,-320,-320,-320,650,-320,-612,-320,652,651,657,652,651',
+'-612,-612,-612,228,523,-612,-612,-612,-320,-612,525,-320,-320,-320,-320',
+'1064,-320,-612,-320,-612,-612,-612,614,-320,635,616,-122,-623,961,-612',
+'-612,526,-612,-612,-612,-612,-612,652,651,239,652,651,652,651,655,650',
+'428,861,126,933,863,430,429,125,929,652,651,648,930,-612,-612,-612,-612',
+'-612,-612,-612,-612,-612,-612,-612,-612,-612,-612,560,877,-612,-612',
+'-612,650,-612,-612,221,222,-612,635,227,-612,-612,636,-612,-612,-612',
+'304,-612,572,-612,-612,-612,-612,-612,-612,-612,-612,126,-612,685,-612',
+'574,125,652,651,666,493,576,490,489,488,498,491,684,-612,-109,-615,-612',
+'-612,-612,-612,501,-612,-615,-612,126,-719,-118,614,-612,125,616,-612',
+'-719,-719,-719,652,651,661,-719,-719,-624,-719,496,228,135,-112,-87',
+'-624,-612,-719,-719,506,505,509,508,240,-624,-121,502,-110,240,-719',
+'-719,1196,-719,-719,-719,-719,-719,614,587,-119,616,493,-320,490,489',
+'488,498,491,-615,-320,-622,588,240,595,-715,315,501,-622,-320,-719,-719',
+'-719,-719,-719,-719,-719,-719,-719,-719,-719,-719,-719,-719,-624,-627',
+'-719,-719,-719,496,690,-719,614,602,-719,613,-621,-719,506,505,509,508',
+'-719,-621,-719,502,-719,-719,240,-719,-719,-719,-719,-719,-320,-719',
+'-719,-719,-320,221,222,-320,-320,-320,1149,1150,-622,-320,-320,233,-320',
+'-719,-108,233,-719,-719,306,-111,-320,-719,-114,951,952,599,-117,487',
+'-719,-626,605,-120,-320,-320,-123,-320,-320,-320,-320,-320,986,894,264',
+'-621,493,-625,490,489,488,498,491,1159,-625,490,489,488,608,491,240',
+'501,617,-625,-320,-320,-320,-320,-320,-320,-320,-320,-320,-320,-320',
+'-320,-320,-320,-107,618,-320,-320,-320,496,689,-320,986,894,-320,576',
+'-116,-320,506,505,509,508,-320,629,-320,502,-320,-320,420,-320,-320',
+'-320,-320,-320,-320,-320,633,-320,-625,509,508,-320,-320,-320,281,282',
+'634,-320,-320,642,-320,-320,667,670,-320,-320,671,-320,-320,-320,-293',
+'955,673,959,958,487,-320,960,674,-122,-320,-320,678,-320,-320,-320,-320',
+'-320,240,682,280,279,493,227,490,489,488,498,491,493,594,490,489,488',
+'683,491,306,501,957,592,-320,-320,-320,-320,-320,-320,-320,-320,-320',
+'-320,-320,-320,-320,-320,696,697,-320,-320,-320,496,689,-320,240,701',
+'-320,704,714,-320,506,505,509,508,-320,705,-320,502,-320,-320,707,-320',
+'-320,-320,-320,-320,756,-320,709,-320,228,-385,-311,721,722,726,501',
+'227,227,-311,756,728,734,-320,604,1164,-320,-320,-311,-113,501,-320',
+'227,522,1162,735,264,487,-320,1187,264,-122,7,81,82,83,11,65,640,264',
+'264,71,72,240,502,790,75,-715,73,74,76,35,36,79,80,240,1057,240,502',
+'240,84,33,32,114,113,115,116,-311,-102,23,1057,805,228,228,240,10,53',
+'9,12,118,117,119,108,64,110,109,111,228,112,120,121,227,104,105,49,50',
+'48,-356,632,-615,608,227,816,821,-356,240,-615,630,638,823,826,-715',
+'831,-356,832,-615,45,640,836,38,860,864,66,67,227,865,68,-294,40,878',
+'560,1187,52,560,-715,890,264,894,855,856,640,24,857,120,121,912,102',
+'90,93,94,915,95,97,96,98,916,228,240,919,91,101,240,-356,928,-615,945',
+'228,85,261,92,106,107,263,262,46,47,333,81,82,83,11,65,946,947,963,71',
+'72,965,300,228,75,-719,73,74,76,35,36,79,80,129,130,131,132,133,84,33',
+'32,114,113,115,116,971,493,23,490,489,488,973,491,10,53,335,12,118,117',
+'119,108,64,110,109,111,975,112,120,121,227,104,105,49,50,48,227,677',
+'-719,574,-321,576,816,226,714,-719,675,-321,240,306,-714,306,224,718',
+'-719,45,-321,816,38,264,894,66,67,227,988,68,989,40,240,240,521,52,493',
+'-719,490,489,488,999,491,522,24,240,-295,240,1010,102,90,93,94,1014',
+'95,97,96,98,-293,228,1018,704,91,101,699,228,1021,-719,1023,-321,85',
+'1025,92,106,107,1027,1027,46,47,333,81,82,83,11,65,240,776,240,71,72',
+'240,1055,228,75,-714,73,74,76,35,36,79,80,1058,927,498,973,1070,84,33',
+'32,114,113,115,116,501,1159,23,490,489,488,240,491,10,53,335,12,118',
+'117,119,108,64,110,109,111,816,112,120,121,-321,104,105,49,50,48,-320',
+'-321,-612,509,508,1087,1089,-320,502,-612,-321,1094,-715,1095,-714,1100',
+'-320,1101,-612,45,1102,-296,38,1115,1116,66,67,1117,240,68,240,40,240',
+'240,240,52,240,-714,129,130,131,132,133,498,24,927,1124,1125,240,102',
+'90,93,94,501,95,97,96,98,1129,-321,1130,1132,91,101,704,-320,1135,-612',
+'1138,1140,85,1142,92,106,107,240,-385,46,47,333,81,82,83,11,65,1154',
+'509,508,71,72,1165,502,1166,75,1027,73,74,76,35,36,79,80,256,1027,1027',
+'1185,1188,84,33,32,114,113,115,116,1193,1194,23,129,130,131,132,133',
+'10,53,335,12,118,117,119,108,64,110,109,111,696,112,120,121,1116,104',
+'105,49,50,48,264,268,269,270,271,281,282,276,277,272,273,1204,257,258',
+'1204,704,274,275,1206,45,1208,255,38,1210,1212,66,67,1212,240,68,1027',
+'40,261,-715,267,52,263,262,-714,259,260,280,279,265,24,266,1229,1212',
+'1212,102,90,93,94,1212,95,97,96,98,3,,,,91,101,,278,,,,,85,,92,106,107',
+',,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,129',
+'130,131,132,133,84,33,32,114,113,115,116,,,23,,,,,679,10,53,335,12,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,268,269',
+'270,271,281,282,276,277,272,273,,257,258,,,274,275,,45,,,38,,,66,67',
+',,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,278,,-265,,,85,,92,106,107,,,46,47,333,81',
+'82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,679,10,53,335,12,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277,272,273',
+',257,258,,,274,275,,45,,,337,,,66,67,,,68,,40,261,,267,52,263,262,,259',
+'260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,278',
+',,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74',
+'76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,920,10,53,335',
+'12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,264',
+'268,269,270,271,281,282,276,277,272,273,,257,258,,,274,275,,45,,,38',
+',,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46,47',
+'333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,23,,,,,891,10,53,335,12,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277',
+'272,273,,257,258,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263',
+'262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,278,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53',
+'335,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48',
+'264,268,269,270,271,281,282,276,277,272,273,,257,258,,,274,275,,45,',
+',38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46',
+'47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277',
+'272,273,,257,258,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263',
+'262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,278,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53',
+'335,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48',
+'264,268,269,270,271,281,282,276,277,272,273,,257,258,,,274,275,,45,',
+',38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46',
+'47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277',
+'272,273,,257,258,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263',
+'262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,278,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53',
+'335,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48',
+'264,268,269,270,271,281,282,276,277,272,273,,257,258,,,274,275,,45,',
+',38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46',
+'47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277',
+'272,273,,257,258,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263',
+'262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,278,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53',
+'335,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48',
+'264,268,269,270,271,281,282,276,277,272,273,,257,258,,,274,275,,45,',
+',38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46',
+'47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277',
+'272,273,,257,258,,,274,275,,45,,,337,,,66,67,,,68,,40,261,,267,52,263',
+'262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,240,278,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,',
+',,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10',
+'53,335,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,264,268,269,270,271,281,282,276,277,272,273,,257,258,,,274,275,,45',
+',,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,278,,,,,85,,92,106,107,,,46',
+'47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,493,23,490,489,488,,491,10,53,335,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,493,,490,489,488,',
+'491,,714,,493,,490,489,488,,491,718,,45,,,38,,,66,67,,264,68,,40,,,',
+'52,,714,,493,,490,489,488,24,491,718,714,,102,90,93,94,,95,97,96,98',
+',,261,,91,101,263,262,,259,260,,85,,92,106,107,,714,46,47,333,81,82',
+'83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,264,,,10,53,335,12,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,264,-741,-741,-741,-741,281,282,261,,-741',
+'-741,263,262,,259,260,274,275,,45,,,337,,,66,67,,,68,,40,261,,267,52',
+'263,262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,',
+',91,101,,,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,',
+'75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10',
+'53,335,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,264,268,269,270,271,281,282,276,277,272,273,,-741,-741,,,274,275',
+',45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24',
+'266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46',
+'47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,264,268,269,270,271,281,282,276,277',
+'272,273,,-741,-741,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263',
+'262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,',
+'73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335',
+'12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,264',
+',,,,,,,,,,,,,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263,262',
+',259,260,,,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,',
+'85,,92,106,107,,,46,47,7,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35',
+'36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,9,12,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,268,269,270',
+'271,281,282,276,277,272,273,,-741,-741,,,274,275,,45,,,38,,,66,67,,',
+'68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,333,81,82,83',
+'11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115',
+'116,,,23,,,,,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,49,50,48,264,-741,-741,-741,-741,281,282,,,-741,-741,,,,,,274',
+'275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265',
+'24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107',
+',,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,',
+',84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,264,268,269,270,271,281,282',
+'276,277,272,273,,-741,-741,,,274,275,,45,,,38,,,66,67,,,68,,40,261,',
+'267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96',
+'98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71',
+'72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,',
+',,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,264,268,269,270,271,281,282,,,272,273,,,,,,274,275,,45,,,38',
+',,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,333',
+'81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114',
+'113,115,116,,,23,,,,,,10,53,335,12,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,264,-741,-741,-741,-741,281,282,,,-741,-741',
+',,,,,274,275,,45,,,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260',
+'280,279,265,24,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85',
+',92,106,107,,,46,47,333,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36',
+'79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,-741,-741,-741',
+'-741,281,282,,,-741,-741,,,,,,274,275,,45,,,38,,,66,67,,,68,,40,261',
+',267,52,263,262,,259,260,280,279,265,24,266,,,,102,90,93,94,,95,97,96',
+'98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,333,81,82,83,11,65,,,,71',
+'72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,',
+',,,10,53,335,12,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,264,-741,-741,-741,-741,281,282,,,-741,-741,,,,,,274,275,,45',
+',,38,,,66,67,,,68,,40,261,,267,52,263,262,,259,260,280,279,265,24,266',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,264,268,269,270,271,281,282,276,,272,273,,,,,,274,275,',
+'245,,,253,,,66,67,,,68,,,261,,267,52,263,262,,259,260,280,279,265,250',
+'266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106',
+'107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113',
+'115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,49,50,48,264,-741,-741,-741,-741,281,282,,,-741,-741,,,,,,274',
+'275,,245,,,253,,,66,67,,,68,,,261,,267,52,263,262,,259,260,280,279,265',
+'250,266,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,264,,,,,,,,,,,,,,,,274,275,,245,,,253,,,66,67',
+',,68,,,261,,267,52,263,262,,259,260,,,265,250,266,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73',
+'74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,',
+',118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,264,',
+',,,,,,,,,,,,,,274,275,,245,,,253,,,66,67,,,68,,,261,,,52,263,262,,259',
+'260,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106',
+'107,-441,,46,47,,,,-441,-441,-441,,,-441,-441,-441,264,-441,,,,,,,,-441',
+'-441,-441,-441,,,,274,275,,,,-441,-441,,-441,-441,-441,-441,-441,,,',
+'261,,267,,263,262,,259,260,,,,,,,,,,,-441,-441,-441,-441,-441,-441,-441',
+'-441,-441,-441,-441,-441,-441,-441,,,-441,-441,-441,,,-441,,306,-441',
+',,-441,-441,,-441,,-441,,-441,,-441,-441,,-441,-441,-441,-441,-441,',
+'-441,-441,-441,,,,,,,,,,,,,,-441,,,-441,-441,,-441,,-441,81,82,83,,65',
+',-441,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,264,,,,,,,,,,,,,,,,274,275,,245,,,253,,,66,67,,,68,,,261,,267',
+'52,263,262,,259,260,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,',
+',,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,',
+'253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,',
+',,,91,101,,,,,,,85,,92,106,107,-327,,46,47,,,,-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,,315,-327',
+',,-327,-327,,-327,,-327,,-327,,-327,-327,,-327,-327,-327,-327,-327,',
+'-327,,-327,,,,,,,,,,,,,,-327,,,-327,-327,,-327,,-327,81,82,83,,65,,-327',
+',71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121,,104,105,49',
+'50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324,,322,,52,,,328',
+',,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65',
+'92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52',
+',,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85',
+'65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,,,,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,799,,,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,',
+',,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,240,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,',
+'254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,',
+',,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52',
+',,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85',
+'65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114',
+'113,115,116,,,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92',
+'106,107,-275,,46,47,,,,-275,-275,-275,,,-275,-275,-275,493,-275,490',
+'489,488,498,491,,,-275,-275,-275,,,,501,,,,,,-275,-275,,-275,-275,-275',
+'-275,-275,,493,,490,489,488,498,491,496,646,,,,,,,501,506,505,509,508',
+',,,502,,493,,490,489,488,498,491,-275,,,,,496,,-275,501,,,,306,-275',
+'506,505,509,508,,,,502,,,,,,,,,496,487,,,,-275,-275,,,,,509,508,,,,502',
+',,,-275,,,-275,,81,82,83,-275,65,,487,,71,72,-275,,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,',
+',,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73',
+'74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,',
+',118,117,119,108,64,110,109,111,327,112,120,121,,104,105,49,50,48,,',
+',,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,799,,322,,52,,,328,,,,,,250',
+',,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121',
+',104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,322,',
+'52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84',
+'349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66',
+'67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74,76',
+'35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,335,12,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,,,420,85,,92,106,107,,,46,47,81,82,83,,65',
+',,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,',
+',254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324,,322,,52',
+',,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,',
+'91,101,,,,81,82,83,85,65,92,106,107,71,72,46,562,,75,,73,74,76,354,355',
+'79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117',
+'119,108,64,110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,',
+',,,,,,,,245,,,253,,,66,67,,,68,,324,,322,,52,,,328,,,,,,250,,,,,102',
+'325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121,,104,105,49',
+'50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324,,322,,52,,,328',
+',,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,240,,,81,82,83,85',
+'65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84',
+'349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66',
+'67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,',
+'253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,',
+',,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,',
+'254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,',
+',,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67',
+',,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,',
+',,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79',
+'80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53',
+',12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,',
+',,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46',
+'47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116',
+',,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,799,,,,52,,',
+',,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65',
+'92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324',
+',322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,',
+',,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79',
+'80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73',
+'74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,',
+',118,117,119,108,64,110,109,111,327,112,120,121,,104,105,49,50,48,,',
+',,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,799,,322,,52,,,328,,,,,,250',
+',,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,562,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121',
+',104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,322,',
+'52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33',
+'32,114,113,115,116,,,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112',
+'120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68',
+',,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82',
+'83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84',
+'349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66',
+'67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+',,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,',
+'253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,',
+',,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,',
+'254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,',
+',,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67',
+',,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,',
+',,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79',
+'80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,',
+'254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,',
+',,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92',
+'106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52',
+',,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65',
+'92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67',
+',,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,',
+',,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79',
+'80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35',
+'36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,',
+'118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,',
+',,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47',
+',75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53',
+',,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,',
+',,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46',
+'47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116',
+',,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324,,322,,52',
+',,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+',112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67',
+',,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,',
+',,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75,,73,74,76,35',
+'36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53,9,12,118,117',
+'119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,',
+',,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-312,,46,47,,,,-312,-312,-312',
+',,-312,-312,-312,,-312,,,,,,,,-312,,-312,-312,-312,,,,,,,,-312,-312',
+',-312,-312,-312,-312,-312,,,,,,,,,,,,,,,,,,,,,,,-312,-312,-312,-312',
+'-312,-312,-312,-312,-312,-312,-312,-312,-312,-312,,,-312,-312,-312,',
+',-312,,,-312,,,-312,-312,,-312,,-312,,-312,,-312,-312,,-312,-312,-312',
+'-312,-312,,-312,,-312,,,,,,,,,,,,,,-312,,,-312,-312,-312,-312,,-312',
+',-312,,81,82,83,-312,65,,,,71,72,,,,75,,73,74,76,354,355,79,80,,,,,',
+'84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109',
+'111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66',
+'67,,,68,,436,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79',
+'80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35',
+'36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,',
+',118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,',
+',,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46',
+'47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,',
+',,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48',
+',,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82',
+'83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,,10,53,,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,',
+',52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349',
+'357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111',
+'327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66',
+'67,,,68,,324,,,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,',
+',91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355',
+'79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,',
+'245,,,253,,,66,67,,,68,,,,,,52,,,328,,,,,,250,,,,,102,325,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73',
+'74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,',
+',118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,',
+',,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46',
+'47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,',
+',,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48',
+',,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,',
+',,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,126,,,,,125,85,,92,106,107,,,46',
+'47,81,82,83,,65,,,,71,72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349,357',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355,79',
+'80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,',
+'245,,,253,,,66,67,,,68,,799,,322,,52,,,328,,,,,,250,,,,,102,325,93,94',
+',95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,-275,,46,47,,,,-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,,306,-275,,,-275,-275,,-275,,-275,,-275,,-275,-275,,-275,-275',
+'-275,-275,-275,,-275,-275,-275,493,,490,489,488,498,491,,,,,,,-275,',
+'501,-275,-275,-720,-275,,-275,,,,-720,-720,-720,-275,,-720,-720,-720',
+',-720,,,496,,,,,-720,-720,-720,-720,-720,,509,508,,,,502,-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,-721',
+'-720,,,,,-720,-721,-721,-721,,,-721,-721,-721,,-721,,,,,,,,-721,-721',
+'-721,-721,-721,,,,,,,,-721,-721,,-721,-721,-721,-721,-721,,,,,,,,,,',
+',,,,,,,,,,,,-721,-721,-721,-721,-721,-721,-721,-721,-721,-721,-721,-721',
+'-721,-721,,,-721,-721,-721,,,-721,,,-721,,,-721,-721,,-721,,-721,,-721',
+',-721,-721,,-721,-721,-721,-721,-721,,-721,-721,-721,,,,,,,,,,,,,,-721',
+',,-721,-721,-721,-721,,-721,,-721,,81,82,83,-721,65,,,,71,72,,,,75,',
+'73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,',
+'118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,',
+',,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47',
+',75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,',
+',,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81',
+'82,83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,,10,53,9,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,',
+',52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,420,85',
+',92,106,107,,,46,47,81,82,83,,65,,,,71,72,,,,75,,73,74,76,35,36,79,80',
+',,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,,118,117,119,108,64,110',
+'109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253',
+',,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79',
+'80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,',
+'253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,',
+',,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36',
+'79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35',
+'36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83,11,65,,,,71,72,,,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,23,,,,,,10,53',
+',12,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,',
+',,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52,,,,,,,,,24,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82,83',
+'11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115',
+'116,,,23,,,,,,10,53,,12,118,117,119,108,64,110,109,111,,112,120,121',
+',104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,,,52',
+',,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65',
+'92,106,107,71,72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114',
+'113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,',
+',52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,',
+'91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36',
+'79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,869,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73',
+'74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,',
+',118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,',
+',,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,436,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,46,47,81,82',
+'83,11,65,,,,71,72,,,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113',
+'115,116,,,23,,,,,,10,53,,12,118,117,119,108,64,110,109,111,,112,120',
+'121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,45,,,38,,,66,67,,,68,,40,,',
+',52,,,,,,,,,24,,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,',
+'91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354,355',
+'79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245',
+',,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,354',
+'355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118,117,119',
+'108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,',
+',245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74',
+'76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,,53,,,118',
+'117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,,,,,,,,,,',
+',,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102,90,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+'46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116,,,254',
+',,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50',
+'48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,436,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,23,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,24',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,254,,,,,,,53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+'49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,,,,,52,,,,,,,,,250',
+',,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32,114,113,115,116',
+',,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327,112,120,121,,104',
+'105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324,,322,,52',
+',,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83',
+'85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36,79,80,,,,,,84,33,32',
+'114,113,115,116,,,254,,,,,,,53,,,118,117,119,108,64,110,109,111,327',
+'112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,,245,,,253,,,66,67,',
+',68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94,,95,97,96,98,,,,',
+'91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75,,73,74,76,35,36',
+'79,80,,,,,,84,33,32,114,113,115,116,,,254,,,,,,,53,,,118,117,119,108',
+'64,110,109,111,327,112,120,121,,104,105,49,50,48,,,,,,,,,,,,,,,,,,,',
+'245,,,253,,,66,67,,,68,,324,,322,,52,,,328,,,,,,250,,,,,102,325,93,94',
+',95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,46,47,,75',
+',73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,,,,',
+'53,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,49,50,48,',
+',,,,,,,,,,,,,,,,,,245,,,253,,,66,67,,,68,,324,,,,52,,,,,,,,,250,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,46,47,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116',
+',,254,,,,,,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+',,358,,,,,,,,,,,,,,,,,,,,395,,,38,,,66,67,,,68,,40,,,,,,,,,,,,,,,,,',
+'102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71',
+'72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,1108,,,253,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,',
+'75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,',
+',,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,346,,,342,,,66,67,,,68,,341,,,,,,,,,,,,,,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+',,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,350,,,118,117,119,400,64,110,109,401,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,407,,,402,,,253,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+',,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,1146,,,253,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,',
+'75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,',
+',,,350,,,118,117,119,400,64,110,109,401,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,402,,,253,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,',
+'75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,',
+',,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,346,,,342,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,',
+'75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,',
+',,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,346,,,253,,,66,67,,,68,,,493,,490,489,488,498,491',
+',,,,,,,,501,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,360,,496,85,,92',
+'106,107,81,82,83,,65,509,508,,71,72,502,,,75,,73,74,76,354,355,79,80',
+',,,,,84,349,357,114,113,115,116,,,254,,,,,,,350,,,118,117,119,108,64',
+'110,109,111,,112,120,121,,104,105,,,358,,,,,,,,,,,,,,,,,,,,346,,,253',
+',,66,67,,,68,,,493,,490,489,488,498,491,,,,,,,,,501,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,590,,496,85,,92,106,107,81,82,83,,65,509,508',
+',71,72,502,,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115',
+'116,,,254,,,,,,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104',
+'105,,,358,,,,,,,,,,,,,,,,,,,,346,,,342,,,66,67,,,68,,,,,,,,,,,,,,,,',
+',,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107',
+'71,72,,,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116',
+',,254,,,,,,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105',
+',,358,,,,,,,,,,,,,,,,,,,,346,,,342,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72',
+',,,75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254',
+',,,,,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,1146,,,253,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,',
+'75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,',
+',,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,346,,,342,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,81,82,83,85,65,92,106,107,71,72,,,',
+'75,,73,74,76,354,355,79,80,,,,,,84,349,357,114,113,115,116,,,254,,,',
+',,,350,,,118,117,119,108,64,110,109,111,,112,120,121,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,346,,,342,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,102,90',
+'93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106,107,185,196,186,209,182',
+'202,192,191,212,213,207,190,189,184,210,214,215,194,183,197,201,203',
+'195,188,,,,204,211,206,205,198,208,193,181,200,199,,,,,,180,187,178',
+'179,175,176,177,138,140,,,139,,,,,,,,169,170,,166,148,149,150,157,154',
+'156,,,151,152,,,,171,172,158,159,,,,,,,,,,,,,,163,162,,147,168,165,164',
+'173,160,161,155,153,145,167,146,,,174,102,,,,,,,,,,,,,,101,185,196,186',
+'209,182,202,192,191,212,213,207,190,189,184,210,214,215,194,183,197',
+'201,203,195,188,,,,204,211,206,205,198,208,193,181,200,199,,,,,,180',
+'187,178,179,175,176,177,138,140,,,139,,,,,,,,169,170,,166,148,149,150',
+'157,154,156,,,151,152,,,,171,172,158,159,,,,,,,,,,,,,,163,162,,147,168',
+'165,164,173,160,161,155,153,145,167,146,,,174,102,,,,,,,,,,,,,,101,185',
+'196,186,209,182,202,192,191,212,213,207,190,189,184,210,214,215,194',
+'183,197,201,203,195,188,,,,204,211,206,205,198,208,193,181,200,199,',
+',,,,180,187,178,179,175,176,177,138,140,137,,139,,,,,,,,169,170,,166',
+'148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,,,,,,,,,163',
+'162,,147,168,165,164,173,160,161,155,153,145,167,146,,,174,102,,,,,',
+',,,,,,,,101,185,196,186,209,182,202,192,191,212,213,207,190,189,184',
+'210,214,215,194,183,197,201,203,195,188,,,,204,211,206,205,198,208,193',
+'181,200,199,,,,,,180,187,178,179,175,176,177,138,140,,,139,,,,,,,,169',
+'170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,',
+',,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,,,174',
+'102,114,113,115,116,,,,,,,,,,101,,,118,117,119,776,,,493,779,490,489',
+'488,498,491,104,105,,,358,,,,501,,,,,,,,,,,,,,,,778,,,749,,,496,747',
+',,748,,,,,506,505,509,508,,,,502,,,,777,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,114,113,115,116,,,85,,92,106,107,,,764,765,,118,117,119,776',
+',,,779,756,,,,,104,105,,,358,501,,,,,,,,,,,,,,,,,,,778,,,749,,,,747',
+',,748,,751,,,,,,,502,,,,,,,777,,,,102,757,93,94,,95,97,96,98,,,,,91',
+'101,114,113,115,116,,,85,,92,106,107,,,764,765,,118,117,119,776,,,493',
+'779,490,489,488,498,491,104,105,,,358,,,,501,,,,,,,,,,,,,,,,778,,,749',
+',,496,747,,,748,,,,,506,505,509,508,,,,502,,,,777,,,,102,90,93,94,,95',
+'97,96,98,,,,,91,101,,,,,,,85,,92,106,107,,,764,765,185,196,186,209,182',
+'202,192,191,212,213,207,190,189,184,210,214,215,194,183,197,201,203',
+'195,188,,,,204,211,206,205,198,208,193,181,200,199,,,,,,180,187,178',
+'179,175,176,177,138,140,,,139,,,,,,,,169,170,,166,148,149,150,157,154',
+'156,,,151,152,,,,171,172,158,159,,,,,,,,,,,,,,163,162,,147,168,165,164',
+'173,160,161,155,153,145,167,146,,,174,114,113,115,116,,,,,,493,,490',
+'489,488,498,491,118,117,119,776,,,,779,501,,,,,104,105,,,358,,,,,,,',
+',,,,,496,,,,,,,778,,,749,509,508,,747,,502,748,,,,,,,,,,,,,,,,777,,',
+',102,90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,487,,85,,92,106',
+'107,,,764,765,,118,117,119,776,,,493,779,490,489,488,498,491,104,105',
+',,358,,,,501,,,,,,,,,,,,,,,,778,,,749,,,496,747,,,748,,,,,,,509,508',
+',,,502,,,,777,,,,102,90,93,94,,95,97,96,98,,,,,91,101,,,,,,,85,,92,106',
+'107,,,764,765,185,196,186,209,182,202,192,191,212,213,207,190,189,184',
+'210,214,215,194,183,197,201,203,195,188,,,,204,211,206,294,293,295,292',
+'181,200,199,,,,,,180,187,178,179,289,290,291,287,140,110,109,288,,112',
+',,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159',
+',,,,,299,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167',
+'146,,,174,114,113,115,116,,,,,,,,,,,,,118,117,119,776,,,,779,,,,,,104',
+'105,,,358,,,,,,,,,,,,,,,,,,,,778,,,749,,,,747,,,748,,751,,,,,,,493,',
+'490,489,488,498,491,777,,,,102,90,93,94,501,95,97,96,98,,,,,91,101,240',
+'114,113,115,116,,85,,92,106,107,496,,764,765,,,118,117,119,776,,509',
+'508,779,,,502,,,104,105,,,358,,,,,,,,,,,,,,,,,,,,778,,,749,,,,747,,',
+'748,,751,487,,,,,,,,,,,,,777,,,,102,90,93,94,,95,97,96,98,,,,,91,101',
+'114,113,115,116,,,85,,92,106,107,,,764,765,,118,117,119,776,,,,779,756',
+',,,,104,105,,,358,501,,,,,,,,,,,,,,,,,,,778,,,749,,,,747,,,748,,751',
+',,,,,,502,,,,,,,777,,,,102,757,93,94,,95,97,96,98,,,,,91,101,114,113',
+'115,116,,,85,,92,106,107,,,764,765,,118,117,119,776,,,,779,756,,,,,104',
+'105,,,358,501,,,,,,,,,,,,,,,,,,,778,,,749,,,,747,,,748,,751,,,,,,,502',
+',,,,,,777,,,,102,757,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,',
+',85,,92,106,107,,,764,765,,118,117,119,776,,,493,779,490,489,488,498',
+'491,104,105,,,358,,,,501,,,,,,,,,,,,,,,,778,,,749,,,496,747,,,748,,',
+',,506,505,509,508,,,,502,,,,777,,,,102,90,93,94,,95,97,96,98,,,,,91',
+'101,114,113,115,116,,,85,,92,106,107,,,764,765,,118,117,119,776,,,,779',
+',,,,,104,105,,,358,,,,,,,,,,,,,,,,,,,,778,,,749,,,,747,,,748,,,,,,,',
+',,,,,,,,777,,,,102,90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116',
+',,85,,92,106,107,,,764,765,,118,117,119,776,,,,779,,,,,,104,105,,,358',
+',,,,,,,,,,,,,,,,,,,778,,,749,,,,747,,,748,,751,,,,,,,,,,,,,,777,,,,102',
+'90,93,94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,',
+'764,765,,118,117,119,776,,,,779,,,,,,104,105,,,358,,,,,,,,,,,,,,,,,',
+',,778,,,749,,,,747,,,748,,,,,,,,,,,,,,,,777,,,,102,90,93,94,,95,97,96',
+'98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,764,765,,118,117,119',
+'776,,,,779,756,,,,,104,105,,,358,501,,,,,,,,,,,,,,,,,,,778,,,749,,,',
+'747,,,748,,751,,,,,,,502,,,,,,,777,,,,102,757,93,94,,95,97,96,98,,,',
+',91,101,114,113,115,116,,,85,,92,106,107,,,764,765,,118,117,119,776',
+',,,779,756,,,,,104,105,,,358,501,,,,,,,,,,,,,,,,,,,778,,,749,,,,747',
+',,748,,751,,,,,,,502,,,,,,,777,,,,102,757,93,94,,95,97,96,98,,,,,91',
+'101,114,113,115,116,,,85,,92,106,107,,,764,765,,118,117,119,776,,,,779',
+',,,,,104,105,,,358,,,,,,,,114,113,115,116,,,,,,,,,778,,,749,118,117',
+'119,747,,,748,,751,,,,,104,105,,,358,,,,,777,,,,102,90,93,94,,95,97',
+'96,98,,,,,91,101,,,,,,,85,,92,106,107,,,764,765,,,,,,,,,,,,102,90,93',
+'94,,95,97,96,98,,,,,91,101,114,113,115,116,,,85,,92,106,107,,,,,,118',
+'117,119,,,,,,,,,,,104,105,,,358,114,113,115,116,,,,,,,,,,,,,118,117',
+'119,,,,,,,,,,,104,105,,,358,,,,,,,,,,,,,,,,102,90,93,94,,95,97,96,98',
+',,,,91,101,,,,,,,85,,92,106,107,,,,,,,,,102,90,93,94,,95,97,96,98,,',
+',,91,101,114,113,115,116,,,85,,92,106,107,,,,,,118,117,119,493,,490',
+'489,488,498,491,,,,104,105,,,358,501,,,,,,,,,,,493,,490,489,488,498',
+'491,,,,,496,,,,501,,,,,506,505,509,508,,,,502,,,,,,,,,,496,102,90,93',
+'94,,95,97,96,98,,509,508,,91,101,502,,,,,,85,,92,106,107,,,493,487,490',
+'489,488,498,491,493,,490,489,488,498,491,,501,,,,,,,501,,,,,487,,,,',
+',,,,,496,,,,,,,496,,,,509,508,,,,502,,509,508,841,470,,502,842,,,,,',
+',,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159',
+',,,487,,306,,,,,487,,,163,162,,147,168,165,164,173,160,161,155,153,145',
+'167,146,558,462,174,,559,,,,,,,,169,170,,166,148,149,150,157,154,156',
+',,151,152,,,,171,172,158,159,,,,,,,,,,,,,,163,162,,147,168,165,164,173',
+'160,161,155,153,145,167,146,844,470,174,,845,,,,,,,,169,170,,166,148',
+'149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163',
+'162,,147,168,165,164,173,160,161,155,153,145,167,146,558,462,174,,559',
+',,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158',
+'159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145',
+'167,146,812,470,174,,813,,,,,,,,169,170,,166,148,149,150,157,154,156',
+',,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147,168,165,164',
+'173,160,161,155,153,145,167,146,731,470,174,,732,,,,,,,,169,170,,166',
+'148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,',
+',163,162,,147,168,165,164,173,160,161,155,153,145,167,146,809,462,174',
+',810,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172',
+'158,159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153',
+'145,167,146,839,462,174,,840,,,,,,,,169,170,,166,148,149,150,157,154',
+'156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147,168,165',
+'164,173,160,161,155,153,145,167,146,458,462,174,,459,,,,,,,,169,170',
+',166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,',
+',,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,729,462',
+'174,,730,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171',
+'172,158,159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173,160,161,155',
+'153,145,167,146,1199,462,174,,1200,,,,,,,,169,170,,166,148,149,150,157',
+'154,156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147,168',
+'165,164,173,160,161,155,153,145,167,146,1201,470,174,,1202,,,,,,,,169',
+'170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306',
+',,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167,146,1216',
+'470,174,,1215,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152',
+',,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173,160',
+'161,155,153,145,167,146,466,470,174,,465,,,,,,,,169,170,,166,148,149',
+'150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162',
+',147,168,165,164,173,160,161,155,153,145,167,146,874,470,174,,873,,',
+',,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158,159',
+',,,,,306,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145,167',
+'146,871,462,174,,872,,,,,,,,169,170,,166,148,149,150,157,154,156,,,151',
+'152,,,,171,172,158,159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173',
+'160,161,155,153,145,167,146,729,462,174,,730,,,,,,,,169,170,,166,148',
+'149,150,157,154,156,,,151,152,,,,171,172,158,159,,,,,,306,,,,,,,,163',
+'162,,147,168,165,164,173,160,161,155,153,145,167,146,731,470,174,,732',
+',,,,,,,169,170,,166,148,149,150,157,154,156,,,151,152,,,,171,172,158',
+'159,,,,,,306,,,,,,,,163,162,,147,168,165,164,173,160,161,155,153,145',
+'167,146,,,174' ]
+ racc_action_table = arr = ::Array.new(28813, 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 = [
+'111,1105,1220,1109,925,1200,624,111,111,111,930,1201,111,111,111,1059',
+'111,787,1017,23,1202,1234,982,982,111,31,111,111,111,416,69,1106,804',
+'417,477,993,111,111,1165,111,111,111,111,111,804,1218,930,748,839,292',
+'1090,385,477,842,1088,1218,292,1093,1059,1093,23,840,396,925,748,837',
+'111,111,111,111,111,111,111,111,111,111,111,111,111,111,1199,384,111',
+'111,111,841,111,111,1201,31,111,392,633,111,111,416,111,1202,111,417',
+'111,243,111,111,787,111,111,111,111,111,624,111,31,111,292,624,982,69',
+'842,1105,1220,1109,393,1200,1105,1220,1109,111,1200,1201,111,111,111',
+'111,1201,111,1017,111,1202,731,852,1017,111,1202,993,111,731,731,731',
+'1106,841,731,731,731,1106,731,1165,839,810,3,243,1165,842,731,731,731',
+'731,731,1090,385,840,396,1088,1090,385,731,731,1088,731,731,731,731',
+'731,837,48,48,837,809,837,812,929,980,737,9,841,517,517,244,1199,384',
+'392,633,246,1199,384,731,731,731,731,731,731,731,731,731,731,731,731',
+'731,731,555,555,731,731,731,810,731,731,934,12,731,929,393,731,731,251',
+'731,293,731,737,731,523,731,731,293,731,731,731,731,731,852,731,731',
+'731,809,812,812,244,980,949,358,358,246,48,48,810,14,731,810,294,731',
+'731,731,731,934,731,294,731,443,874,810,627,731,15,729,731,874,874,874',
+'627,517,251,874,874,809,874,812,809,980,812,523,980,293,874,874,643',
+'643,351,730,809,17,812,252,980,555,874,874,27,874,874,874,874,874,949',
+'949,949,758,234,295,234,234,234,234,234,294,295,1007,443,358,358,949',
+'871,234,729,758,874,874,874,874,874,874,874,874,874,874,874,874,874',
+'874,872,21,874,874,874,234,874,874,730,252,874,578,351,874,234,234,234',
+'234,874,42,874,234,874,874,412,874,874,874,874,874,732,874,874,874,295',
+'351,1007,732,732,732,643,871,732,732,732,643,732,874,21,533,874,874',
+'88,874,732,874,732,732,732,872,21,234,874,20,88,874,732,732,45,732,732',
+'732,732,732,88,578,578,578,19,997,414,533,53,1127,997,533,533,29,412',
+'412,412,933,578,216,29,933,732,732,732,732,732,732,732,732,732,732,732',
+'732,732,732,389,291,732,732,732,389,732,732,291,20,732,229,658,732,732',
+'660,732,413,732,231,732,235,732,732,19,732,732,732,732,732,411,732,108',
+'732,414,414,414,1127,1127,108,108,108,29,245,108,108,108,732,108,247',
+'732,732,732,732,1127,732,108,732,108,108,108,377,732,778,377,732,291',
+'778,108,108,248,108,108,108,108,108,658,658,254,660,660,413,413,413',
+'418,137,658,5,746,660,137,137,5,746,411,411,411,746,108,108,108,108',
+'108,108,108,108,108,108,108,108,108,108,305,680,108,108,108,415,108',
+'108,383,383,108,402,286,108,108,402,108,287,108,286,108,319,108,108',
+'287,108,108,108,108,108,331,108,459,108,320,331,418,418,418,973,323',
+'973,973,973,973,973,458,108,680,288,108,108,108,108,973,108,288,108',
+'511,466,680,824,108,511,824,108,466,466,466,415,415,415,466,466,343',
+'466,973,286,335,459,336,343,287,466,466,973,973,973,973,338,343,459',
+'973,458,1157,466,466,1157,466,466,466,466,466,380,339,458,380,233,845',
+'233,233,233,233,233,288,845,289,340,973,346,845,349,233,289,845,466',
+'466,466,466,466,466,466,466,466,466,466,466,466,466,343,44,466,466,466',
+'233,466,466,376,362,466,376,290,466,233,233,233,233,466,290,466,233',
+'466,466,350,466,466,466,466,466,873,466,466,466,845,16,16,873,873,873',
+'1091,1091,289,873,873,352,873,466,44,353,466,466,357,466,873,466,362',
+'761,761,359,44,233,466,43,366,466,873,873,362,873,873,873,873,873,1189',
+'1189,368,290,705,344,705,705,705,705,705,1100,344,1100,1100,1100,371',
+'1100,374,705,378,344,873,873,873,873,873,873,873,873,873,873,873,873',
+'873,873,43,379,873,873,873,705,873,873,825,825,873,381,43,873,705,705',
+'705,705,873,390,873,705,873,873,391,873,873,873,873,873,465,873,395',
+'873,344,704,704,465,465,465,51,51,397,465,465,406,465,873,426,432,873',
+'873,434,873,465,873,435,777,437,777,777,705,873,777,440,873,465,465',
+'444,465,465,465,465,465,454,456,51,51,646,345,646,646,646,646,646,1116',
+'345,1116,1116,1116,457,1116,467,646,777,345,465,465,465,465,465,465',
+'465,465,465,465,465,465,465,465,473,474,465,465,465,646,465,465,478',
+'479,465,480,1116,465,646,646,646,646,465,483,465,646,465,465,484,465',
+'465,465,465,465,941,465,485,465,345,495,347,507,510,513,941,363,1107',
+'347,947,519,527,465,363,1107,465,465,347,465,947,465,1145,363,1107,528',
+'535,646,465,1145,536,465,2,2,2,2,2,2,1145,537,538,2,2,563,941,564,2',
+'401,2,2,2,2,2,2,2,565,941,569,947,585,2,2,2,2,2,2,2,347,586,2,947,589',
+'363,1107,591,2,2,2,2,2,2,2,2,2,2,2,2,1145,2,2,2,394,2,2,2,2,2,54,394',
+'401,596,404,600,609,54,610,401,394,404,611,621,401,625,54,626,401,2',
+'404,628,2,655,663,2,2,1186,665,2,672,2,681,686,1186,2,691,401,693,534',
+'695,651,651,1186,2,651,651,651,711,2,2,2,2,716,2,2,2,2,717,394,719,724',
+'2,2,733,54,742,401,750,404,2,534,2,2,2,534,534,2,2,1190,1190,1190,1190',
+'1190,1190,751,752,781,1190,1190,784,786,1186,1190,844,1190,1190,1190',
+'1190,1190,1190,1190,583,583,583,583,583,1190,1190,1190,1190,1190,1190',
+'1190,792,496,1190,496,496,496,793,496,1190,1190,1190,1190,1190,1190',
+'1190,1190,1190,1190,1190,1190,794,1190,1190,1190,442,1190,1190,1190',
+'1190,1190,18,442,844,796,595,798,806,18,496,844,442,595,808,811,844',
+'814,18,496,844,1190,595,815,1190,818,827,1190,1190,242,833,1190,834',
+'1190,838,847,242,1190,718,844,718,718,718,851,718,242,1190,853,868,870',
+'879,1190,1190,1190,1190,892,1190,1190,1190,1190,895,442,896,899,1190',
+'1190,901,18,904,844,905,595,1190,907,1190,1190,1190,908,910,1190,1190',
+'843,843,843,843,843,843,914,927,935,843,843,936,940,242,843,400,843',
+'843,843,843,843,843,843,943,948,701,966,969,843,843,843,843,843,843',
+'843,701,1196,843,1196,1196,1196,970,1196,843,843,843,843,843,843,843',
+'843,843,843,843,843,979,843,843,843,636,843,843,843,843,843,813,636',
+'400,701,701,984,987,813,701,400,636,994,813,996,400,1003,813,1004,400',
+'843,1005,1006,843,1032,1033,843,843,1038,1043,843,1044,843,1045,1046',
+'1047,843,1048,400,8,8,8,8,8,1132,843,1052,1053,1054,1056,843,843,843',
+'843,1132,843,843,843,843,1060,636,1067,1072,843,843,1073,813,1075,400',
+'1076,1077,843,1079,843,843,843,1080,1081,843,843,1104,1104,1104,1104',
+'1104,1104,1097,1132,1132,1104,1104,1108,1132,1111,1104,1112,1104,1104',
+'1104,1104,1104,1104,1104,25,1113,1114,1143,1146,1104,1104,1104,1104',
+'1104,1104,1104,1155,1156,1104,334,334,334,334,334,1104,1104,1104,1104',
+'1104,1104,1104,1104,1104,1104,1104,1104,1161,1104,1104,1104,1171,1104',
+'1104,1104,1104,1104,25,25,25,25,25,25,25,25,25,25,25,1172,25,25,1173',
+'1176,25,25,1179,1104,1180,25,1104,1181,1182,1104,1104,1184,1198,1104',
+'1203,1104,25,1215,25,1104,25,25,1216,25,25,25,25,25,1104,25,1222,1223',
+'1224,1104,1104,1104,1104,1225,1104,1104,1104,1104,1,,,,1104,1104,,25',
+',,,,1104,,1104,1104,1104,,,1104,1104,1099,1099,1099,1099,1099,1099,',
+',,1099,1099,,,,1099,,1099,1099,1099,1099,1099,1099,1099,373,373,373',
+'373,373,1099,1099,1099,1099,1099,1099,1099,,,1099,,,,,447,1099,1099',
+'1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,,1099,1099,1099,,1099',
+'1099,1099,1099,1099,447,447,447,447,447,447,447,447,447,447,447,,447',
+'447,,,447,447,,1099,,,1099,,,1099,1099,,,1099,,1099,447,,447,1099,447',
+'447,,447,447,447,447,447,1099,447,,,,1099,1099,1099,1099,,1099,1099',
+'1099,1099,,,,,1099,1099,,447,,447,,,1099,,1099,1099,1099,,,1099,1099',
+'337,337,337,337,337,337,,,,337,337,,,,337,,337,337,337,337,337,337,337',
+',,,,,337,337,337,337,337,337,337,,,337,,,,,453,337,337,337,337,337,337',
+'337,337,337,337,337,337,,337,337,337,,337,337,337,337,337,453,453,453',
+'453,453,453,453,453,453,453,453,,453,453,,,453,453,,337,,,337,,,337',
+'337,,,337,,337,453,,453,337,453,453,,453,453,453,453,453,337,453,,,',
+'337,337,337,337,,337,337,337,337,,,,,337,337,,453,,,,,337,,337,337,337',
+',,337,337,1098,1098,1098,1098,1098,1098,,,,1098,1098,,,,1098,,1098,1098',
+'1098,1098,1098,1098,1098,,,,,,1098,1098,1098,1098,1098,1098,1098,,,1098',
+',,,,725,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098',
+',1098,1098,1098,,1098,1098,1098,1098,1098,725,725,725,725,725,725,725',
+'725,725,725,725,,725,725,,,725,725,,1098,,,1098,,,1098,1098,,,1098,',
+'1098,725,,725,1098,725,725,,725,725,725,725,725,1098,725,,,,1098,1098',
+'1098,1098,,1098,1098,1098,1098,,,,,1098,1098,,725,,,,,1098,,1098,1098',
+'1098,,,1098,1098,1069,1069,1069,1069,1069,1069,,,,1069,1069,,,,1069',
+',1069,1069,1069,1069,1069,1069,1069,,,,,,1069,1069,1069,1069,1069,1069',
+'1069,,,1069,,,,,694,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069',
+'1069,1069,,1069,1069,1069,,1069,1069,1069,1069,1069,694,694,694,694',
+'694,694,694,694,694,694,694,,694,694,,,694,694,,1069,,,1069,,,1069,1069',
+',,1069,,1069,694,,694,1069,694,694,,694,694,694,694,694,1069,694,,,',
+'1069,1069,1069,1069,,1069,1069,1069,1069,,,,,1069,1069,,694,,,,,1069',
+',1069,1069,1069,,,1069,1069,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,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035',
+',1035,1035,,,1035,1035,,644,,,644,,,644,644,,,644,,644,1035,,1035,644',
+'1035,1035,,1035,1035,1035,1035,1035,644,1035,,,,644,644,644,644,,644',
+'644,644,644,,,,,644,644,,1035,,,,,644,,644,644,644,,,644,644,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,876,876,876,876,876',
+'876,876,876,876,876,876,,876,876,,,876,876,,372,,,372,,,372,372,,,372',
+',372,876,,876,372,876,876,,876,876,876,876,876,372,876,,,,372,372,372',
+'372,,372,372,372,372,,,,,372,372,,876,,,,,372,,372,372,372,,,372,372',
+'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,317,317,317',
+'317,317,317,317,317,317,317,317,,317,317,,,317,317,,859,,,859,,,859',
+'859,,,859,,859,317,,317,859,317,317,,317,317,317,317,317,859,317,,,',
+'859,859,859,859,,859,859,859,859,,,,,859,859,,317,,,,,859,,859,859,859',
+',,859,859,1014,1014,1014,1014,1014,1014,,,,1014,1014,,,,1014,,1014,1014',
+'1014,1014,1014,1014,1014,,,,,,1014,1014,1014,1014,1014,1014,1014,,,1014',
+',,,,,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,,1014',
+'1014,1014,,1014,1014,1014,1014,1014,1011,1011,1011,1011,1011,1011,1011',
+'1011,1011,1011,1011,,1011,1011,,,1011,1011,,1014,,,1014,,,1014,1014',
+',,1014,,1014,1011,,1011,1014,1011,1011,,1011,1011,1011,1011,1011,1014',
+'1011,,,,1014,1014,1014,1014,,1014,1014,1014,1014,,,,,1014,1014,,1011',
+',,,,1014,,1014,1014,1014,,,1014,1014,253,253,253,253,253,253,,,,253',
+'253,,,,253,,253,253,253,253,253,253,253,,,,,,253,253,253,253,253,253',
+'253,,,253,,,,,,253,253,253,253,253,253,253,253,253,253,253,253,,253',
+'253,253,,253,253,253,253,253,1012,1012,1012,1012,1012,1012,1012,1012',
+'1012,1012,1012,,1012,1012,,,1012,1012,,253,,,253,,,253,253,,,253,,253',
+'1012,,1012,253,1012,1012,,1012,1012,1012,1012,1012,253,1012,,,,253,253',
+'253,253,,253,253,253,253,,,,,253,253,,1012,,,,,253,,253,253,253,,,253',
+'253,236,236,236,236,236,236,,,,236,236,,,,236,,236,236,236,236,236,236',
+'236,,,,,,236,236,236,236,236,236,236,,,236,,,,,,236,236,236,236,236',
+'236,236,236,236,236,236,236,,236,236,236,,236,236,236,236,236,1034,1034',
+'1034,1034,1034,1034,1034,1034,1034,1034,1034,,1034,1034,,,1034,1034',
+',236,,,236,,,236,236,,,236,,236,1034,,1034,236,1034,1034,,1034,1034',
+'1034,1034,1034,236,1034,,,,236,236,236,236,,236,236,236,236,,,,,236',
+'236,,1034,,,,,236,,236,236,236,,,236,236,218,218,218,218,218,218,,,',
+'218,218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218,218,218,218',
+'218,218,,,218,,,,,,218,218,218,218,218,218,218,218,218,218,218,218,',
+'218,218,218,,218,218,218,218,218,1068,1068,1068,1068,1068,1068,1068',
+'1068,1068,1068,1068,,1068,1068,,,1068,1068,,218,,,218,,,218,218,,,218',
+',218,1068,,1068,218,1068,1068,,1068,1068,1068,1068,1068,218,1068,,,',
+'218,218,218,218,,218,218,218,218,,,,,218,218,,1068,,,,,218,,218,218',
+'218,,,218,218,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,552,552,552,552,552,552,552,552,552,552',
+'552,,552,552,,,552,552,,38,,,38,,,38,38,,,38,,38,552,,552,38,552,552',
+',552,552,552,552,552,38,552,,,,38,38,38,38,,38,38,38,38,,,,,38,38,552',
+'552,,,,,38,,38,38,38,,,38,38,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,819,819,819,819,819,819,819,819,819,819,819,,819,819',
+',,819,819,,848,,,848,,,848,848,,,848,,848,819,,819,848,819,819,,819',
+'819,819,819,819,848,819,,,,848,848,848,848,,848,848,848,848,,,,,848',
+'848,,819,,,,,848,,848,848,848,,,848,848,974,974,974,974,974,974,,,,974',
+'974,,,,974,,974,974,974,974,974,974,974,,,,,,974,974,974,974,974,974',
+'974,,714,974,714,714,714,,714,974,974,974,974,974,974,974,974,974,974',
+'974,974,,974,974,974,,974,974,974,974,974,915,,915,915,915,,915,,714',
+',1115,,1115,1115,1115,,1115,714,,974,,,974,,,974,974,,549,974,,974,',
+',,974,,915,,916,,916,916,916,974,916,915,1115,,974,974,974,974,,974',
+'974,974,974,,,549,,974,974,549,549,,549,549,,974,,974,974,974,,916,974',
+'974,342,342,342,342,342,342,,,,342,342,,,,342,,342,342,342,342,342,342',
+'342,,,,,,342,342,342,342,342,342,342,,,342,,,548,,,342,342,342,342,342',
+'342,342,342,342,342,342,342,,342,342,342,,342,342,342,342,342,546,546',
+'546,546,546,546,546,548,,546,546,548,548,,548,548,546,546,,342,,,342',
+',,342,342,,,342,,342,546,,546,342,546,546,,546,546,546,546,546,342,546',
+',,,342,342,342,342,,342,342,342,342,,,,,342,342,,,,,,,342,,342,342,342',
+',,342,342,998,998,998,998,998,998,,,,998,998,,,,998,,998,998,998,998',
+'998,998,998,,,,,,998,998,998,998,998,998,998,,,998,,,,,,998,998,998',
+'998,998,998,998,998,998,998,998,998,,998,998,998,,998,998,998,998,998',
+'364,364,364,364,364,364,364,364,364,364,364,,364,364,,,364,364,,998',
+',,998,,,998,998,,,998,,998,364,,364,998,364,364,,364,364,364,364,364',
+'998,364,,,,998,998,998,998,,998,998,998,998,,,,,998,998,,,,,,,998,,998',
+'998,998,,,998,998,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,365,365,365,365,365,365,365,365,365,365,365,,365,365,,,365,365',
+',620,,,620,,,620,620,,,620,,620,365,,365,620,365,365,,365,365,365,365',
+'365,620,365,,,,620,620,620,620,,620,620,620,620,,,,,620,620,,,,,,,620',
+',620,620,620,,,620,620,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,606,,,,,,,,,,,,,,,,606,606,,992,,,992,,,992,992,,,992,,992',
+'606,,606,992,606,606,,606,606,,,606,992,606,,,,992,992,992,992,,992',
+'992,992,992,,,,,992,992,,,,,,,992,,992,992,992,,,992,992,135,135,135',
+'135,135,135,,,,135,135,,,,135,,135,135,135,135,135,135,135,,,,,,135',
+'135,135,135,135,135,135,,,135,,,,,,135,135,135,135,135,135,135,135,135',
+'135,135,135,,135,135,135,,135,135,135,135,135,531,531,531,531,531,531',
+'531,531,531,531,531,,531,531,,,531,531,,135,,,135,,,135,135,,,135,,135',
+'531,,531,135,531,531,,531,531,531,531,531,135,531,,,,135,135,135,135',
+',135,135,135,135,,,,,135,135,,,,,,,135,,135,135,135,,,135,135,894,894',
+'894,894,894,894,,,,894,894,,,,894,,894,894,894,894,894,894,894,,,,,',
+'894,894,894,894,894,894,894,,,894,,,,,,894,894,894,894,894,894,894,894',
+'894,894,894,894,,894,894,894,,894,894,894,894,894,547,547,547,547,547',
+'547,547,,,547,547,,,,,,547,547,,894,,,894,,,894,894,,,894,,894,547,',
+'547,894,547,547,,547,547,547,547,547,894,547,,,,894,894,894,894,,894',
+'894,894,894,,,,,894,894,,,,,,,894,,894,894,894,,,894,894,230,230,230',
+'230,230,230,,,,230,230,,,,230,,230,230,230,230,230,230,230,,,,,,230',
+'230,230,230,230,230,230,,,230,,,,,,230,230,230,230,230,230,230,230,230',
+'230,230,230,,230,230,230,,230,230,230,230,230,532,532,532,532,532,532',
+'532,532,532,532,532,,532,532,,,532,532,,230,,,230,,,230,230,,,230,,230',
+'532,,532,230,532,532,,532,532,532,532,532,230,532,,,,230,230,230,230',
+',230,230,230,230,,,,,230,230,,,,,,,230,,230,230,230,,,230,230,1147,1147',
+'1147,1147,1147,1147,,,,1147,1147,,,,1147,,1147,1147,1147,1147,1147,1147',
+'1147,,,,,,1147,1147,1147,1147,1147,1147,1147,,,1147,,,,,,1147,1147,1147',
+'1147,1147,1147,1147,1147,1147,1147,1147,1147,,1147,1147,1147,,1147,1147',
+'1147,1147,1147,550,550,550,550,550,550,550,,,550,550,,,,,,550,550,,1147',
+',,1147,,,1147,1147,,,1147,,1147,550,,550,1147,550,550,,550,550,550,550',
+'550,1147,550,,,,1147,1147,1147,1147,,1147,1147,1147,1147,,,,,1147,1147',
+',,,,,,1147,,1147,1147,1147,,,1147,1147,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,543,543,543,543,543,543,543,,,543,543,',
+',,,,543,543,,623,,,623,,,623,623,,,623,,623,543,,543,623,543,543,,543',
+'543,543,543,543,623,543,,,,623,623,623,623,,623,623,623,623,,,,,623',
+'623,,,,,,,623,,623,623,623,,,623,623,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,544,544,544,544,544,544,544,,,544,544,',
+',,,,544,544,,388,,,388,,,388,388,,,388,,388,544,,544,388,544,544,,544',
+'544,544,544,544,388,544,,,,388,388,388,388,,388,388,388,388,,,,,388',
+'388,,,,,,,388,,388,388,388,,,388,388,387,387,387,387,387,387,,,,387',
+'387,,,,387,,387,387,387,387,387,387,387,,,,,,387,387,387,387,387,387',
+'387,,,387,,,,,,387,387,387,387,387,387,387,387,387,387,387,387,,387',
+'387,387,,387,387,387,387,387,545,545,545,545,545,545,545,,,545,545,',
+',,,,545,545,,387,,,387,,,387,387,,,387,,387,545,,545,387,545,545,,545',
+'545,545,545,545,387,545,,,,387,387,387,387,,387,387,387,387,,,,,387',
+'387,,,,277,277,277,387,277,387,387,387,277,277,387,387,,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',
+'551,551,551,551,551,551,551,551,,551,551,,,,,,551,551,,277,,,277,,,277',
+'277,,,277,,,551,,551,277,551,551,,551,551,551,551,551,277,551,,,,277',
+'277,277,277,,277,277,277,277,,,,,277,277,,,,276,276,276,277,276,277',
+'277,277,276,276,277,277,,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,542,542,542,542,542,542,542,,,542',
+'542,,,,,,542,542,,276,,,276,,,276,276,,,276,,,542,,542,276,542,542,',
+'542,542,542,542,542,276,542,,,,276,276,276,276,,276,276,276,276,,,,',
+'276,276,,,,275,275,275,276,275,276,276,276,275,275,276,276,,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,553,,,,,,,,,,,,,,,,553,553,,275,,,275,,,275,275,,,275,,,553,,553',
+'275,553,553,,553,553,,,553,275,553,,,,275,275,275,275,,275,275,275,275',
+',,,,275,275,,,,274,274,274,275,274,275,275,275,274,274,275,275,,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,541,,,,,,,,,,,,,,,,541,541,,274,,,274,,,274,274,,,274,,,541',
+',,274,541,541,,541,541,,,,274,,,,,274,274,274,274,,274,274,274,274,',
+',,,274,274,,,,,,,274,,274,274,274,32,,274,274,,,,32,32,32,,,32,32,32',
+'539,32,,,,,,,,32,32,32,32,,,,539,539,,,,32,32,,32,32,32,32,32,,,,539',
+',539,,539,539,,539,539,,,,,,,,,,,32,32,32,32,32,32,32,32,32,32,32,32',
+'32,32,,,32,32,32,,,32,,32,32,,,32,32,,32,,32,,32,,32,32,,32,32,32,32',
+'32,,32,32,32,,,,,,,,,,,,,,32,,,32,32,,32,,32,957,957,957,,957,,32,,957',
+'957,,,,957,,957,957,957,957,957,957,957,,,,,,957,957,957,957,957,957',
+'957,,,957,,,,,,,957,,,957,957,957,957,957,957,957,957,,957,957,957,',
+'957,957,957,957,957,540,,,,,,,,,,,,,,,,540,540,,957,,,957,,,957,957',
+',,957,,,540,,540,957,540,540,,540,540,,,,957,,,,,957,957,957,957,,957',
+'957,957,957,,,,,957,957,,,,963,963,963,957,963,957,957,957,963,963,957',
+'957,,963,,963,963,963,963,963,963,963,,,,,,963,963,963,963,963,963,963',
+',,963,,,,,,,963,,,963,963,963,963,963,963,963,963,,963,963,963,,963',
+'963,963,963,963,,,,,,,,,,,,,,,,,,,,963,,,963,,,963,963,,,963,,,,,,963',
+',,,,,,,,963,,,,,963,963,963,963,,963,963,963,963,,,,,963,963,,,,,,,963',
+',963,963,963,33,,963,963,,,,33,33,33,,,33,33,33,,33,,,,,,,,33,,33,33',
+',,,,,,,,33,33,,33,33,33,33,33,,,,,,,,,,,,,,,,,,,,,,,33,33,33,33,33,33',
+'33,33,33,33,33,33,33,33,,,33,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,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34',
+'34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,34,34',
+'34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,34,,,,,,34',
+',,,,34,34,34,34,,34,34,34,34,,,,,34,34,,,,685,685,685,34,685,34,34,34',
+'685,685,34,34,,685,,685,685,685,685,685,685,685,,,,,,685,685,685,685',
+'685,685,685,,,685,,,,,,,685,,,685,685,685,685,685,685,685,685,,685,685',
+'685,,685,685,685,685,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685,685,,,685',
+',,,,,685,,,,,,,,,685,,,,,685,685,685,685,,685,685,685,685,,,,,685,685',
+',,,616,616,616,685,616,685,685,685,616,616,685,685,,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,,,,613,613,613,616,613',
+'616,616,616,613,613,616,616,,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,,,,239,239,239,613,239,613,613,613,239,239,613',
+'613,,239,,239,239,239,239,239,239,239,,,,,,239,239,239,239,239,239,239',
+',,239,,,,,,,239,,,239,239,239,239,239,239,239,239,,239,239,239,,239',
+'239,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239,,,239,239,,,239,,,,,,239',
+',,,,,,,,239,,,,,239,239,239,239,,239,239,239,239,,,,,239,239,239,,,607',
+'607,607,239,607,239,239,239,607,607,239,239,,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,,,,605,605,605,607,605,607,607,607',
+'605,605,607,607,,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',
+',,,602,602,602,605,602,605,605,605,602,602,605,605,,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,,,,877,877,877,602,877,602',
+'602,602,877,877,602,602,,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,,877,877,877,877',
+',,,,877,877,,,,238,238,238,877,238,877,877,877,238,238,877,877,,238',
+',238,238,238,238,238,238,238,,,,,,238,238,238,238,238,238,238,,,238',
+',,,,,,238,,,238,238,238,238,238,238,238,238,,238,238,238,,238,238,238',
+'238,238,,,,,,,,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,,,,,238,,,,,,',
+',,238,,,,,238,238,238,238,,238,238,238,238,,,,,238,238,,,,,,,238,,238',
+'238,238,557,,238,238,,,,557,557,557,,,557,557,557,409,557,409,409,409',
+'409,409,,,557,557,557,,,,409,,,,,,557,557,,557,557,557,557,557,,707',
+',707,707,707,707,707,409,409,,,,,,,707,409,409,409,409,,,,409,,1140',
+',1140,1140,1140,1140,1140,557,,,,,707,,557,1140,,,,557,557,707,707,707',
+'707,,,,707,,,,,,,,,1140,409,,,,557,557,,,,,1140,1140,,,,1140,,,,557',
+',,557,,562,562,562,557,562,,707,,562,562,557,,,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,,,,237,237,237,562,237,562,562',
+'562,237,237,562,562,,237,,237,237,237,237,237,237,237,,,,,,237,237,237',
+'237,237,237,237,,,237,,,,,,,237,,,237,237,237,237,237,237,237,237,,237',
+'237,237,,237,237,237,237,237,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,237',
+',,237,,,,,,237,,,,,,,,,237,,,,,237,237,237,237,,237,237,237,237,,,,',
+'237,237,,,,572,572,572,237,572,237,237,237,572,572,237,237,,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,,,,574',
+'574,574,572,574,572,572,572,574,574,572,572,,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,,,,576,576,576,574,576,574',
+'574,574,576,576,574,574,,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,576,,,576,576,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,582,582,582',
+',,,,582,582,,,,,,582,582,,582,582,582,,,582,582,592,592,592,,592,,,',
+'592,592,,,,592,,592,592,592,592,592,592,592,,,,,,592,592,592,592,592',
+'592,592,,,592,,,,,,,592,,,592,592,592,592,592,592,592,592,592,592,592',
+'592,,592,592,592,592,592,,,,,,,,,,,,,,,,,,,,592,,,592,,,592,592,,,592',
+',592,,592,,592,,,592,,,,,,592,,,,,592,592,592,592,,592,592,592,592,',
+',,,592,592,,,,306,306,306,592,306,592,592,592,306,306,592,592,,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,306,,,,,306,306',
+',,,890,890,890,306,890,306,306,306,890,890,306,306,,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,,890,890,890,890,,,,,890,890,,,,891,891,891,890,891,890',
+'890,890,891,891,890,890,,891,,891,891,891,891,891,891,891,,,,,,891,891',
+'891,891,891,891,891,,,891,,,,,,,891,,,891,891,891,891,891,891,891,891',
+',891,891,891,,891,891,891,891,891,,,,,,,,,,,,,,,,,,,,891,,,891,,,891',
+'891,,,891,,,,,,891,,,,,,,,,891,,,,,891,891,891,891,,891,891,891,891',
+',,,,891,891,,,,307,307,307,891,307,891,891,891,307,307,891,891,,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',
+',,,315,315,315,307,315,307,307,307,315,315,307,307,,315,,315,315,315',
+'315,315,315,315,,,,,,315,315,315,315,315,315,315,,,315,,,,,,,315,,,315',
+'315,315,315,315,315,315,315,315,315,315,315,,315,315,315,315,315,,,',
+',,,,,,,,,,,,,,,,315,,,315,,,315,315,,,315,,315,,315,,315,,,315,,,,,',
+'315,,,,,315,315,315,315,,315,315,315,315,,,,,315,315,315,,,322,322,322',
+'315,322,315,315,315,322,322,315,315,,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,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,,,,327',
+'327,327,324,327,324,324,324,327,327,324,324,,327,,327,327,327,327,327',
+'327,327,,,,,,327,327,327,327,327,327,327,,,327,,,,,,,327,,,327,327,327',
+'327,327,327,327,327,,327,327,327,,327,327,327,327,327,,,,,,,,,,,,,,',
+',,,,,327,,,327,,,327,327,,,327,,,,,,327,,,,,,,,,327,,,,,327,327,327',
+'327,,327,327,327,327,,,,,327,327,,,,328,328,328,327,328,327,327,327',
+'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',
+',,,283,283,283,328,283,328,328,328,283,283,328,328,,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,,,,919,919,919,283,919,283',
+'283,283,919,919,283,283,,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,919,,919,919,919,919,919,,,,,,,,,,,,,,,,,,,,919,,,919,,,919',
+'919,,,919,,,,,,919,,,,,,,,,919,,,,,919,919,919,919,,919,919,919,919',
+',,,,919,919,,,,920,920,920,919,920,919,919,919,920,920,919,919,,920',
+',920,920,920,920,920,920,920,,,,,,920,920,920,920,920,920,920,,,920',
+',,,,,,920,,,920,920,920,920,920,920,920,920,,920,920,920,,920,920,920',
+'920,920,,,,,,,,,,,,,,,,,,,,920,,,920,,,920,920,,,920,,,,,,920,,,,,,',
+',,920,,,,,920,920,920,920,,920,920,920,920,,,,,920,920,,,,921,921,921',
+'920,921,920,920,920,921,921,920,920,,921,,921,921,921,921,921,921,921',
+',,,,,921,921,921,921,921,921,921,,,921,,,,,,,921,,,921,921,921,921,921',
+'921,921,921,,921,921,921,,921,921,921,921,921,,,,,,,,,,,,,,,,,,,,921',
+',,921,,,921,921,,,921,,,,,,921,,,,,,,,,921,,,,,921,921,921,921,,921',
+'921,921,921,,,,,921,921,,,,922,922,922,921,922,921,921,921,922,922,921',
+'921,,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,922,922,,,,,,,,,,,,,,,,,,,,922,,,922,,,922,922,,,922,,,,,,922',
+',,,,,,,,922,,,,,922,922,922,922,,922,922,922,922,,,,,922,922,,,,923',
+'923,923,922,923,922,922,922,923,923,922,922,,923,,923,923,923,923,923',
+'923,923,,,,,,923,923,923,923,923,923,923,,,923,,,,,,,923,,,923,923,923',
+'923,923,923,923,923,,923,923,923,,923,923,923,923,923,,,,,,,,,,,,,,',
+',,,,,923,,,923,,,923,923,,,923,,,,,,923,,,,,,,,,923,,,,,923,923,923',
+'923,,923,923,923,923,,,,,923,923,,,,924,924,924,923,924,923,923,923',
+'924,924,923,923,,924,,924,924,924,924,924,924,924,,,,,,924,924,924,924',
+'924,924,924,,,924,,,,,,,924,,,924,924,924,924,924,924,924,924,,924,924',
+'924,,924,924,924,924,924,,,,,,,,,,,,,,,,,,,,924,,,924,,,924,924,,,924',
+',,,,,924,,,,,,,,,924,,,,,924,924,924,924,,924,924,924,924,,,,,924,924',
+',,,278,278,278,924,278,924,924,924,278,278,924,924,,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,333,333,333,333,333,,,,333,333,,,,333,,333,333,333,333,333,333,333',
+',,,,,333,333,333,333,333,333,333,,,333,,,,,,333,333,,333,333,333,333',
+'333,333,333,333,333,,333,333,333,,333,333,333,333,333,,,,,,,,,,,,,,',
+',,,,,333,,,333,,,333,333,,,333,,333,,,,333,,,,,,,,,333,,,,,333,333,333',
+'333,,333,333,333,333,,,,,333,333,,,,802,802,802,333,802,333,333,333',
+'802,802,333,333,,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',
+',,,799,799,799,802,799,802,802,802,799,799,802,802,,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,,,,986,986,986,799,986,799',
+'799,799,986,986,799,799,,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',
+',,,,986,986,,,,991,991,991,986,991,986,986,986,991,991,986,986,,991',
+',991,991,991,991,991,991,991,,,,,,991,991,991,991,991,991,991,,,991',
+',,,,,,991,,,991,991,991,991,991,991,991,991,,991,991,991,,991,991,991',
+'991,991,,,,,,,,,,,,,,,,,,,,991,,,991,,,991,991,,,991,,991,,,,991,,,',
+',,,,,991,,,,,991,991,991,991,,991,991,991,991,,,,,991,991,,,,35,35,35',
+'991,35,991,991,991,35,35,991,991,,35,,35,35,35,35,35,35,35,,,,,,35,35',
+'35,35,35,35,35,,,35,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,',
+'35,35,35,35,35,,,,,,,,,,,,,,,,,,,,35,,,35,,,35,35,,,35,,35,,35,,35,',
+',35,,,,,,35,,,,,35,35,35,35,,35,35,35,35,,,,,35,35,,,,273,273,273,35',
+'273,35,35,35,273,273,35,35,,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,,,,36,36,36,273,36,273,273,273,36,36,273,273,,36,,36',
+'36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,,36,,,36,36,36',
+'36,36,36,36,36,36,36,36,36,,36,36,36,36,36,,,,,,,,,,,,,,,,,,,,36,,,36',
+',,36,36,,,36,,36,,36,,36,,,36,,,,,,36,,,,,36,36,36,36,,36,36,36,36,',
+',,,36,36,,,,790,790,790,36,790,36,36,36,790,790,36,36,,790,,790,790',
+'790,790,790,790,790,,,,,,790,790,790,790,790,790,790,,,790,,,,,,,790',
+',,790,790,790,790,790,790,790,790,790,790,790,790,,790,790,790,790,790',
+',,,,,,,,,,,,,,,,,,,790,,,790,,,790,790,,,790,,790,,790,,790,,,790,,',
+',,,790,,,,,790,790,790,790,,790,790,790,790,,,,,790,790,,,,1010,1010',
+'1010,790,1010,790,790,790,1010,1010,790,790,,1010,,1010,1010,1010,1010',
+'1010,1010,1010,,,,,,1010,1010,1010,1010,1010,1010,1010,,,1010,,,,,,',
+'1010,,,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,',
+'1010,1010,1010,1010,1010,,,,,,,,,,,,,,,,,,,,1010,,,1010,,,1010,1010',
+',,1010,,,,1010,,1010,,,1010,,,,,,1010,,,,,1010,1010,1010,1010,,1010',
+'1010,1010,1010,,,,,1010,1010,,,,849,849,849,1010,849,1010,1010,1010',
+'849,849,1010,1010,,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,,849,849,849,849,849,,,,,,,,,,,,,,,,,,,,849,,,849,,,849,849',
+',,849,,,,,,849,,,,,,,,,849,,,,,849,849,849,849,,849,849,849,849,,,,',
+'849,849,,,,299,299,299,849,299,849,849,849,299,299,849,849,,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,,,,1036,1036,1036,299',
+'1036,299,299,299,1036,1036,299,299,,1036,,1036,1036,1036,1036,1036,1036',
+'1036,,,,,,1036,1036,1036,1036,1036,1036,1036,,,1036,,,,,,,1036,,,1036',
+'1036,1036,1036,1036,1036,1036,1036,,1036,1036,1036,,1036,1036,1036,1036',
+'1036,,,,,,,,,,,,,,,,,,,,1036,,,1036,,,1036,1036,,,1036,,,,,,1036,,,',
+',,,,,1036,,,,,1036,1036,1036,1036,,1036,1036,1036,1036,,,,,1036,1036',
+',,,272,272,272,1036,272,1036,1036,1036,272,272,1036,1036,,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,,,,271,271,271,272,271',
+'272,272,272,271,271,272,272,,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,,,,270,270,270,271,270,271,271,271,270,270,271,271,',
+'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,,,,369,369',
+'369,270,369,270,270,270,369,369,270,270,,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,,,,46,46,46,369,46,369,369,369,46,46,369',
+'369,,46,,46,46,46,46,46,46,46,,,,,,46,46,46,46,46,46,46,,,46,,,,,,,46',
+',,46,46,46,46,46,46,46,46,,46,46,46,,46,46,46,46,46,,,,,,,,,,,,,,,,',
+',,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,,,46,,,,,46,46,46,46,,46,46,46',
+'46,,,,,46,46,,,,820,820,820,46,820,46,46,46,820,820,46,46,,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,,,820,820,,,820,,,,,,820,,,,,,,,,820',
+',,,,820,820,820,820,,820,820,820,820,,,,,820,820,,,,47,47,47,820,47',
+'820,820,820,47,47,820,820,,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,,,,269,269,269,47,269,47,47,47,269',
+'269,47,47,,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',
+',,,268,268,268,269,268,269,269,269,268,268,269,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,,268,268,268,268,268,,,,,,',
+',,,,,,,,,,,,,268,,,268,,,268,268,,,268,,,,,,268,,,,,,,,,268,,,,,268',
+'268,268,268,,268,268,268,268,,,,,268,268,,,,49,49,49,268,49,268,268',
+'268,49,49,268,268,,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,49,49,,49,49,49,49,49,,',
+',,,,,,,,,,,,,,,,,49,,,49,,,49,49,,,49,,,,,,49,,,,,,,,,49,,,,,49,49,49',
+'49,,49,49,49,49,,,,,49,49,,,,267,267,267,49,267,49,49,49,267,267,49',
+'49,,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,,,,50,50',
+'50,267,50,267,267,267,50,50,267,267,,50,,50,50,50,50,50,50,50,,,,,,50',
+'50,50,50,50,50,50,,,50,,,,,,,50,,,50,50,50,50,50,50,50,50,,50,50,50',
+',50,50,50,50,50,,,,,,,,,,,,,,,,,,,,50,,,50,,,50,50,,,50,,,,,,50,,,,',
+',,,,50,,,,,50,50,50,50,,50,50,50,50,,,,,50,50,,,,266,266,266,50,266',
+'50,50,50,266,266,50,50,,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,,,,735,735,735,266,735,266,266,266,735,735,266,266,,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,,,,734,734,734',
+'735,734,735,735,735,734,734,735,735,,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,,,,869,869,869,734,869,734,734,734,869,869,734',
+'734,,869,,869,869,869,869,869,869,869,,,,,,869,869,869,869,869,869,869',
+',,869,,,,,,,869,,,869,869,869,869,869,869,869,869,,869,869,869,,869',
+'869,869,869,869,,,,,,,,,,,,,,,,,,,,869,,,869,,,869,869,,,869,,,,,,869',
+',,,,,,,,869,,,,,869,869,869,869,,869,869,869,869,,,,,869,869,,,,386',
+'386,386,869,386,869,869,869,386,386,869,869,,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,,,,265,265,265,386,265,386,386,386',
+'265,265,386,386,,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',
+',,,264,264,264,265,264,265,265,265,264,264,265,265,,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,,,,263,263,263,264,263,264',
+'264,264,263,263,264,264,,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,,,,262,262,262,263,262,263,263,263,262,262,263,263,,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,,,,24,24,24,262',
+'24,262,262,262,24,24,262,262,,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,,,,261,261,261,24,261,24,24,24',
+'261,261,24,24,,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',
+',,,1149,1149,1149,261,1149,261,261,261,1149,1149,261,261,,1149,,1149',
+'1149,1149,1149,1149,1149,1149,,,,,,1149,1149,1149,1149,1149,1149,1149',
+',,1149,,,,,,,1149,,,1149,1149,1149,1149,1149,1149,1149,1149,,1149,1149',
+'1149,,1149,1149,1149,1149,1149,,,,,,,,,,,,,,,,,,,,1149,,,1149,,,1149',
+'1149,,,1149,,,,,,1149,,,,,,,,,1149,,,,,1149,1149,1149,1149,,1149,1149',
+'1149,1149,,,,,1149,1149,,,,1150,1150,1150,1149,1150,1149,1149,1149,1150',
+'1150,1149,1149,,1150,,1150,1150,1150,1150,1150,1150,1150,,,,,,1150,1150',
+'1150,1150,1150,1150,1150,,,1150,,,,,,,1150,,,1150,1150,1150,1150,1150',
+'1150,1150,1150,,1150,1150,1150,,1150,1150,1150,1150,1150,,,,,,,,,,,',
+',,,,,,,,1150,,,1150,,,1150,1150,,,1150,,,,,,1150,,,,,,,,,1150,,,,,1150',
+'1150,1150,1150,,1150,1150,1150,1150,,,,,1150,1150,,,,52,52,52,1150,52',
+'1150,1150,1150,52,52,1150,1150,,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,,,,712,712,712,52,712,52,52',
+'52,712,712,52,52,,712,,712,712,712,712,712,712,712,,,,,,712,712,712',
+'712,712,712,712,,,712,,,,,,,712,,,712,712,712,712,712,712,712,712,,712',
+'712,712,,712,712,712,712,712,,,,,,,,,,,,,,,,,,,,712,,,712,,,712,712',
+',,712,,,,,,712,,,,,,,,,712,,,,,712,712,712,712,,712,712,712,712,,,,',
+'712,712,,,,1162,1162,1162,712,1162,712,712,712,1162,1162,712,712,,1162',
+',1162,1162,1162,1162,1162,1162,1162,,,,,,1162,1162,1162,1162,1162,1162',
+'1162,,,1162,,,,,,,1162,,,1162,1162,1162,1162,1162,1162,1162,1162,1162',
+'1162,1162,1162,,1162,1162,1162,1162,1162,,,,,,,,,,,,,,,,,,,,1162,,,1162',
+',,1162,1162,,,1162,,1162,,1162,,1162,,,1162,,,,,,1162,,,,,1162,1162',
+'1162,1162,,1162,1162,1162,1162,,,,,1162,1162,,,,260,260,260,1162,260',
+'1162,1162,1162,260,260,1162,1162,,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,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,64,,7,7,,,',
+'64,64,64,,,64,64,64,,64,,,,,,,,64,,64,64,64,,,,,,,,64,64,,64,64,64,64',
+'64,,,,,,,,,,,,,,,,,,,,,,,64,64,64,64,64,64,64,64,64,64,64,64,64,64,',
+',64,64,64,,,64,,,64,,,64,64,,64,,64,,64,,64,64,,64,64,64,64,64,,64,',
+'64,,,,,,,,,,,,,,64,,,64,64,64,64,,64,,64,,696,696,696,64,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',
+',,,259,259,259,696,259,696,696,696,259,259,696,696,,259,,259,259,259',
+'259,259,259,259,,,,,,259,259,259,259,259,259,259,,,259,,,,,,,259,,,259',
+'259,259,259,259,259,259,259,,259,259,259,,259,259,259,259,259,,,,,,',
+',,,,,,,,,,,,,259,,,259,,,259,259,,,259,,,,,,259,,,,,,,,,259,,,,,259',
+'259,259,259,,259,259,259,259,,,,,259,259,,,,407,407,407,259,407,259',
+'259,259,407,407,259,259,,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,,,,258,258,258,407,258,407,407,407,258,258,407,407,,258',
+',258,258,258,258,258,258,258,,,,,,258,258,258,258,258,258,258,,,258',
+',,,,,,258,,,258,258,258,258,258,258,258,258,,258,258,258,,258,258,258',
+'258,258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,',
+',,258,,,,,258,258,258,258,,258,258,258,258,,,,,258,258,,,,257,257,257',
+'258,257,258,258,258,257,257,258,258,,257,,257,257,257,257,257,257,257',
+',,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257,257,257,257',
+'257,257,257,,257,257,257,,257,257,257,257,257,,,,,,,,,,,,,,,,,,,,257',
+',,257,,,257,257,,,257,,,,,,257,,,,,,,,,257,,,,,257,257,257,257,,257',
+'257,257,257,,,,,257,257,,,,690,690,690,257,690,257,257,257,690,690,257',
+'257,,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,,,,689',
+'689,689,690,689,690,690,690,689,689,690,690,,689,,689,689,689,689,689',
+'689,689,,,,,,689,689,689,689,689,689,689,,,689,,,,,,,689,,,689,689,689',
+'689,689,689,689,689,,689,689,689,,689,689,689,689,689,,,,,,,,,,,,,,',
+',,,,,689,,,689,,,689,689,,,689,,,,,,689,,,,,,,,,689,,,,,689,689,689',
+'689,,689,689,689,689,,,,,689,689,,,,,,,689,,689,689,689,,,689,689,66',
+'66,66,66,66,,,,66,66,,,,66,,66,66,66,66,66,66,66,,,,,,66,66,66,66,66',
+'66,66,,,66,,,,,,66,66,,66,66,66,66,66,66,66,66,66,,66,66,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,67,,,,,67,67,,,,68,68,68,67,68,67,67,67,68,68,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,,,,436,436,436,68,436,68,68,68,436,436,68,68,,436,,436,436',
+'436,436,436,436,436,,,,,,436,436,436,436,436,436,436,,,436,,,,,,,436',
+',,436,436,436,436,436,436,436,436,,436,436,436,,436,436,436,436,436',
+',,,,,,,,,,,,,,,,,,,436,,,436,,,436,436,,,436,,,,,,436,,,,,,,,,436,,',
+',,436,436,436,436,,436,436,436,436,,,,,436,436,,,,71,71,71,436,71,436',
+'436,436,71,71,436,436,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71',
+'71,71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,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,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,72,,,,684,684,684,72,684,72,72,72,684,684,72,72,,684,,684',
+'684,684,684,684,684,684,,,,,,684,684,684,684,684,684,684,,,684,,,,,',
+',684,,,684,684,684,684,684,684,684,684,,684,684,684,,684,684,684,684',
+'684,,,,,,,,,,,,,,,,,,,,684,,,684,,,684,684,,,684,,,,,,684,,,,,,,,,684',
+',,,,684,684,684,684,,684,684,684,684,,,,,684,684,,,,75,75,75,684,75',
+'684,684,684,75,75,684,684,,75,,75,75,75,75,75,75,75,,,,,,75,75,75,75',
+'75,75,75,,,75,,,,,,,75,,,75,75,75,75,75,75,75,75,,75,75,75,,75,75,75',
+'75,75,,,,,,,,,,,,,,,,,,,,75,,,75,,,75,75,,,75,,,,,,75,,,,,,,,,75,,,',
+',75,75,75,75,,75,75,75,75,,,,,75,75,75,,,,,75,75,,75,75,75,,,75,75,683',
+'683,683,,683,,,,683,683,,,,683,,683,683,683,683,683,683,683,,,,,,683',
+'683,683,683,683,683,683,,,683,,,,,,,683,,,683,683,683,683,683,683,683',
+'683,683,683,683,683,,683,683,683,683,683,,,,,,,,,,,,,,,,,,,,683,,,683',
+',,683,683,,,683,,,,683,,683,,,683,,,,,,683,,,,,683,683,683,683,,683',
+'683,683,683,,,,,683,683,,,,682,682,682,683,682,683,683,683,682,682,683',
+'683,,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,682',
+',,,,,,682,,682,682,682,460,,682,682,,,,460,460,460,,,460,460,460,,460',
+',,,,,,,460,460,460,460,,,,,,,,,460,460,,460,460,460,460,460,,,,,,,,',
+',,,,,,,,,,,,,,460,460,460,460,460,460,460,460,460,460,460,460,460,460',
+',,460,460,460,,,460,,460,460,,,460,460,,460,,460,,460,,460,460,,460',
+'460,460,460,460,,460,460,460,1229,,1229,1229,1229,1229,1229,,,,,,,460',
+',1229,460,460,470,460,,460,,,,470,470,470,460,,470,470,470,,470,,,1229',
+',,,,470,470,470,470,470,,1229,1229,,,,1229,470,470,,470,470,470,470',
+'470,,,,,,,,,,,,,,,,,,,,,,,470,470,470,470,470,470,470,470,470,470,470',
+'470,470,470,,,470,470,470,,,470,,,470,,,470,470,,470,,470,,470,,470',
+'470,,470,470,470,470,470,,470,470,470,,,,,,,,,,,,,,470,,,470,470,470',
+'470,,470,471,470,,,,,470,471,471,471,,,471,471,471,,471,,,,,,,,471,471',
+'471,471,471,,,,,,,,471,471,,471,471,471,471,471,,,,,,,,,,,,,,,,,,,,',
+',,471,471,471,471,471,471,471,471,471,471,471,471,471,471,,,471,471',
+'471,,,471,,,471,,,471,471,,471,,471,,471,,471,471,,471,471,471,471,471',
+',471,471,471,,,,,,,,,,,,,,471,,,471,471,471,471,,471,,471,,472,472,472',
+'471,472,,,,472,472,,,,472,,472,472,472,472,472,472,472,,,,,,472,472',
+'472,472,472,472,472,,,472,,,,,,,472,,,472,472,472,472,472,472,472,472',
+',472,472,472,,472,472,472,472,472,,,,,,,,,,,,,,,,,,,,472,,,472,,,472',
+'472,,,472,,,,,,472,,,,,,,,,472,,,,,472,472,472,472,,472,472,472,472',
+',,,,472,472,,,,679,679,679,472,679,472,472,472,679,679,472,472,,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',
+'679,679,,,679,679,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,,,124,124,129,129,129,,129,,,,129,129,,,,129,,129,129,129',
+'129,129,129,129,,,,,,129,129,129,129,129,129,129,,,129,,,,,,,129,,,129',
+'129,129,129,129,129,129,129,,129,129,129,,129,129,129,129,129,,,,,,',
+',,,,,,,,,,,,,129,,,129,,,129,129,,,129,,,,,,129,,,,,,,,,129,,,,,129',
+'129,129,129,,129,129,129,129,,,,,129,129,,,,130,130,130,129,130,129',
+'129,129,130,130,129,129,,130,,130,130,130,130,130,130,130,,,,,,130,130',
+'130,130,130,130,130,,,130,,,,,,,130,,,130,130,130,130,130,130,130,130',
+',130,130,130,,130,130,130,130,130,,,,,,,,,,,,,,,,,,,,130,,,130,,,130',
+'130,,,130,,,,,,130,,,,,,,,,130,,,,,130,130,130,130,,130,130,130,130',
+',,,,130,130,,,,131,131,131,130,131,130,130,130,131,131,130,130,,131',
+',131,131,131,131,131,131,131,,,,,,131,131,131,131,131,131,131,,,131',
+',,,,,,131,,,131,131,131,131,131,131,131,131,,131,131,131,,131,131,131',
+'131,131,,,,,,,,,,,,,,,,,,,,131,,,131,,,131,131,,,131,,,,,,131,,,,,,',
+',,131,,,,,131,131,131,131,,131,131,131,131,,,,,131,131,,,,132,132,132',
+'131,132,131,131,131,132,132,131,131,,132,,132,132,132,132,132,132,132',
+',,,,,132,132,132,132,132,132,132,,,132,,,,,,,132,,,132,132,132,132,132',
+'132,132,132,,132,132,132,,132,132,132,132,132,,,,,,,,,,,,,,,,,,,,132',
+',,132,,,132,132,,,132,,,,,,132,,,,,,,,,132,,,,,132,132,132,132,,132',
+'132,132,132,,,,,132,132,,,,,,,132,,132,132,132,,,132,132,133,133,133',
+'133,133,,,,133,133,,,,133,,133,133,133,133,133,133,133,,,,,,133,133',
+'133,133,133,133,133,,,133,,,,,,133,133,,133,133,133,133,133,133,133',
+'133,133,,133,133,133,,133,133,133,133,133,,,,,,,,,,,,,,,,,,,,133,,,133',
+',,133,133,,,133,,133,,,,133,,,,,,,,,133,,,,,133,133,133,133,,133,133',
+'133,133,,,,,133,133,,,,,,,133,,133,133,133,,,133,133,678,678,678,678',
+'678,,,,678,678,,,,678,,678,678,678,678,678,678,678,,,,,,678,678,678',
+'678,678,678,678,,,678,,,,,,678,678,,678,678,678,678,678,678,678,678',
+'678,,678,678,678,,678,678,678,678,678,,,,,,,,,,,,,,,,,,,,678,,,678,',
+',678,678,,,678,,678,,,,678,,,,,,,,,678,,,,,678,678,678,678,,678,678',
+'678,678,,,,,678,678,,,,499,499,499,678,499,678,678,678,499,499,678,678',
+',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,,,,675,675',
+'675,499,675,499,499,499,675,675,499,499,,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,675,,,,,,,,,,,,,,,',
+',,,,675,,,675,,,675,675,,,675,,675,,675,,675,,,675,,,,,,675,,,,,675',
+'675,675,675,,675,675,675,675,,,,,675,675,,,,674,674,674,675,674,675',
+'675,675,674,674,675,675,,674,,674,674,674,674,674,674,674,,,,,,674,674',
+'674,674,674,674,674,,,674,,,,,,,674,,,674,674,674,674,674,674,674,674',
+',674,674,674,,674,674,674,674,674,,,,,,,,,,,,,,,,,,,,674,,,674,,,674',
+'674,,,674,,,,,,674,,,,,,,,,674,,,,,674,674,674,674,,674,674,674,674',
+',,,,674,674,,,,673,673,673,674,673,674,674,674,673,673,674,674,,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,,,,512,512',
+'512,673,512,673,673,673,512,512,673,673,,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,,,,219,219,219,512,219,512,512,512,219',
+'219,512,512,,219,,219,219,219,219,219,219,219,,,,,,219,219,219,219,219',
+'219,219,,,219,,,,,,,219,,,219,219,219,219,219,219,219,219,,219,219,219',
+',219,219,219,219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219,,219',
+',,,219,,,,,,,,,219,,,,,219,219,219,219,,219,219,219,219,,,,,219,219',
+',,,,,,219,,219,219,219,,,219,219,671,671,671,671,671,,,,671,671,,,,671',
+',671,671,671,671,671,671,671,,,,,,671,671,671,671,671,671,671,,,671',
+',,,,,671,671,,671,671,671,671,671,671,671,671,671,,671,671,671,,671',
+'671,671,671,671,,,,,,,,,,,,,,,,,,,,671,,,671,,,671,671,,,671,,671,,',
+',671,,,,,,,,,671,,,,,671,671,671,671,,671,671,671,671,,,,,671,671,,',
+',522,522,522,671,522,671,671,671,522,522,671,671,,522,,522,522,522,522',
+'522,522,522,,,,,,522,522,522,522,522,522,522,,,522,,,,,,,522,,,522,522',
+'522,522,522,522,522,522,522,522,522,522,,522,522,522,522,522,,,,,,,',
+',,,,,,,,,,,,522,,,522,,,522,522,,,522,,522,,522,,522,,,522,,,,,,522',
+',,,,522,522,522,522,,522,522,522,522,,,,,522,522,,,,250,250,250,522',
+'250,522,522,522,250,250,522,522,,250,,250,250,250,250,250,250,250,,',
+',,,250,250,250,250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250',
+'250,250,250,,250,250,250,,250,250,250,250,250,,,,,,,,,,,,,,,,,,,,250',
+',,250,,,250,250,,,250,,,,,,250,,,,,,,,,250,,,,,250,250,250,250,,250',
+'250,250,250,,,,,250,250,,,,524,524,524,250,524,250,250,250,524,524,250',
+'250,,524,,524,524,524,524,524,524,524,,,,,,524,524,524,524,524,524,524',
+',,524,,,,,,,524,,,524,524,524,524,524,524,524,524,,524,524,524,,524',
+'524,524,524,524,,,,,,,,,,,,,,,,,,,,524,,,524,,,524,524,,,524,,,,,,524',
+',,,,,,,,524,,,,,524,524,524,524,,524,524,524,524,,,,,524,524,,,,525',
+'525,525,524,525,524,524,524,525,525,524,524,,525,,525,525,525,525,525',
+'525,525,,,,,,525,525,525,525,525,525,525,,,525,,,,,,,525,,,525,525,525',
+'525,525,525,525,525,,525,525,525,,525,525,525,525,525,,,,,,,,,,,,,,',
+',,,,,525,,,525,,,525,525,,,525,,,,,,525,,,,,,,,,525,,,,,525,525,525',
+'525,,525,525,525,525,,,,,525,525,,,,526,526,526,525,526,525,525,525',
+'526,526,525,525,,526,,526,526,526,526,526,526,526,,,,,,526,526,526,526',
+'526,526,526,,,526,,,,,,,526,,,526,526,526,526,526,526,526,526,,526,526',
+'526,,526,526,526,526,526,,,,,,,,,,,,,,,,,,,,526,,,526,,,526,526,,,526',
+',,,,,526,,,,,,,,,526,,,,,526,526,526,526,,526,526,526,526,,,,,526,526',
+',,,220,220,220,526,220,526,526,526,220,220,526,526,,220,,220,220,220',
+'220,220,220,220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220',
+'220,220,220,220,220,220,220,,220,220,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,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,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,,,,224,224,224,223,224,223,223,223,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,224,224,,,,,224,224',
+',,,640,640,640,224,640,224,224,224,640,640,224,224,,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,,,,630,630,630',
+'640,630,640,640,640,630,630,640,640,,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,630,629,630,630',
+'630,629,629,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,,,,76,76,76,629,76,629,629,629,76,76,629,629,,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,,,,1018,1018',
+'1018,76,1018,76,76,76,1018,1018,,,,1018,,1018,1018,1018,1018,1018,1018',
+'1018,,,,,,1018,1018,1018,1018,1018,1018,1018,,,1018,,,,,,,1018,,,1018',
+'1018,1018,1018,1018,1018,1018,1018,,1018,1018,1018,,1018,1018,,,1018',
+',,,,,,,,,,,,,,,,,,,1018,,,1018,,,1018,1018,,,1018,,,,,,,,,,,,,,,,,,',
+',1018,1018,1018,1018,,1018,1018,1018,1018,,,,,1018,1018,,,,39,39,39',
+'1018,39,1018,1018,1018,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,,,,77,77,77,39,77,39,39,39,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,77,,77,77,77,,77,77,,,77,,,,,,,,,,,,,,,,,77,',
+',77,,,77,,,77,77,,,77,,,,,,,,,,,,,,,,,,,,77,77,77,77,,77,77,77,77,,',
+',,77,77,,,,1144,1144,1144,77,1144,77,77,77,1144,1144,,,,1144,,1144,1144',
+'1144,1144,1144,1144,1144,,,,,,1144,1144,1144,1144,1144,1144,1144,,,1144',
+',,,,,,1144,,,1144,1144,1144,1144,1144,1144,1144,1144,,1144,1144,1144',
+',1144,1144,,,1144,,,,,,,,,,,,,,,,,,,,1144,,,1144,,,1144,1144,,,1144',
+',,,,,,,,,,,,,,,,,,,1144,1144,1144,1144,,1144,1144,1144,1144,,,,,1144',
+'1144,,,,78,78,78,1144,78,1144,1144,1144,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',
+'78,,78,78,78,,78,78,,,78,,,,,,,,,,,,,,,,,,,,78,,,78,,,78,78,,,78,,,',
+',,,,,,,,,,,,,,,,78,78,78,78,,78,78,78,78,,,,,78,78,,,,805,805,805,78',
+'805,78,78,78,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',
+',,,40,40,40,805,40,805,805,805,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,,,1212,,1212',
+'1212,1212,1212,1212,,,,,,,,,1212,,40,40,40,40,,40,40,40,40,,,,,40,40',
+',,,40,,1212,40,,40,40,40,341,341,341,,341,1212,1212,,341,341,1212,,',
+'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,,,1210,,1210,1210',
+'1210,1210,1210,,,,,,,,,1210,,341,341,341,341,,341,341,341,341,,,,,341',
+'341,,,,341,,1210,341,,341,341,341,360,360,360,,360,1210,1210,,360,360',
+'1210,,,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,,,,816,816,816',
+'360,816,360,360,360,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,,,,1082,1082,1082,816,1082,816,816,816,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,,,,599,599,599,1082,599,1082,1082,1082,599,599,,,,599,,599,599',
+'599,599,599,599,599,,,,,,599,599,599,599,599,599,599,,,599,,,,,,,599',
+',,599,599,599,599,599,599,599,599,,599,599,599,,599,599,,,599,,,,,,',
+',,,,,,,,,,,,,599,,,599,,,599,599,,,599,,,,,,,,,,,,,,,,,,,,599,599,599',
+'599,,599,599,599,599,,,,,599,599,,,,590,590,590,599,590,599,599,599',
+'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',
+'590,590,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427',
+'427,427,427,427,427,427,427,427,427,,,,427,427,427,427,427,427,427,427',
+'427,427,,,,,,427,427,427,427,427,427,427,427,427,,,427,,,,,,,,427,427',
+',427,427,427,427,427,427,427,,,427,427,,,,427,427,427,427,,,,,,,,,,',
+',,,427,427,,427,427,427,427,427,427,427,427,427,427,427,427,,,427,427',
+',,,,,,,,,,,,,427,669,669,669,669,669,669,669,669,669,669,669,669,669',
+'669,669,669,669,669,669,669,669,669,669,669,,,,669,669,669,669,669,669',
+'669,669,669,669,,,,,,669,669,669,669,669,669,669,669,669,,,669,,,,,',
+',,669,669,,669,669,669,669,669,669,669,,,669,669,,,,669,669,669,669',
+',,,,,,,,,,,,,669,669,,669,669,669,669,669,669,669,669,669,669,669,669',
+',,669,669,,,,,,,,,,,,,,669,10,10,10,10,10,10,10,10,10,10,10,10,10,10',
+'10,10,10,10,10,10,10,10,10,10,,,,10,10,10,10,10,10,10,10,10,10,,,,,',
+'10,10,10,10,10,10,10,10,10,10,,10,,,,,,,,10,10,,10,10,10,10,10,10,10',
+',,10,10,,,,10,10,10,10,,,,,,,,,,,,,,10,10,,10,10,10,10,10,10,10,10,10',
+'10,10,10,,,10,10,,,,,,,,,,,,,,10,11,11,11,11,11,11,11,11,11,11,11,11',
+'11,11,11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11,11',
+',,,,,11,11,11,11,11,11,11,11,11,,,11,,,,,,,,11,11,,11,11,11,11,11,11',
+'11,,,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11',
+'11,11,11,11,,,11,11,944,944,944,944,,,,,,,,,,11,,,944,944,944,944,,',
+'1138,944,1138,1138,1138,1138,1138,944,944,,,944,,,,1138,,,,,,,,,,,,',
+',,,944,,,944,,,1138,944,,,944,,,,,1138,1138,1138,1138,,,,1138,,,,944',
+',,,944,944,944,944,,944,944,944,944,,,,,944,944,990,990,990,990,,,944',
+',944,944,944,,,944,944,,990,990,990,990,,,,990,990,,,,,990,990,,,990',
+'990,,,,,,,,,,,,,,,,,,,990,,,990,,,,990,,,990,,990,,,,,,,990,,,,,,,990',
+',,,990,990,990,990,,990,990,990,990,,,,,990,990,1204,1204,1204,1204',
+',,990,,990,990,990,,,990,990,,1204,1204,1204,1204,,,1135,1204,1135,1135',
+'1135,1135,1135,1204,1204,,,1204,,,,1135,,,,,,,,,,,,,,,,1204,,,1204,',
+',1135,1204,,,1204,,,,,1135,1135,1135,1135,,,,1135,,,,1204,,,,1204,1204',
+'1204,1204,,1204,1204,1204,1204,,,,,1204,1204,,,,,,,1204,,1204,1204,1204',
+',,1204,1204,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,782,,,782,782,,,,782,782,782,782,,,,,,',
+',,,,,,,782,782,,782,782,782,782,782,782,782,782,782,782,782,782,,,782',
+'945,945,945,945,,,,,,1166,,1166,1166,1166,1166,1166,945,945,945,945',
+',,,945,1166,,,,,945,945,,,945,,,,,,,,,,,,,1166,,,,,,,945,,,945,1166',
+'1166,,945,,1166,945,,,,,,,,,,,,,,,,945,,,,945,945,945,945,,945,945,945',
+'945,,,,,945,945,755,755,755,755,1166,,945,,945,945,945,,,945,945,,755',
+'755,755,755,,,1208,755,1208,1208,1208,1208,1208,755,755,,,755,,,,1208',
+',,,,,,,,,,,,,,,755,,,755,,,1208,755,,,755,,,,,,,1208,1208,,,,1208,,',
+',755,,,,755,755,755,755,,755,755,755,755,,,,,755,755,,,,,,,755,,755',
+'755,755,,,755,755,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26',
+'26,26,26,26,26,26,26,,,,26,26,26,26,26,26,26,26,26,26,,,,,,26,26,26',
+'26,26,26,26,26,26,26,26,26,,26,,,,,,26,26,,26,26,26,26,26,26,26,,,26',
+'26,,,,26,26,26,26,,,,,,26,,,,,,,,26,26,,26,26,26,26,26,26,26,26,26,26',
+'26,26,,,26,747,747,747,747,,,,,,,,,,,,,747,747,747,747,,,,747,,,,,,747',
+'747,,,747,,,,,,,,,,,,,,,,,,,,747,,,747,,,,747,,,747,,747,,,,,,,709,',
+'709,709,709,709,709,747,,,,747,747,747,747,709,747,747,747,747,,,,,747',
+'747,747,938,938,938,938,,747,,747,747,747,709,,747,747,,,938,938,938',
+'938,,709,709,938,,,709,,,938,938,,,938,,,,,,,,,,,,,,,,,,,,938,,,938',
+',,,938,,,938,,938,709,,,,,,,,,,,,,938,,,,938,938,938,938,,938,938,938',
+'938,,,,,938,938,932,932,932,932,,,938,,938,938,938,,,938,938,,932,932',
+'932,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,931,,,932,,932,932,932,,,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,1117,1117,1117,1117,,,931,,931,931,931,,,931,931,,1117',
+'1117,1117,1117,,,1206,1117,1206,1206,1206,1206,1206,1117,1117,,,1117',
+',,,1206,,,,,,,,,,,,,,,,1117,,,1117,,,1206,1117,,,1117,,,,,1206,1206',
+'1206,1206,,,,1206,,,,1117,,,,1117,1117,1117,1117,,1117,1117,1117,1117',
+',,,,1117,1117,1125,1125,1125,1125,,,1117,,1117,1117,1117,,,1117,1117',
+',1125,1125,1125,1125,,,,1125,,,,,,1125,1125,,,1125,,,,,,,,,,,,,,,,,',
+',,1125,,,1125,,,,1125,,,1125,,,,,,,,,,,,,,,,1125,,,,1125,1125,1125,1125',
+',1125,1125,1125,1125,,,,,1125,1125,1129,1129,1129,1129,,,1125,,1125',
+'1125,1125,,,1125,1125,,1129,1129,1129,1129,,,,1129,,,,,,1129,1129,,',
+'1129,,,,,,,,,,,,,,,,,,,,1129,,,1129,,,,1129,,,1129,,1129,,,,,,,,,,,',
+',,1129,,,,1129,1129,1129,1129,,1129,1129,1129,1129,,,,,1129,1129,928',
+'928,928,928,,,1129,,1129,1129,1129,,,1129,1129,,928,928,928,928,,,,928',
+',,,,,928,928,,,928,,,,,,,,,,,,,,,,,,,,928,,,928,,,,928,,,928,,,,,,,',
+',,,,,,,,928,,,,928,928,928,928,,928,928,928,928,,,,,928,928,529,529',
+'529,529,,,928,,928,928,928,,,928,928,,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,530',
+'530,530,530,,,529,,529,529,529,,,529,529,,530,530,530,530,,,,530,530',
+',,,,530,530,,,530,530,,,,,,,,,,,,,,,,,,,530,,,530,,,,530,,,530,,530',
+',,,,,,530,,,,,,,530,,,,530,530,530,530,,530,530,530,530,,,,,530,530',
+'926,926,926,926,,,530,,530,530,530,,,530,530,,926,926,926,926,,,,926',
+',,,,,926,926,,,926,,,,,,,,765,765,765,765,,,,,,,,,926,,,926,765,765',
+'765,926,,,926,,926,,,,,765,765,,,765,,,,,926,,,,926,926,926,926,,926',
+'926,926,926,,,,,926,926,,,,,,,926,,926,926,926,,,926,926,,,,,,,,,,,',
+'765,765,765,765,,765,765,765,765,,,,,765,765,951,951,951,951,,,765,',
+'765,765,765,,,,,,951,951,951,,,,,,,,,,,951,951,,,951,952,952,952,952',
+',,,,,,,,,,,,952,952,952,,,,,,,,,,,952,952,,,952,,,,,,,,,,,,,,,,951,951',
+'951,951,,951,951,951,951,,,,,951,951,,,,,,,951,,951,951,951,,,,,,,,',
+'952,952,952,952,,952,952,952,952,,,,,952,952,764,764,764,764,,,952,',
+'952,952,952,,,,,,764,764,764,1021,,1021,1021,1021,1021,1021,,,,764,764',
+',,764,1021,,,,,,,,,,,1023,,1023,1023,1023,1023,1023,,,,,1021,,,,1023',
+',,,,1021,1021,1021,1021,,,,1021,,,,,,,,,,1023,764,764,764,764,,764,764',
+'764,764,,1023,1023,,764,764,1023,,,,,,764,,764,764,764,,,1025,1021,1025',
+'1025,1025,1025,1025,1027,,1027,1027,1027,1027,1027,,1025,,,,,,,1027',
+',,,,1023,,,,,,,,,,1025,,,,,,,1027,,,,1025,1025,,,,1025,,1027,1027,632',
+'632,,1027,632,,,,,,,,632,632,,632,632,632,632,632,632,632,,,632,632',
+',,,632,632,632,632,,,,1025,,632,,,,,1027,,,632,632,,632,632,632,632',
+'632,632,632,632,632,632,632,632,302,302,632,,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,638,638,302,,638',
+',,,,,,,638,638,,638,638,638,638,638,638,638,,,638,638,,,,638,638,638',
+'638,,,,,,638,,,,,,,,638,638,,638,638,638,638,638,638,638,638,638,638',
+'638,638,639,639,638,,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,594,594,639,,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,604,604,594',
+',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,593,593,604,,593,,,,,,,,593,593,,593,593,593,593,593,593',
+'593,,,593,593,,,,593,593,593,593,,,,,,593,,,,,,,,593,593,,593,593,593',
+'593,593,593,593,593,593,593,593,593,631,631,593,,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,225,225',
+'631,,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,603,603,225,,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,1163,1163,603,,1163,,,,,,,,1163',
+'1163,,1163,1163,1163,1163,1163,1163,1163,,,1163,1163,,,,1163,1163,1163',
+'1163,,,,,,1163,,,,,,,,1163,1163,,1163,1163,1163,1163,1163,1163,1163',
+'1163,1163,1163,1163,1163,1164,1164,1163,,1164,,,,,,,,1164,1164,,1164',
+'1164,1164,1164,1164,1164,1164,,,1164,1164,,,,1164,1164,1164,1164,,,',
+',,1164,,,,,,,,1164,1164,,1164,1164,1164,1164,1164,1164,1164,1164,1164',
+'1164,1164,1164,1187,1187,1164,,1187,,,,,,,,1187,1187,,1187,1187,1187',
+'1187,1187,1187,1187,,,1187,1187,,,,1187,1187,1187,1187,,,,,,1187,,,',
+',,,,1187,1187,,1187,1187,1187,1187,1187,1187,1187,1187,1187,1187,1187',
+'1187,226,226,1187,,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,677,677,226,,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,676,676,677',
+',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,520,520,676,,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,521,521,520,,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' ]
+ racc_action_check = arr = ::Array.new(28813, nil)
+ idx = 0
+ clist.each do |str|
+ str.split(',', -1).each do |i|
+ arr[idx] = i.to_i unless i.empty?
+ idx += 1
+ end
+ end
+
+racc_action_pointer = [
+ nil, 1560, 1004, 159, nil, 425, nil, 16385, 1357, 81,
+ 25302, 25430, 116, nil, 120, 137, 718, 223, 1137, 347,
+ 332, 273, nil, -70, 15325, 1436, 26177, 289, nil, 368,
+ nil, 0, 5701, 6107, 6241, 11526, 11788, nil, 3164, 23450,
+ 24105, nil, 244, 696, 634, 371, 13098, 13360, 123, 13753,
+ 14015, 798, 15849, 310, 993, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 16526, nil, 17592, 17723, 17854, 5,
+ nil, 18116, 18247, nil, nil, 18509, 23188, 23581, 23843, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 294, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 500, nil,
+ nil, 0, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, 19603, nil, nil, nil, nil, 19746,
+ 19877, 20008, 20139, 20282, nil, 4172, nil, 500, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 318, nil, 3020, 21211,
+ 22140, 22271, 22402, 22533, 22664, 28149, 28454, nil, nil, 334,
+ 4460, 342, nil, 636, 275, 344, 2876, 7822, 7420, 6765,
+ nil, nil, 1164, 15, 111, 456, 116, 372, 452, nil,
+ 21616, 145, 222, 2732, 457, nil, nil, 17187, 17056, 16794,
+ 16242, 15456, 15194, 15063, 14932, 14801, 14146, 13884, 13622, 13491,
+ 12836, 12705, 12574, 11657, 5560, 5429, 5298, 5167, 10728, nil,
+ nil, nil, nil, 9811, nil, nil, 515, 520, 552, 619,
+ 654, 392, -28, 159, 191, 250, nil, nil, nil, 12312,
+ nil, nil, 27722, nil, nil, 484, 8632, 9025, nil, nil,
+ nil, nil, nil, nil, nil, 9156, nil, 2444, nil, 468,
+ 481, nil, 9287, 533, 9418, nil, nil, 9549, 9680, nil,
+ nil, 480, nil, 10871, 1436, 546, 515, 1724, 539, 594,
+ 564, 24244, 3596, 577, 721, 831, 644, 898, nil, 612,
+ 613, 281, 675, 679, nil, nil, nil, 682, 198, 645,
+ 24383, nil, 642, 903, 3740, 3884, 717, nil, 729, 12967,
+ nil, 720, 2300, 1565, 681, nil, 597, 399, 719, 717,
+ 553, 753, nil, 552, 69, 39, 14670, 5036, 4892, 338,
+ 832, 718, 67, 98, 987, 806, 38, 847, nil, nil,
+ 1283, 995, 540, nil, 997, nil, 767, 16925, nil, 7525,
+ nil, 438, 322, 425, 378, 525, -31, -27, 492, nil,
+ nil, nil, nil, nil, nil, nil, 764, 25046, nil, nil,
+ nil, nil, 765, nil, 838, 752, 17985, 754, nil, nil,
+ 748, nil, 1131, 191, 854, nil, nil, 1580, nil, nil,
+ nil, nil, nil, 1724, 773, nil, 771, 786, 540, 526,
+ 18924, nil, nil, nil, nil, 859, 639, 832, nil, nil,
+ 19056, 19192, 19329, 932, 931, nil, nil, 1, 817, 815,
+ 817, nil, nil, 825, 830, 838, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 829, 1134, nil, nil, 20556,
+ nil, nil, nil, nil, nil, nil, nil, 925, nil, nil,
+ 926, 508, 21080, 969, nil, nil, nil, 159, nil, 894,
+ 28637, 28698, 21485, 154, 21747, 21878, 22009, 840, 853, 27045,
+ 27143, 4172, 4460, 341, 1043, 933, 937, 946, 947, 5650,
+ 5835, 5560, 5298, 4748, 4892, 5036, 3596, 4316, 3571, 3480,
+ 4604, 5167, 3164, 5429, nil, 183, nil, 7561, nil, nil,
+ nil, nil, 7691, 886, 885, 898, nil, nil, nil, 900,
+ nil, nil, 7953, nil, 8084, nil, 8215, nil, 309, nil,
+ nil, nil, 8358, 1133, nil, 902, 908, nil, nil, 911,
+ 24907, 917, 8501, 28027, 27905, 1141, 984, nil, nil, 24776,
+ 942, nil, 7158, 28210, 27966, 7027, 4028, 6896, nil, 1067,
+ 948, 992, nil, 6634, nil, nil, 6503, nil, nil, nil,
+ 3884, 1071, nil, 4748, -20, 1076, 1078, 264, 1082, 23057,
+ 22926, 28088, 27661, 68, nil, nil, 1275, nil, 27783, 27844,
+ 22795, nil, nil, 268, 2156, nil, 856, nil, nil, nil,
+ nil, 1058, nil, nil, nil, 974, nil, nil, 420, nil,
+ 423, nil, nil, 960, nil, 964, nil, nil, nil, 25174,
+ nil, 21354, 967, 20949, 20818, 20687, 28576, 28515, 20425, 19460,
+ 495, 1008, 18783, 18652, 18378, 6372, 1007, nil, nil, 17449,
+ 17318, 1010, nil, 1065, 2012, 1096, 16663, nil, nil, nil,
+ nil, 1262, nil, nil, 765, 746, nil, 7555, nil, 26313,
+ nil, 973, 15980, nil, 3438, nil, 990, 995, 1199, 1000,
+ nil, nil, nil, nil, 1088, 1868, nil, nil, nil, 197,
+ 221, 139, 388, 1004, 14408, 14277, nil, 105, nil, nil,
+ nil, nil, 1027, nil, nil, nil, 472, 26260, -66, nil,
+ 1005, 1104, 1023, nil, nil, 26034, nil, nil, 292, nil,
+ nil, 698, nil, nil, 27512, 27282, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, 835, 480, nil,
+ nil, 1025, 25853, nil, 1151, nil, 1134, -8, nil, nil,
+ 11919, nil, 1071, 1081, 1195, nil, 1084, nil, 1132, 11133,
+ nil, nil, 11002, nil, -101, 23974, 1087, nil, 1096, 163,
+ 134, 1138, 165, 1281, 1140, 1102, 24514, nil, 1171, 3308,
+ 13229, nil, nil, nil, 511, 824, nil, 1224, nil, nil,
+ nil, nil, nil, 1233, 1235, nil, nil, 53, 1116, 24,
+ 37, 61, 29, 1292, 1139, 611, nil, 1117, 3308, 12181,
+ nil, 1246, 112, 1129, nil, nil, nil, nil, nil, 2444,
+ nil, nil, nil, nil, nil, nil, nil, nil, 1127, 14539,
+ 1131, 254, 272, 749, 278, nil, 2300, 7289, nil, 1129,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 8763, 8894, 1259, nil, 4316, 1139, 1187, nil, nil, 1142,
+ nil, 1227, nil, nil, 1147, 1149, nil, 1152, 1156, nil,
+ 1157, nil, nil, nil, 1169, 3467, 3506, nil, nil, 9942,
+ 10073, 10204, 10335, 10466, 10597, -82, 27241, 1249, 26947, 100,
+ -84, 26555, 26457, 398, 140, 1171, 1174, nil, 26359, nil,
+ 1172, 913, nil, 1203, 25514, 25936, nil, 927, 1230, 198,
+ nil, 27380, 27414, nil, nil, nil, nil, 5835, nil, nil,
+ nil, nil, nil, 5966, nil, nil, 1210, nil, nil, 1207,
+ 1204, nil, nil, 568, 3452, nil, nil, nil, nil, 1215,
+ 167, nil, -14, nil, 1354, nil, 11264, 1355, nil, nil,
+ 25612, 11395, 4028, 11, 1360, nil, 1362, 307, 3740, nil,
+ nil, nil, nil, 1238, 1285, 1251, 1246, 249, nil, nil,
+ 12050, 2588, 2732, nil, 2588, nil, nil, 6, 23319, nil,
+ nil, 27512, nil, 27538, nil, 27604, nil, 27611, nil, nil,
+ nil, nil, 1248, 1249, 2876, 2156, 12443, nil, 1252, nil,
+ nil, nil, nil, 1256, 1258, 1260, 1261, 1262, 1264, nil,
+ nil, nil, 1316, 1271, 1272, nil, 1276, nil, nil, -72,
+ 1283, nil, nil, nil, nil, nil, nil, 1328, 3020, 2012,
+ nil, nil, 1286, 1289, nil, 1291, 1293, 1294, nil, 1320,
+ 1303, 1289, 24645, nil, nil, nil, nil, nil, 42, nil,
+ 38, 720, nil, 43, nil, nil, nil, 1434, 1868, 1580,
+ 753, nil, nil, nil, 1436, -11, 19, 904, 1393, -9,
+ nil, 1317, 1319, 1328, 1329, 3477, 863, 26653, nil, nil,
+ nil, nil, nil, nil, nil, 26751, nil, 381, nil, 26849,
+ nil, nil, 1345, nil, nil, 25713, nil, nil, 25517, nil,
+ 7580, nil, nil, 1354, 23712, 918, 1409, 4604, nil, 15587,
+ 15718, nil, nil, nil, nil, 1359, 1464, 544, nil, nil,
+ nil, 1485, 16111, 28271, 28332, 26, 25926, nil, nil, nil,
+ nil, 1363, 1380, 1383, nil, nil, 1384, nil, nil, 1387,
+ 1389, 1392, 1393, nil, 1396, nil, 1020, 28393, nil, 780,
+ 1148, nil, nil, nil, nil, nil, 1278, nil, 1400, 68,
+ -7, -1, 8, 1399, 25710, nil, 26656, nil, 26037, nil,
+ 24291, nil, 24152, nil, nil, 1446, 1451, nil, 31, nil,
+ -10, nil, 1415, 1416, 1417, 1422, nil, nil, nil, 18987,
+ nil, nil, nil, nil, -112, nil ]
+
+racc_action_default = [
+ -1, -741, -4, -741, -2, -726, -5, -741, -8, -741,
+ -741, -741, -741, -31, -741, -741, -36, -741, -741, -637,
+ -637, -311, -52, -728, -741, -61, -741, -69, -70, -71,
+ -75, -287, -287, -287, -324, -352, -353, -87, -13, -91,
+ -99, -101, -741, -624, -625, -741, -741, -741, -741, -741,
+ -741, -239, -741, -728, -258, -302, -303, -304, -305, -306,
+ -307, -308, -309, -310, -716, -313, -317, -740, -705, -333,
+ -335, -741, -741, -63, -63, -726, -741, -741, -741, -354,
+ -355, -357, -358, -359, -360, -419, -561, -562, -563, -564,
+ -585, -567, -568, -587, -589, -572, -577, -581, -583, -599,
+ -600, -601, -585, -603, -605, -606, -607, -608, -714, -613,
+ -614, -715, -616, -617, -618, -619, -620, -621, -622, -623,
+ -628, -629, 1236, -3, -727, -736, -737, -738, -7, -741,
+ -741, -741, -741, -741, -9, -4, -19, -741, -130, -131,
+ -132, -133, -134, -135, -136, -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, -200, -201, -202, -203, -204,
+ -205, -206, -207, -208, -209, -210, -24, -137, -13, -741,
+ -741, -741, -741, -741, -277, -741, -741, -724, -725, -741,
+ -13, -636, -634, -660, -660, -741, -13, -741, -741, -728,
+ -729, -56, -741, -624, -625, -741, -311, -741, -741, -245,
+ -741, -637, -637, -13, -741, -57, -59, -222, -223, -741,
+ -741, -741, -741, -741, -741, -741, -741, -741, -741, -741,
+ -741, -741, -741, -741, -741, -741, -741, -741, -741, -259,
+ -260, -261, -262, -741, -65, -66, -741, -130, -131, -170,
+ -171, -172, -188, -193, -200, -203, -624, -625, -703, -741,
+ -428, -430, -741, -722, -723, -76, -277, -741, -332, -434,
+ -443, -445, -82, -440, -83, -728, -84, -265, -282, -292,
+ -292, -286, -290, -293, -741, -585, -707, -711, -741, -85,
+ -86, -726, -14, -741, -17, -741, -89, -13, -728, -741,
+ -92, -95, -13, -107, -108, -741, -741, -115, -324, -327,
+ -728, -741, -637, -637, -352, -353, -356, -441, -741, -97,
+ -741, -103, -321, -741, -224, -225, -604, -233, -234, -741,
+ -246, -251, -13, -315, -728, -266, -733, -733, -741, -741,
+ -733, -741, -334, -62, -741, -741, -741, -13, -13, -726,
+ -741, -727, -624, -625, -741, -741, -311, -741, -370, -371,
+ -125, -126, -741, -128, -741, -311, -632, -741, -348, -660,
+ -565, -741, -741, -741, -741, -741, -741, -741, -741, -6,
+ -739, -25, -26, -27, -28, -29, -741, -741, -21, -22,
+ -23, -138, -741, -32, -35, -298, -741, -741, -297, -33,
+ -741, -37, -741, -311, -49, -51, -211, -270, -293, -53,
+ -54, -38, -212, -270, -728, -278, -292, -292, -714, -715,
+ -287, -438, -716, -717, -718, -715, -714, -287, -437, -439,
+ -716, -718, -741, -553, -741, -383, -384, -686, -728, -702,
+ -702, -642, -643, -645, -645, -645, -659, -661, -662, -663,
+ -664, -665, -666, -667, -668, -669, -741, -671, -673, -675,
+ -680, -682, -683, -684, -691, -693, -694, -696, -697, -698,
+ -700, -741, -741, -741, -48, -219, -55, -728, -331, -741,
+ -741, -741, -277, -321, -741, -741, -741, -741, -741, -741,
+ -741, -220, -221, -226, -227, -228, -229, -230, -231, -235,
+ -236, -237, -238, -240, -241, -242, -243, -244, -247, -248,
+ -249, -250, -728, -263, -67, -728, -449, -287, -714, -715,
+ -73, -77, -661, -728, -292, -728, -288, -447, -449, -728,
+ -326, -283, -741, -284, -741, -289, -741, -294, -741, -710,
+ -713, -12, -727, -16, -18, -728, -88, -319, -104, -93,
+ -741, -728, -277, -741, -741, -114, -741, -636, -604, -741,
+ -100, -105, -741, -741, -741, -741, -264, -741, -328, -741,
+ -728, -741, -267, -735, -734, -269, -735, -322, -323, -706,
+ -13, -361, -362, -13, -741, -741, -741, -741, -741, -741,
+ -277, -741, -741, -321, -63, -125, -126, -127, -741, -741,
+ -277, -344, -630, -741, -13, -420, -660, -423, -566, -586,
+ -591, -741, -593, -569, -588, -741, -590, -571, -741, -574,
+ -741, -576, -579, -741, -580, -741, -602, -10, -20, -741,
+ -30, -741, -301, -741, -741, -277, -741, -741, -741, -741,
+ -442, -741, -279, -281, -741, -741, -78, -276, -435, -741,
+ -741, -80, -436, -44, -254, -740, -740, -350, -522, -685,
+ -635, -741, -640, -641, -741, -741, -652, -741, -655, -741,
+ -657, -741, -741, -372, -741, -374, -376, -379, -382, -728,
+ -674, -695, -699, -638, -46, -256, -351, -330, -730, -714,
+ -715, -714, -715, -728, -741, -741, -58, -463, -466, -467,
+ -468, -469, -471, -473, -476, -477, -532, -728, -489, -492,
+ -502, -506, -511, -513, -514, -517, -518, -585, -521, -523,
+ -524, -525, -530, -531, -741, -741, -535, -536, -537, -538,
+ -539, -540, -541, -542, -543, -544, -545, -741, -741, -551,
+ -60, -741, -741, -704, -741, -450, -72, -431, -447, -272,
+ -279, -274, -741, -409, -741, -325, -292, -291, -295, -741,
+ -708, -709, -741, -15, -90, -741, -96, -102, -728, -714,
+ -715, -275, -719, -113, -741, -98, -741, -218, -232, -252,
+ -741, -314, -316, -318, -733, -740, -363, -740, -64, -364,
+ -365, -338, -339, -741, -741, -455, -341, -741, -728, -714,
+ -715, -719, -320, -13, -125, -126, -129, -728, -13, -741,
+ -346, -741, -741, -728, -592, -595, -596, -597, -598, -13,
+ -570, -573, -575, -578, -582, -584, -139, -34, -299, -741,
+ -728, -714, -715, -715, -714, -50, -271, -741, -731, -292,
+ -40, -214, -41, -215, -79, -42, -217, -43, -216, -81,
+ -741, -741, -740, -368, -13, -554, -740, -555, -556, -702,
+ -681, -686, -701, -644, -645, -645, -672, -645, -645, -692,
+ -645, -669, -386, -687, -728, -741, -741, -381, -670, -741,
+ -741, -741, -741, -741, -741, -442, -464, -741, -741, -474,
+ -475, -741, -741, -741, -494, -728, -728, -488, -495, -499,
+ -741, -741, -491, -741, -741, -741, -505, -512, -516, -741,
+ -520, -528, -529, -533, -534, -546, -547, -741, -609, -610,
+ -611, -126, -549, -741, -68, -429, -409, -433, -432, -741,
+ -728, -444, -410, -728, -13, -446, -285, -296, -712, -94,
+ -442, -106, -728, -268, -741, -366, -741, -741, -340, -342,
+ -741, -741, -13, -442, -741, -442, -741, -741, -13, -349,
+ -421, -424, -426, -413, -741, -741, -300, -442, -39, -213,
+ -280, -45, -255, -11, -13, -560, -369, -741, -741, -558,
+ -639, -741, -648, -741, -650, -741, -653, -741, -656, -658,
+ -373, -375, -377, -380, -47, -257, -741, -465, -502, -470,
+ -472, -481, -485, -728, -728, -728, -728, -728, -728, -550,
+ -486, -487, -509, -496, -497, -500, -728, -585, -732, -728,
+ -503, -507, -510, -515, -519, -526, -527, -741, -253, -13,
+ -74, -273, -702, -702, -390, -392, -392, -392, -408, -741,
+ -728, -669, -677, -678, -689, -448, -329, -336, -741, -337,
+ -741, -460, -295, -740, -343, -345, -631, -741, -13, -13,
+ -741, -422, -594, -559, -13, -624, -625, -741, -741, -311,
+ -557, -645, -645, -645, -645, -741, -741, -741, -478, -479,
+ -480, -482, -483, -484, -501, -741, -490, -741, -493, -741,
+ -548, -451, -741, -388, -389, -393, -399, -401, -741, -404,
+ -741, -406, -411, -741, -741, -676, -741, -13, -456, -741,
+ -741, -452, -453, -454, -347, -741, -741, -728, -415, -417,
+ -418, -553, -277, -741, -741, -321, -741, -646, -649, -651,
+ -654, -378, -503, -498, -504, -508, -702, -679, -391, -392,
+ -392, -392, -392, -690, -392, -412, -688, -741, -321, -740,
+ -13, -461, -462, -425, -427, -414, -741, -552, -728, -714,
+ -715, -719, -320, -645, -741, -387, -741, -396, -741, -398,
+ -741, -402, -741, -405, -407, -320, -719, -367, -740, -416,
+ -442, -647, -392, -392, -392, -392, -457, -458, -459, -741,
+ -394, -397, -400, -403, -392, -395 ]
+
+clist = [
+'44,225,301,127,284,44,411,141,141,340,232,232,303,285,382,356,356,695',
+'418,620,623,628,834,141,297,463,463,318,318,318,384,385,702,703,389',
+'573,44,344,344,637,136,217,495,495,454,309,313,565,712,909,241,892,356',
+'356,356,387,388,1033,375,474,713,144,144,451,44,513,984,706,708,710',
+'320,320,320,127,393,297,297,514,1031,899,8,438,439,486,486,8,792,236',
+'421,422,423,424,906,460,467,736,780,134,366,942,739,739,463,377,380',
+'905,336,907,445,302,124,445,974,128,719,612,615,561,338,619,478,511',
+'44,600,1038,445,563,1004,305,312,314,44,359,44,4,1183,1054,758,758,935',
+'1076,936,123,800,373,529,784,383,383,406,408,383,1158,316,329,330,902',
+'1160,794,902,953,954,18,1045,1048,658,660,18,597,597,557,1078,573,1056',
+'286,1032,782,797,1157,797,644,998,645,987,242,800,1000,409,852,427,434',
+'1098,1060,1099,242,242,242,787,18,345,345,609,8,1183,556,383,383,383',
+'383,229,235,425,390,8,567,568,44,318,495,17,966,1151,1090,471,17,520',
+'18,1226,44,990,419,242,242,1190,44,242,394,404,404,461,452,578,232,232',
+'399,433,444,1079,1219,444,848,44,800,1160,515,17,1171,820,833,486,216',
+'1039,1040,444,931,932,374,426,941,303,944,654,656,659,659,846,610,372',
+'713,1031,1,1062,917,17,18,1069,1063,797,797,242,242,242,242,18,803,18',
+'647,449,450,318,318,1013,1179,641,397,956,896,969,318,901,1017,410,412',
+'413,516,517,414,356,1037,236,463,463,788,1043,1046,1044,1047,1174,593',
+'127,601,44,914,415,416,44,356,417,854,344,44,17,733,320,859,624,603',
+'1065,1066,849,17,320,17,806,1143,760,760,379,344,298,904,2,815,909,1172',
+'309,554,319,319,319,44,313,1173,1077,669,555,900,631,18,242,442,242',
+'242,442,242,44,44,127,460,467,18,1177,369,463,463,797,18,442,242,242',
+'376,607,530,463,463,336,378,1126,598,828,336,583,808,18,906,962,1136',
+'585,737,737,236,1111,591,584,141,676,566,1080,1074,,1217,463,463,589',
+'569,17,582,17,463,463,17,527,528,,,,,17,,1152,838,,1020,17,17,495,,668',
+',242,847,811,383,,,693,242,242,581,,17,811,992,851,687,242,463,463,144',
+'713,713,692,,643,,,,,1022,1024,,1026,1028,18,1029,870,486,18,884,811',
+',345,18,889,,724,339,811,,723,1176,976,,,495,318,495,862,471,862,345',
+',906,,880,882,627,774,774,885,887,970,18,853,461,1180,,,1181,758,758',
+'515,,452,460,467,242,18,18,758,17,,437,437,17,758,1091,686,897,17,601',
+'739,445,983,691,,356,242,979,601,1049,687,445,445,1227,356,,445,445',
+'800,44,,,,,318,,902,344,17,1074,471,,1074,976,1074,,344,758,906,,471',
+',,17,17,1222,461,796,,,,,1228,,797,843,461,44,817,,44,829,318,,1133',
+'1134,,,471,,,242,318,1144,471,934,,,564,319,850,44,,948,461,,,319,824',
+',,1104,461,786,,,,,,,1074,,1074,,1074,141,1074,318,44,,,242,949,471',
+',44,996,,713,713,,242,,1074,,432,898,,,461,,,,,1167,1168,1169,1170,866',
+'444,881,883,,,1197,886,888,,,444,444,,,,444,444,1008,879,,144,339,,1147',
+'1153,1148,,,,1205,,908,968,910,,,1053,,,,901,238,18,1061,,774,,,,867',
+'345,,242,774,,,875,760,760,345,284,967,774,774,,445,,760,,964,,371,',
+'760,,601,,,,141,18,356,1081,18,,,981,1221,,,242,,356,,,,,,,17,242,,',
+'344,18,339,,,997,,339,,,,344,934,760,,,,934,934,,,,687,879,1097,692',
+',495,18,,1059,442,242,,17,18,,17,44,,,442,442,44,,,442,442,,,,,625,626',
+'44,,,,17,,,,,,,,,,,381,,,,,1082,,737,,,,1015,,,,1019,17,,,17,44,,1009',
+'17,982,,1131,,,17,17,444,1073,,17,17,,,,,,,,1061,1067,,,,,,,1061,774',
+'383,774,1175,1156,774,774,,,,,,774,,881,883,888,886,774,774,1081,1088',
+',1081,,774,774,,,,,,,,680,,,,837,463,463,345,,,,,,,44,1127,,,345,,,',
+'242,,1198,,,,,463,774,,44,,,,356,1096,44,1075,,,,,1175,18,,,,,18,242',
+',,44,,,1081,1106,,,18,,,,435,448,,,,,437,,811,,383,,,1082,442,,1082',
+',,1082,,1082,1112,,1113,,1114,,,,1009,18,,,,356,,17,,383,,,17,1073,44',
+'596,1073,,1073,,,,,17,,,,297,,,,,,,,825,,1163,827,611,,17,,44,44,,,',
+',44,,,,,,1191,1192,1082,17,1082,,1082,774,1082,242,,,356,,,774,,,575',
+'774,577,,,579,580,1082,18,,,1073,,1073,,1073,297,1073,,44,242,,,34,',
+',18,,34,318,,,18,,1073,471,1182,,1184,,,,,,,34,681,,18,,,461,1107,,',
+'34,34,34,471,34,,,44,,1203,17,,,,,,,,,,,774,,,,,,,17,,,,34,,17,,,34',
+'34,,,34,,,383,383,,,18,1223,17,1224,,1225,,,925,,,672,,1145,,,,,,,,',
+'937,,1234,,,,,18,18,20,,,,18,20,,,,,781,34,,,,,34,34,34,34,34,,34,,',
+',17,,,,,,,,,,20,353,353,,,,,720,1186,,,18,,242,242,994,980,,,17,17,',
+',,,17,242,,20,,,1005,,,,,,,353,353,353,,,15,,,993,,15,,,,,,18,995,,',
+',,,,,,,,1016,,17,34,34,34,34,34,34,34,,,1007,15,798,34,381,,801,,20',
+'34,34,34,34,,,,,20,,20,,,,,,,34,,,15,,,,17,,,,,,398,,,,798,,,381,,,',
+',,,,,,,,,448,1042,,,,,1050,1051,,1085,,,,34,,,,,681,,34,34,,,,,,1093',
+'15,34,,,681,943,,,,15,,15,1137,1139,1141,20,868,20,,34,20,1103,,34,',
+'798,381,20,34,,,,,20,20,,,,,895,,,,,,,,,,,20,,,,,913,,,34,,,,,,,681',
+',,,,,,34,34,34,,,,,,,,,,,,,,,1121,1122,1123,,34,15,681,440,,,440,,,',
+',681,1155,15,,,,1003,1161,15,440,,,1207,1209,1211,1213,,1214,,,,,,681',
+',15,20,,,798,20,,,,353,20,,,977,,,978,,,,,,,,,1189,,,353,34,1230,1231',
+'1232,1233,,,,,,,20,,1235,,,,,,,,,,,,,20,20,,681,,,,,681,681,,,,1218',
+'34,,,,,,,,,,34,15,,,1006,15,,,,,15,,,,,,,,,,,,1003,,,,,,,,,,,1220,,',
+',,,,15,,,,,,,,,,,,,,,15,15,,,,34,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,',
+',681,681,681,34,,,34,,,,943,,,34,,,,,,,,,518,34,,,,34,,,,1092,,,1003',
+',,,,,,,,,,,,,,,381,,,,34,,,34,34,,,34,,,,,,34,34,21,,,34,34,21,,20,',
+',,,,,,353,,,,,,,,,353,,,,,570,,,,,,,21,347,347,,,,1195,,,20,,,20,,,',
+'586,,,,,,,,,,,,21,,,,,20,,,,,396,405,405,,,,,,,681,,,15,,,,,,,,,,20',
+',,20,,,,20,,,,,,20,20,,,,20,20,,,,,,,21,,15,,,15,,,,21,,21,34,,,,773',
+'773,,,,,,,,,15,,,,,,,,,34,,,,,34,34,,,,,,,,,,34,,15,,,440,,,,15,,,,',
+',440,440,,34,700,440,440,,,,,,,,,,,,,,34,,,,,,,,21,,443,,,443,,,,,,',
+'21,,353,727,766,766,21,443,,,,,,353,,,,,,,,,,21,,,,,,,,,,,,,,,,,20,783',
+',34,,20,,,,789,,791,,,,795,20,,,,34,,,,,,,,,,,804,34,,20,,,807,34,,',
+',,,34,,,,,,,20,,,,,822,,,,34,,,21,,,,21,,,,347,21,,,,,,,15,,,,,15,,',
+',773,,347,,,,,15,773,,19,,,,21,19,,773,773,,,,,,,440,,34,,21,21,,,,',
+',,,,,,,15,20,,,19,352,352,,,,,,,,34,34,,,,20,34,,,,,20,,,,,,,19,,,918',
+',,,,,20,352,352,352,353,,,,,,,766,,,,,,,,766,,,34,,34,34,,,766,766,',
+',,,,772,772,34,,15,,,,,,,,,,19,,,,,,20,,15,19,,19,,,15,,34,,,353,,,',
+',,,,,,,15,,,,1110,20,20,,,767,767,20,,,,,,773,,773,,,773,773,,,,,,773',
+',,,,,773,773,,,,,,773,773,,,,,,,,353,,,20,15,,,771,771,,,21,,19,,19',
+',,19,347,,,,,,19,,,347,,773,19,19,15,15,,,,,15,,,,,,,20,,19,21,,,21',
+',,,,,,1030,766,,766,,,766,766,,,,,,766,21,1041,,,,766,766,858,,15,,',
+'766,766,,,,,,,,,,,43,,,21,,43,443,,,,21,,,,,,443,443,1071,,,443,443',
+',296,,772,766,15,,1086,19,,,772,19,43,343,343,352,19,,,772,772,,,,,',
+',,,,,,,,352,,773,,,,43,,,,773,,19,,773,,392,296,296,,,767,,,,,,19,19',
+'767,,,,1118,1119,1120,,,767,767,,,,,,,,,,1128,,,,,,,,,,,,,,,43,,,,,',
+'771,770,770,43,,43,,,771,347,,,,,,,,771,771,773,347,,,,,,766,,,,,,,',
+'766,,,,766,,,,,,,,,21,,,,,21,,,,,,,,,,,21,,,,,,,,,,,,,,772,,772,,443',
+'772,772,,,,,43,772,,,,,,772,772,,21,,43,,772,772,775,775,43,,,,,,,766',
+',,,,,,,,,43,,,,,,,767,,767,,,767,767,,,,,772,767,,,,,,767,767,,,19,',
+',767,767,,,,352,,,,,,,,,352,,,,,,,,,21,771,,771,,,771,771,,,,,19,771',
+',19,767,,21,771,771,,,,21,43,771,771,,43,,,,343,43,,19,,,,21,770,,,1109',
+',,,,770,,,343,,,,,,770,770,,,,19,43,771,19,,,,19,,,,,,19,19,,43,43,19',
+'19,,,,,,,,772,,,,,21,,,772,,,,772,,,,,,405,,,,,,,,,,,,,,,,21,21,,,,',
+'21,,,,,,,,,,,,,767,775,,,,,,,767,775,,,767,,,,,,775,775,,,,,,768,768',
+'405,,,21,,,,772,,,,,,,,,,,,,,,771,,,,,352,,,771,,,,771,,,,352,,,,,,',
+',21,,,,770,,770,,,770,770,,31,,767,,770,31,,19,,,770,770,19,,,,,770',
+'770,,,,31,19,,,,,,,,,31,31,31,,31,,,,,19,,,,,43,,,,,771,,,343,,770,',
+'19,,,,,343,31,,,,,31,31,,,31,,,,,,,,,,,43,,,43,,,,,,,,775,,775,,,775',
+'775,,,,,,775,43,,,,,775,775,,,,,,775,775,31,,,,,31,31,31,31,31,,31,',
+'43,,,19,,,,43,,,,,,,,,,,,,,19,,768,775,,,19,,,,768,,,,,,,,,768,768,',
+'19,,,,352,770,769,769,,,,,,770,,,,770,,,,,,,,,,,,,,,,,,,,,31,31,31,31',
+'31,31,31,,,,,,31,,,,,19,31,31,31,31,,,,,,,,,352,,,,,31,,,,,,,,,,,19',
+'19,,,,,19,343,770,,,,,,,,,,343,,,,,,775,,,,,,,,775,,,31,775,,,,,,31',
+'31,,43,352,,,19,43,31,,,,,,,,,,43,,,,,,,,31,,,,31,,768,,768,31,,768',
+'768,,,,,,768,,,,,19,768,768,,43,,,,768,768,,,,,,,31,,,775,,,,,,,,,,',
+'31,31,31,,,,,,,,,,,,,,,768,769,,,31,,,,,769,,,,,,,,,769,769,,,,,,,,',
+',,,,,,,,,43,,,,,,,,,,,,,,,,,,43,,,,,,43,,,249,,,,,31,,,,,317,317,317',
+'43,,,,1105,,,,,364,365,,367,368,,370,,,,,,,,,,,,,,,317,317,31,,,,,,',
+',,,31,,,,,,,,768,,,,,43,,,768,,,,768,,,,,,296,,,,,,,,,,,,,,,,43,43,',
+',,,43,,,,,,,,,,,,31,769,,769,,,769,769,,,31,,,769,,,,,,769,769,,,,,',
+'769,769,296,,,43,,,,768,,,31,,,31,,,,,,,31,,,,,,,,,,31,,,,31,,,769,',
+',,,,,,,43,,,,,,317,447,,,453,317,,,,31,,,31,31,,,31,,453,,,,31,31,,',
+',31,31,,,249,,,,,,,531,532,533,534,535,536,537,538,539,540,541,542,543',
+'544,545,546,547,548,549,550,551,552,,,,,553,,,,,,,,,,,,,,,,,,,,,,,317',
+'317,,,,,,,,317,,,,,,,317,,317,,,317,317,,,769,,,,,,,,769,,,,769,,,,',
+',,,,,,,,,,,,,,,,,,,,,606,,,,,,,,31,,,,,,,,,,,,,,,,,,,,,,,31,,,,,31,31',
+',,,,,,,,,31,,769,,,,,,,,,,,,,,,,31,,317,,,,,,,,,,,,,,,31,,,,,,,,,,,',
+',,,,,,,,,694,,,,,,,,,,,,,,,,,,,,,,,,,,,317,,,,,,,,,,,,,725,,31,,,,,',
+',,317,,453,453,453,,,,,31,,,,,,,,,,,,31,,,,,,31,,,,,,31,,,,,,,365,,',
+',,,,,,31,317,,317,,317,,,,,,,,,,,,,,,,317,,,,,,,,,,453,,,818,,819,,',
+',,,317,,,317,,,,,,,,,,31,,,317,317,,,,,,,,,,317,,,,,,,,,,,,,,,31,31',
+',,,,31,,,,,,,,,,,,317,453,317,,,,876,,,317,317,453,453,,,,453,453,,',
+',,,317,,,,,,,,31,,31,31,,,,,317,,,,,,,31,,,,,,,,,,,,,,,694,725,,,,,',
+',,,,,,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,317,,,,,,,,,317,',
+',317,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,317,,,,,,,,453,,,,,,,,,,,,,1011,1012,,,,,,,,,,,,,,,,,,,,,,,,,,,,1034',
+'1035,453,453,453,453,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1068,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,317,,,,,,,,,,,,,,,,,,,317,,,,,,,,,,,,,,,,,,,',
+',,,,,,453,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,317' ]
+ racc_goto_table = arr = ::Array.new(4637, 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 = [
+'72,33,158,117,48,72,198,75,75,68,87,87,33,46,107,82,82,12,198,110,110',
+'112,113,75,72,61,61,36,36,36,19,19,139,139,19,94,72,72,72,73,17,17,230',
+'230,31,91,91,92,135,235,22,13,82,82,82,44,44,130,87,10,128,77,77,28',
+'72,10,111,228,228,228,90,90,90,117,72,72,72,28,127,133,8,24,24,225,225',
+'8,58,119,19,19,19,19,231,55,55,41,41,9,80,187,177,177,61,90,90,146,64',
+'146,20,51,7,20,147,6,129,89,89,57,65,89,157,157,72,70,192,20,31,149',
+'56,56,56,72,69,72,2,236,192,200,200,175,145,176,5,239,8,42,161,26,26',
+'74,74,26,151,63,63,63,140,152,161,140,202,202,30,178,178,214,214,30',
+'224,224,55,136,94,178,50,131,52,95,150,95,126,125,153,13,30,239,154',
+'155,156,27,25,159,193,160,30,30,30,93,30,30,30,10,8,236,162,26,26,26',
+'26,35,35,8,5,8,164,165,72,36,230,29,168,169,170,75,29,33,30,171,72,172',
+'6,30,30,173,72,30,30,30,30,91,79,198,87,87,21,22,22,149,151,22,124,72',
+'239,152,79,29,130,123,112,225,18,180,182,22,183,184,122,2,188,33,189',
+'215,215,215,215,73,121,120,128,127,1,195,128,29,30,147,196,95,95,30',
+'30,30,30,30,16,30,157,26,26,36,36,14,145,116,114,205,206,58,36,200,207',
+'210,211,212,26,26,213,82,175,119,61,61,60,175,175,176,176,192,33,117',
+'68,72,129,216,217,72,82,218,219,72,72,29,31,90,220,19,33,202,202,223',
+'29,90,29,70,149,201,201,106,72,105,229,3,70,235,193,91,51,88,88,88,72',
+'91,193,146,78,26,233,33,30,30,30,30,30,30,30,72,72,117,55,55,30,234',
+'83,61,61,95,30,30,30,30,88,84,43,61,61,64,86,187,80,45,64,8,31,30,231',
+'73,142,65,174,174,119,146,65,9,75,33,63,143,140,,111,61,61,69,63,29',
+'7,29,61,61,29,35,35,,,,,29,,13,31,,139,29,29,230,,17,,30,31,55,26,,',
+'36,30,30,5,,29,55,110,10,91,30,61,61,77,128,128,91,,26,,,,,228,228,',
+'228,228,30,228,31,225,30,57,55,,30,30,57,,36,11,55,,117,133,94,,,230',
+'36,230,215,75,215,30,,231,,28,28,5,72,72,28,28,92,30,157,91,146,,,146',
+'200,200,79,,79,55,55,30,30,30,200,29,,88,88,29,200,41,56,24,29,68,177',
+'20,89,56,,82,30,70,68,73,91,20,20,13,82,,20,20,239,72,,,,,36,,140,72',
+'29,140,75,,140,94,140,,72,200,231,,75,,,29,29,146,91,90,,,,,113,,95',
+'44,91,72,79,,72,117,36,,139,139,,,75,,,30,36,135,75,174,,,88,88,117',
+'72,,174,91,,,88,90,,,110,91,56,,,,,,,140,,140,,140,75,140,36,72,,,30',
+'198,75,,72,10,,128,128,,30,,140,,11,87,,,91,,,,,228,228,228,228,17,22',
+'79,79,,,12,79,79,,,22,22,,,,22,22,28,90,,77,11,,110,112,110,,,,139,',
+'144,107,144,,,191,,,,200,40,30,191,,72,,,,8,30,,30,72,,,8,201,201,30',
+'48,158,72,72,,20,,201,,46,,40,,201,,68,,,,75,30,82,230,30,,,68,228,',
+',30,,82,,,,,,,29,30,,,72,30,11,,,19,,11,,,,72,174,201,,,,174,174,,,',
+'91,90,10,91,,230,30,,174,30,30,,29,30,,29,72,,,30,30,72,,,30,30,,,,',
+'11,11,72,,,,29,,,,,,,,,,,85,,,,,232,,174,,,,87,,,,87,29,,,29,72,,79',
+'29,26,,10,,,29,29,22,132,,29,29,,,,,,,,191,19,,,,,,,191,72,26,72,191',
+'10,72,72,,,,,,72,,79,79,79,79,72,72,230,19,,230,,72,72,,,,,,,,32,,,',
+'88,61,61,30,,,,,,,72,198,,,30,,,,30,,31,,,,,61,72,,72,,,,82,117,72,144',
+',,,,191,30,,,,,30,30,,,72,,,230,72,,,30,,,,85,85,,,,,88,,55,,26,,,232',
+'30,,232,,,232,,232,144,,144,,144,,,,79,30,,,,82,,29,,26,,,29,132,72',
+'40,132,,132,,,,,29,,,,72,,,,,,,,11,,33,11,40,,29,,72,72,,,,,72,,,,,',
+'19,19,232,29,232,,232,72,232,30,,,82,,,72,,,85,72,85,,,85,85,232,30',
+',,132,,132,,132,72,132,,72,30,,,62,,,30,,62,36,,,30,,132,75,144,,144',
+',,,,,,62,40,,30,,,91,30,,,62,62,62,75,62,,,72,,144,29,,,,,,,,,,,72,',
+',,,,,29,,,,62,,29,,,62,62,,,62,,,26,26,,,30,144,29,144,,144,,,32,,,85',
+',30,,,,,,,,,32,,144,,,,,30,30,38,,,,30,38,,,,,40,62,,,,,62,62,62,62',
+'62,,62,,,,29,,,,,,,,,,38,38,38,,,,,85,30,,,30,,30,30,11,32,,,29,29,',
+',,,29,30,,38,,,11,,,,,,,38,38,38,,,23,,,32,,23,,,,,,30,32,,,,,,,,,,',
+'11,,29,62,62,62,62,62,62,62,,,32,23,85,62,85,,85,,38,62,62,62,62,,,',
+',38,,38,,,,,,,62,,,23,,,,29,,,,,,23,,,,85,,,85,,,,,,,,,,,,,85,32,,,',
+',32,32,,11,,,,62,,,,,40,,62,62,,,,,,11,23,62,,,40,40,,,,23,,23,141,141',
+'141,38,85,38,,62,38,11,,62,,85,85,38,62,,,,,38,38,,,,,85,,,,,,,,,,,38',
+',,,,85,,,62,,,,,,,40,,,,,,,62,62,62,,,,,,,,,,,,,,,32,32,32,,62,23,40',
+'23,,,23,,,,,40,11,23,,,,40,11,23,23,,,141,141,141,141,,141,,,,,,40,',
+'23,38,,,85,38,,,,38,38,,,85,,,85,,,,,,,,,11,,,38,62,141,141,141,141',
+',,,,,,38,,141,,,,,,,,,,,,,38,38,,40,,,,,40,40,,,,11,62,,,,,,,,,,62,23',
+',,85,23,,,,,23,,,,,,,,,,,,40,,,,,,,,,,,32,,,,,,,23,,,,,,,,,,,,,,,23',
+'23,,,,62,,,,,,,,,,62,,,,,,,,,,,,,,,,,,,,,,,,,40,40,40,62,,,62,,,,40',
+',,62,,,,,,,,,66,62,,,,62,,,,85,,,40,,,,,,,,,,,,,,,,85,,,,62,,,62,62',
+',,62,,,,,,62,62,39,,,62,62,39,,38,,,,,,,,38,,,,,,,,,38,,,,,66,,,,,,',
+'39,39,39,,,,40,,,38,,,38,,,,66,,,,,,,,,,,,39,,,,,38,,,,,39,39,39,,,',
+',,,40,,,23,,,,,,,,,,38,,,38,,,,38,,,,,,38,38,,,,38,38,,,,,,,39,,23,',
+',23,,,,39,,39,62,,,,104,104,,,,,,,,,23,,,,,,,,,62,,,,,62,62,,,,,,,,',
+',62,,23,,,23,,,,23,,,,,,23,23,,62,66,23,23,,,,,,,,,,,,,,62,,,,,,,,39',
+',39,,,39,,,,,,,39,,38,66,97,97,39,39,,,,,,38,,,,,,,,,,39,,,,,,,,,,,',
+',,,,,38,66,,62,,38,,,,66,,66,,,,66,38,,,,62,,,,,,,,,,,66,62,,38,,,66',
+'62,,,,,,62,,,,,,,38,,,,,66,,,,62,,,39,,,,39,,,,39,39,,,,,,,23,,,,,23',
+',,,104,,39,,,,,23,104,,34,,,,39,34,,104,104,,,,,,,23,,62,,39,39,,,,',
+',,,,,,,23,38,,,34,34,34,,,,,,,,62,62,,,,38,62,,,,,38,,,,,,,34,,,66,',
+',,,,38,34,34,34,38,,,,,,,97,,,,,,,,97,,,62,,62,62,,,97,97,,,,,,103,103',
+'62,,23,,,,,,,,,,34,,,,,,38,,23,34,,34,,,23,,62,,,38,,,,,,,,,,,23,,,',
+'23,38,38,,,98,98,38,,,,,,104,,104,,,104,104,,,,,,104,,,,,,104,104,,',
+',,,104,104,,,,,,,,38,,,38,23,,,102,102,,,39,,34,,34,,,34,39,,,,,,34',
+',,39,,104,34,34,23,23,,,,,23,,,,,,,38,,34,39,,,39,,,,,,,66,97,,97,,',
+'97,97,,,,,,97,39,66,,,,97,97,39,,23,,,97,97,,,,,,,,,,,71,,,39,,71,39',
+',,,39,,,,,,39,39,66,,,39,39,,71,,103,97,23,,66,34,,,103,34,71,71,71',
+'34,34,,,103,103,,,,,,,,,,,,,,34,,104,,,,71,,,,104,,34,,104,,71,71,71',
+',,98,,,,,,34,34,98,,,,66,66,66,,,98,98,,,,,,,,,,66,,,,,,,,,,,,,,,71',
+',,,,,102,101,101,71,,71,,,102,39,,,,,,,,102,102,104,39,,,,,,97,,,,,',
+',,97,,,,97,,,,,,,,,39,,,,,39,,,,,,,,,,,39,,,,,,,,,,,,,,103,,103,,39',
+'103,103,,,,,71,103,,,,,,103,103,,39,,71,,103,103,109,109,71,,,,,,,97',
+',,,,,,,,,71,,,,,,,98,,98,,,98,98,,,,,103,98,,,,,,98,98,,,34,,,98,98',
+',,,34,,,,,,,,,34,,,,,,,,,39,102,,102,,,102,102,,,,,34,102,,34,98,,39',
+'102,102,,,,39,71,102,102,,71,,,,71,71,,34,,,,39,101,,,39,,,,,101,,,71',
+',,,,,101,101,,,,34,71,102,34,,,,34,,,,,,34,34,,71,71,34,34,,,,,,,,103',
+',,,,39,,,103,,,,103,,,,,,39,,,,,,,,,,,,,,,,39,39,,,,,39,,,,,,,,,,,,',
+'98,109,,,,,,,98,109,,,98,,,,,,109,109,,,,,,99,99,39,,,39,,,,103,,,,',
+',,,,,,,,,,102,,,,,34,,,102,,,,102,,,,34,,,,,,,,39,,,,101,,101,,,101',
+'101,,59,,98,,101,59,,34,,,101,101,34,,,,,101,101,,,,59,34,,,,,,,,,59',
+'59,59,,59,,,,,34,,,,,71,,,,,102,,,71,,101,,34,,,,,71,59,,,,,59,59,,',
+'59,,,,,,,,,,,71,,,71,,,,,,,,109,,109,,,109,109,,,,,,109,71,,,,,109,109',
+',,,,,109,109,59,,,,,59,59,59,59,59,,59,,71,,,34,,,,71,,,,,,,,,,,,,,34',
+',99,109,,,34,,,,99,,,,,,,,,99,99,,34,,,,34,101,100,100,,,,,,101,,,,101',
+',,,,,,,,,,,,,,,,,,,,59,59,59,59,59,59,59,,,,,,59,,,,,34,59,59,59,59',
+',,,,,,,,34,,,,,59,,,,,,,,,,,34,34,,,,,34,71,101,,,,,,,,,,71,,,,,,109',
+',,,,,,,109,,,59,109,,,,,,59,59,,71,34,,,34,71,59,,,,,,,,,,71,,,,,,,',
+'59,,,,59,,99,,99,59,,99,99,,,,,,99,,,,,34,99,99,,71,,,,99,99,,,,,,,59',
+',,109,,,,,,,,,,,59,59,59,,,,,,,,,,,,,,,99,100,,,59,,,,,100,,,,,,,,,100',
+'100,,,,,,,,,,,,,,,,,,71,,,,,,,,,,,,,,,,,,71,,,,,,71,,,37,,,,,59,,,,',
+'37,37,37,71,,,,71,,,,,37,37,,37,37,,37,,,,,,,,,,,,,,,37,37,59,,,,,,',
+',,,59,,,,,,,,99,,,,,71,,,99,,,,99,,,,,,71,,,,,,,,,,,,,,,,71,71,,,,,71',
+',,,,,,,,,,,59,100,,100,,,100,100,,,59,,,100,,,,,,100,100,,,,,,100,100',
+'71,,,71,,,,99,,,59,,,59,,,,,,,59,,,,,,,,,,59,,,,59,,,100,,,,,,,,,71',
+',,,,,37,37,,,37,37,,,,59,,,59,59,,,59,,37,,,,59,59,,,,59,59,,,37,,,',
+',,,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37',
+',,,,37,,,,,,,,,,,,,,,,,,,,,,,37,37,,,,,,,,37,,,,,,,37,,37,,,37,37,,',
+'100,,,,,,,,100,,,,100,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,59,,,,,,,,',
+',,,,,,,,,,,,,,59,,,,,59,59,,,,,,,,,,59,,100,,,,,,,,,,,,,,,,59,,37,,',
+',,,,,,,,,,,,59,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,,37,',
+',,,,,,,,,,,37,,59,,,,,,,,37,,37,37,37,,,,,59,,,,,,,,,,,,59,,,,,,59,',
+',,,,59,,,,,,,37,,,,,,,,,59,37,,37,,37,,,,,,,,,,,,,,,,37,,,,,,,,,,37',
+',,37,,37,,,,,,37,,,37,,,,,,,,,,59,,,37,37,,,,,,,,,,37,,,,,,,,,,,,,,',
+'59,59,,,,,59,,,,,,,,,,,,37,37,37,,,,37,,,37,37,37,37,,,,37,37,,,,,,37',
+',,,,,,,59,,59,59,,,,,37,,,,,,,59,,,,,,,,,,,,,,,37,37,,,,,,,,,,,,59,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,37,,,37,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,',
+'37,,,,,,,,,,,,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,37,37,37,37,37,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,37',
+',,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37' ]
+ racc_goto_check = arr = ::Array.new(4637, 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, 280, 132, 361, nil, 137, 106, 105, 78, 88,
+ -171, 468, -456, -644, -591, nil, -288, 30, 249, -41,
+ -112, 168, 26, 1337, -138, -29, 76, 53, -160, 217,
+ 160, -180, 504, -17, 2197, 190, -7, 3474, 1258, 1831,
+ 718, -434, -110, 146, -18, -215, -13, nil, -22, nil,
+ 148, 80, -378, nil, nil, -132, 97, -188, -481, 3031,
+ -238, -200, 1147, 119, 68, 80, 1547, nil, -30, 92,
+ -237, 2497, -2, -363, 72, -3, nil, 51, -57, 17,
+ 50, nil, -24, 341, 30, 804, 339, -9, 333, -261,
+ 36, 14, -259, -360, -285, -395, nil, 1536, 1831, 2444,
+ 2688, 2099, 1880, 1778, 1442, 333, 289, -55, nil, 2202,
+ -365, -759, -369, -605, 228, nil, -103, -2, nil, 67,
+ 212, -97, 200, -351, -391, -669, -228, -837, -436, -382,
+ -859, -740, -69, -622, nil, -447, -802, nil, nil, -447,
+ -545, 398, -659, -546, 24, -833, -600, -681, nil, -726,
+ -922, -948, -943, -227, -666, 102, -457, -113, -25, -810,
+ -809, -410, -96, nil, -96, -96, nil, nil, -565, -872,
+ -768, -991, -606, -915, -111, -608, -606, -429, -768, nil,
+ -666, nil, -666, -482, -481, nil, nil, -649, -480, -479,
+ nil, -202, -802, -753, nil, -666, -661, nil, -84, nil,
+ -392, -174, -604, nil, nil, -472, -390, -586, nil, nil,
+ 223, 219, 219, 221, -249, -141, 237, 237, 239, -313,
+ -308, nil, nil, -293, -184, -150, nil, nil, -416, -345,
+ -191, -613, -96, -325, -741, -658, -1003, nil, nil, -431 ]
+
+racc_goto_default = [
+ nil, nil, nil, nil, 5, nil, 6, 391, 334, nil,
+ nil, 473, nil, 985, nil, 331, 332, nil, nil, nil,
+ 13, 14, 22, 247, nil, nil, 16, nil, 441, 248,
+ 363, nil, nil, 639, 251, nil, 27, 25, 252, 246,
+ 519, nil, nil, nil, nil, nil, nil, 386, 143, 26,
+ nil, nil, nil, 28, 29, 814, nil, nil, nil, 351,
+ nil, 30, 348, 455, 37, nil, nil, 39, 42, 41,
+ nil, 243, 244, 403, nil, 464, 142, 87, nil, 446,
+ 103, 51, 54, 283, nil, 323, nil, 893, 456, nil,
+ 457, 469, 482, 688, 571, 321, 307, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, nil, 308, 69, 70,
+ nil, nil, nil, nil, nil, 77, nil, 621, 78, 230,
+ nil, nil, nil, nil, nil, nil, nil, 715, 494, nil,
+ 716, 717, 480, 475, 476, nil, 1178, 711, 1072, nil,
+ 481, nil, nil, nil, 483, nil, 485, nil, 972, nil,
+ nil, nil, 492, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 468, nil, nil, 793, 785, nil, nil,
+ nil, nil, nil, nil, 1052, nil, 738, 939, 740, 741,
+ 745, 742, 743, nil, nil, 744, 746, nil, nil, nil,
+ 938, 940, 750, nil, 752, 753, 754, 755, nil, 759,
+ 477, 503, 761, 762, 763, nil, nil, nil, 86, 88,
+ 89, nil, nil, nil, nil, 649, nil, nil, nil, nil,
+ nil, 99, 100, nil, 231, 903, 234, 479, nil, 484,
+ 911, 497, 499, 500, 1083, 504, 1084, 507, 510, 326 ]
+
+racc_reduce_table = [
+ 0, 0, :racc_error,
+ 0, 150, :_reduce_1,
+ 2, 148, :_reduce_2,
+ 2, 149, :_reduce_3,
+ 0, 151, :_reduce_4,
+ 1, 151, :_reduce_5,
+ 3, 151, :_reduce_6,
+ 2, 151, :_reduce_7,
+ 1, 153, :_reduce_none,
+ 2, 153, :_reduce_9,
+ 3, 156, :_reduce_10,
+ 4, 157, :_reduce_11,
+ 2, 158, :_reduce_12,
+ 0, 162, :_reduce_13,
+ 1, 162, :_reduce_14,
+ 3, 162, :_reduce_15,
+ 2, 162, :_reduce_16,
+ 1, 163, :_reduce_none,
+ 2, 163, :_reduce_18,
+ 0, 174, :_reduce_19,
+ 4, 155, :_reduce_20,
+ 3, 155, :_reduce_21,
+ 3, 155, :_reduce_22,
+ 3, 155, :_reduce_23,
+ 2, 155, :_reduce_24,
+ 3, 155, :_reduce_25,
+ 3, 155, :_reduce_26,
+ 3, 155, :_reduce_27,
+ 3, 155, :_reduce_28,
+ 3, 155, :_reduce_29,
+ 4, 155, :_reduce_30,
+ 1, 155, :_reduce_none,
+ 3, 155, :_reduce_32,
+ 3, 155, :_reduce_33,
+ 5, 155, :_reduce_34,
+ 3, 155, :_reduce_35,
+ 1, 155, :_reduce_none,
+ 3, 167, :_reduce_37,
+ 3, 167, :_reduce_38,
+ 6, 167, :_reduce_39,
+ 5, 167, :_reduce_40,
+ 5, 167, :_reduce_41,
+ 5, 167, :_reduce_42,
+ 5, 167, :_reduce_43,
+ 4, 167, :_reduce_44,
+ 6, 167, :_reduce_45,
+ 4, 167, :_reduce_46,
+ 6, 167, :_reduce_47,
+ 3, 167, :_reduce_48,
+ 1, 175, :_reduce_none,
+ 3, 175, :_reduce_50,
+ 1, 175, :_reduce_none,
+ 1, 173, :_reduce_none,
+ 3, 173, :_reduce_53,
+ 3, 173, :_reduce_54,
+ 3, 173, :_reduce_55,
+ 2, 173, :_reduce_56,
+ 0, 189, :_reduce_57,
+ 4, 173, :_reduce_58,
+ 0, 190, :_reduce_59,
+ 4, 173, :_reduce_60,
+ 1, 173, :_reduce_none,
+ 1, 166, :_reduce_none,
+ 0, 194, :_reduce_63,
+ 3, 191, :_reduce_64,
+ 1, 193, :_reduce_65,
+ 2, 181, :_reduce_66,
+ 0, 199, :_reduce_67,
+ 5, 185, :_reduce_68,
+ 1, 169, :_reduce_none,
+ 1, 169, :_reduce_none,
+ 1, 200, :_reduce_none,
+ 4, 200, :_reduce_72,
+ 0, 207, :_reduce_73,
+ 4, 204, :_reduce_74,
+ 1, 206, :_reduce_none,
+ 2, 183, :_reduce_76,
+ 3, 183, :_reduce_77,
+ 4, 183, :_reduce_78,
+ 5, 183, :_reduce_79,
+ 4, 183, :_reduce_80,
+ 5, 183, :_reduce_81,
+ 2, 183, :_reduce_82,
+ 2, 183, :_reduce_83,
+ 2, 183, :_reduce_84,
+ 2, 183, :_reduce_85,
+ 2, 183, :_reduce_86,
+ 1, 168, :_reduce_87,
+ 3, 168, :_reduce_88,
+ 1, 212, :_reduce_89,
+ 3, 212, :_reduce_90,
+ 1, 211, :_reduce_none,
+ 2, 211, :_reduce_92,
+ 3, 211, :_reduce_93,
+ 5, 211, :_reduce_94,
+ 2, 211, :_reduce_95,
+ 4, 211, :_reduce_96,
+ 2, 211, :_reduce_97,
+ 4, 211, :_reduce_98,
+ 1, 211, :_reduce_99,
+ 3, 211, :_reduce_100,
+ 1, 215, :_reduce_none,
+ 3, 215, :_reduce_102,
+ 2, 214, :_reduce_103,
+ 3, 214, :_reduce_104,
+ 1, 217, :_reduce_105,
+ 3, 217, :_reduce_106,
+ 1, 216, :_reduce_107,
+ 1, 216, :_reduce_108,
+ 4, 216, :_reduce_109,
+ 3, 216, :_reduce_110,
+ 3, 216, :_reduce_111,
+ 3, 216, :_reduce_112,
+ 3, 216, :_reduce_113,
+ 2, 216, :_reduce_114,
+ 1, 216, :_reduce_115,
+ 1, 170, :_reduce_116,
+ 1, 170, :_reduce_117,
+ 4, 170, :_reduce_118,
+ 3, 170, :_reduce_119,
+ 3, 170, :_reduce_120,
+ 3, 170, :_reduce_121,
+ 3, 170, :_reduce_122,
+ 2, 170, :_reduce_123,
+ 1, 170, :_reduce_124,
+ 1, 220, :_reduce_125,
+ 1, 220, :_reduce_none,
+ 2, 221, :_reduce_127,
+ 1, 221, :_reduce_128,
+ 3, 221, :_reduce_129,
+ 1, 195, :_reduce_none,
+ 1, 195, :_reduce_none,
+ 1, 195, :_reduce_none,
+ 1, 195, :_reduce_none,
+ 1, 195, :_reduce_none,
+ 1, 164, :_reduce_135,
+ 1, 164, :_reduce_none,
+ 1, 165, :_reduce_137,
+ 0, 225, :_reduce_138,
+ 4, 165, :_reduce_139,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 1, 223, :_reduce_none,
+ 3, 184, :_reduce_211,
+ 3, 184, :_reduce_212,
+ 6, 184, :_reduce_213,
+ 5, 184, :_reduce_214,
+ 5, 184, :_reduce_215,
+ 5, 184, :_reduce_216,
+ 5, 184, :_reduce_217,
+ 4, 184, :_reduce_218,
+ 3, 184, :_reduce_219,
+ 3, 184, :_reduce_220,
+ 3, 184, :_reduce_221,
+ 2, 184, :_reduce_222,
+ 2, 184, :_reduce_223,
+ 2, 184, :_reduce_224,
+ 2, 184, :_reduce_225,
+ 3, 184, :_reduce_226,
+ 3, 184, :_reduce_227,
+ 3, 184, :_reduce_228,
+ 3, 184, :_reduce_229,
+ 3, 184, :_reduce_230,
+ 3, 184, :_reduce_231,
+ 4, 184, :_reduce_232,
+ 2, 184, :_reduce_233,
+ 2, 184, :_reduce_234,
+ 3, 184, :_reduce_235,
+ 3, 184, :_reduce_236,
+ 3, 184, :_reduce_237,
+ 3, 184, :_reduce_238,
+ 1, 184, :_reduce_none,
+ 3, 184, :_reduce_240,
+ 3, 184, :_reduce_241,
+ 3, 184, :_reduce_242,
+ 3, 184, :_reduce_243,
+ 3, 184, :_reduce_244,
+ 2, 184, :_reduce_245,
+ 2, 184, :_reduce_246,
+ 3, 184, :_reduce_247,
+ 3, 184, :_reduce_248,
+ 3, 184, :_reduce_249,
+ 3, 184, :_reduce_250,
+ 0, 231, :_reduce_251,
+ 4, 184, :_reduce_252,
+ 6, 184, :_reduce_253,
+ 4, 184, :_reduce_254,
+ 6, 184, :_reduce_255,
+ 4, 184, :_reduce_256,
+ 6, 184, :_reduce_257,
+ 1, 184, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 1, 230, :_reduce_none,
+ 3, 228, :_reduce_263,
+ 3, 228, :_reduce_264,
+ 1, 232, :_reduce_none,
+ 1, 233, :_reduce_none,
+ 2, 233, :_reduce_none,
+ 4, 233, :_reduce_268,
+ 2, 233, :_reduce_269,
+ 1, 226, :_reduce_none,
+ 3, 226, :_reduce_271,
+ 3, 238, :_reduce_272,
+ 5, 238, :_reduce_273,
+ 3, 238, :_reduce_274,
+ 0, 240, :_reduce_275,
+ 1, 240, :_reduce_none,
+ 0, 178, :_reduce_277,
+ 1, 178, :_reduce_none,
+ 2, 178, :_reduce_none,
+ 4, 178, :_reduce_280,
+ 2, 178, :_reduce_281,
+ 1, 210, :_reduce_282,
+ 2, 210, :_reduce_283,
+ 2, 210, :_reduce_284,
+ 4, 210, :_reduce_285,
+ 1, 210, :_reduce_286,
+ 0, 243, :_reduce_287,
+ 2, 203, :_reduce_288,
+ 2, 242, :_reduce_289,
+ 1, 242, :_reduce_290,
+ 2, 241, :_reduce_291,
+ 0, 241, :_reduce_292,
+ 1, 235, :_reduce_293,
+ 2, 235, :_reduce_294,
+ 3, 235, :_reduce_295,
+ 4, 235, :_reduce_296,
+ 1, 172, :_reduce_297,
+ 1, 172, :_reduce_none,
+ 3, 171, :_reduce_299,
+ 4, 171, :_reduce_300,
+ 2, 171, :_reduce_301,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_none,
+ 1, 229, :_reduce_312,
+ 0, 267, :_reduce_313,
+ 4, 229, :_reduce_314,
+ 0, 268, :_reduce_315,
+ 4, 229, :_reduce_316,
+ 0, 269, :_reduce_317,
+ 4, 229, :_reduce_318,
+ 3, 229, :_reduce_319,
+ 3, 229, :_reduce_320,
+ 2, 229, :_reduce_321,
+ 3, 229, :_reduce_322,
+ 3, 229, :_reduce_323,
+ 1, 229, :_reduce_324,
+ 4, 229, :_reduce_325,
+ 3, 229, :_reduce_326,
+ 1, 229, :_reduce_327,
+ 0, 270, :_reduce_328,
+ 6, 229, :_reduce_329,
+ 4, 229, :_reduce_330,
+ 3, 229, :_reduce_331,
+ 2, 229, :_reduce_332,
+ 1, 229, :_reduce_none,
+ 2, 229, :_reduce_334,
+ 1, 229, :_reduce_none,
+ 6, 229, :_reduce_336,
+ 6, 229, :_reduce_337,
+ 4, 229, :_reduce_338,
+ 4, 229, :_reduce_339,
+ 5, 229, :_reduce_340,
+ 4, 229, :_reduce_341,
+ 5, 229, :_reduce_342,
+ 6, 229, :_reduce_343,
+ 0, 271, :_reduce_344,
+ 6, 229, :_reduce_345,
+ 0, 272, :_reduce_346,
+ 7, 229, :_reduce_347,
+ 0, 273, :_reduce_348,
+ 5, 229, :_reduce_349,
+ 4, 229, :_reduce_350,
+ 4, 229, :_reduce_351,
+ 1, 229, :_reduce_352,
+ 1, 229, :_reduce_353,
+ 1, 229, :_reduce_354,
+ 1, 229, :_reduce_355,
+ 1, 177, :_reduce_none,
+ 1, 262, :_reduce_357,
+ 1, 265, :_reduce_358,
+ 1, 196, :_reduce_359,
+ 1, 209, :_reduce_360,
+ 1, 257, :_reduce_none,
+ 1, 257, :_reduce_none,
+ 2, 257, :_reduce_363,
+ 1, 192, :_reduce_none,
+ 1, 192, :_reduce_none,
+ 1, 258, :_reduce_none,
+ 5, 258, :_reduce_367,
+ 1, 160, :_reduce_none,
+ 2, 160, :_reduce_369,
+ 1, 261, :_reduce_none,
+ 1, 261, :_reduce_none,
+ 1, 274, :_reduce_372,
+ 3, 274, :_reduce_373,
+ 1, 277, :_reduce_374,
+ 3, 277, :_reduce_375,
+ 1, 276, :_reduce_none,
+ 3, 276, :_reduce_377,
+ 5, 276, :_reduce_378,
+ 1, 276, :_reduce_379,
+ 3, 276, :_reduce_380,
+ 2, 278, :_reduce_381,
+ 1, 278, :_reduce_382,
+ 1, 279, :_reduce_none,
+ 1, 279, :_reduce_none,
+ 0, 284, :_reduce_385,
+ 2, 282, :_reduce_386,
+ 4, 283, :_reduce_387,
+ 2, 283, :_reduce_388,
+ 2, 283, :_reduce_389,
+ 1, 283, :_reduce_390,
+ 2, 288, :_reduce_391,
+ 0, 288, :_reduce_392,
+ 1, 289, :_reduce_none,
+ 6, 290, :_reduce_394,
+ 8, 290, :_reduce_395,
+ 4, 290, :_reduce_396,
+ 6, 290, :_reduce_397,
+ 4, 290, :_reduce_398,
+ 2, 290, :_reduce_none,
+ 6, 290, :_reduce_400,
+ 2, 290, :_reduce_401,
+ 4, 290, :_reduce_402,
+ 6, 290, :_reduce_403,
+ 2, 290, :_reduce_404,
+ 4, 290, :_reduce_405,
+ 2, 290, :_reduce_406,
+ 4, 290, :_reduce_407,
+ 1, 290, :_reduce_none,
+ 0, 294, :_reduce_409,
+ 1, 294, :_reduce_410,
+ 3, 295, :_reduce_411,
+ 4, 295, :_reduce_412,
+ 1, 296, :_reduce_413,
+ 4, 296, :_reduce_414,
+ 1, 297, :_reduce_415,
+ 3, 297, :_reduce_416,
+ 1, 298, :_reduce_417,
+ 1, 298, :_reduce_none,
+ 0, 302, :_reduce_419,
+ 0, 303, :_reduce_420,
+ 5, 256, :_reduce_421,
+ 4, 300, :_reduce_422,
+ 1, 300, :_reduce_423,
+ 0, 306, :_reduce_424,
+ 4, 301, :_reduce_425,
+ 0, 307, :_reduce_426,
+ 4, 301, :_reduce_427,
+ 0, 309, :_reduce_428,
+ 4, 305, :_reduce_429,
+ 2, 201, :_reduce_430,
+ 4, 201, :_reduce_431,
+ 5, 201, :_reduce_432,
+ 5, 201, :_reduce_433,
+ 2, 255, :_reduce_434,
+ 4, 255, :_reduce_435,
+ 4, 255, :_reduce_436,
+ 3, 255, :_reduce_437,
+ 3, 255, :_reduce_438,
+ 3, 255, :_reduce_439,
+ 2, 255, :_reduce_440,
+ 1, 255, :_reduce_441,
+ 4, 255, :_reduce_442,
+ 0, 311, :_reduce_443,
+ 4, 254, :_reduce_444,
+ 0, 312, :_reduce_445,
+ 4, 254, :_reduce_446,
+ 0, 313, :_reduce_447,
+ 3, 205, :_reduce_448,
+ 0, 314, :_reduce_449,
+ 0, 315, :_reduce_450,
+ 4, 308, :_reduce_451,
+ 5, 259, :_reduce_452,
+ 1, 316, :_reduce_453,
+ 1, 316, :_reduce_none,
+ 0, 319, :_reduce_455,
+ 0, 320, :_reduce_456,
+ 7, 260, :_reduce_457,
+ 1, 318, :_reduce_458,
+ 1, 318, :_reduce_none,
+ 1, 317, :_reduce_460,
+ 3, 317, :_reduce_461,
+ 3, 317, :_reduce_462,
+ 1, 188, :_reduce_none,
+ 2, 188, :_reduce_464,
+ 3, 188, :_reduce_465,
+ 1, 188, :_reduce_466,
+ 1, 188, :_reduce_467,
+ 1, 188, :_reduce_468,
+ 1, 321, :_reduce_none,
+ 3, 326, :_reduce_470,
+ 1, 326, :_reduce_none,
+ 3, 328, :_reduce_472,
+ 1, 328, :_reduce_none,
+ 1, 330, :_reduce_474,
+ 1, 331, :_reduce_475,
+ 1, 329, :_reduce_none,
+ 1, 329, :_reduce_none,
+ 4, 329, :_reduce_478,
+ 4, 329, :_reduce_479,
+ 4, 329, :_reduce_480,
+ 3, 329, :_reduce_481,
+ 4, 329, :_reduce_482,
+ 4, 329, :_reduce_483,
+ 4, 329, :_reduce_484,
+ 3, 329, :_reduce_485,
+ 3, 329, :_reduce_486,
+ 3, 329, :_reduce_487,
+ 2, 329, :_reduce_488,
+ 0, 335, :_reduce_489,
+ 4, 329, :_reduce_490,
+ 2, 329, :_reduce_491,
+ 0, 336, :_reduce_492,
+ 4, 329, :_reduce_493,
+ 1, 322, :_reduce_494,
+ 1, 322, :_reduce_495,
+ 2, 322, :_reduce_496,
+ 2, 322, :_reduce_497,
+ 4, 322, :_reduce_498,
+ 1, 322, :_reduce_none,
+ 2, 337, :_reduce_500,
+ 3, 337, :_reduce_501,
+ 1, 324, :_reduce_502,
+ 3, 324, :_reduce_503,
+ 5, 323, :_reduce_504,
+ 2, 339, :_reduce_505,
+ 1, 339, :_reduce_506,
+ 1, 340, :_reduce_507,
+ 3, 340, :_reduce_508,
+ 1, 338, :_reduce_none,
+ 3, 325, :_reduce_510,
+ 1, 325, :_reduce_511,
+ 2, 325, :_reduce_512,
+ 1, 325, :_reduce_513,
+ 1, 341, :_reduce_514,
+ 3, 341, :_reduce_515,
+ 2, 343, :_reduce_516,
+ 1, 343, :_reduce_517,
+ 1, 344, :_reduce_518,
+ 3, 344, :_reduce_519,
+ 2, 346, :_reduce_520,
+ 1, 346, :_reduce_521,
+ 2, 348, :_reduce_522,
+ 1, 342, :_reduce_none,
+ 1, 342, :_reduce_524,
+ 1, 332, :_reduce_none,
+ 3, 332, :_reduce_526,
+ 3, 332, :_reduce_527,
+ 2, 332, :_reduce_528,
+ 2, 332, :_reduce_529,
+ 1, 332, :_reduce_none,
+ 1, 332, :_reduce_none,
+ 1, 332, :_reduce_none,
+ 2, 332, :_reduce_533,
+ 2, 332, :_reduce_534,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_none,
+ 1, 349, :_reduce_543,
+ 1, 349, :_reduce_none,
+ 1, 327, :_reduce_545,
+ 2, 350, :_reduce_546,
+ 2, 350, :_reduce_547,
+ 4, 351, :_reduce_548,
+ 2, 333, :_reduce_549,
+ 3, 333, :_reduce_550,
+ 1, 333, :_reduce_551,
+ 6, 159, :_reduce_552,
+ 0, 159, :_reduce_553,
+ 1, 353, :_reduce_554,
+ 1, 353, :_reduce_none,
+ 1, 353, :_reduce_none,
+ 2, 354, :_reduce_557,
+ 1, 354, :_reduce_none,
+ 2, 161, :_reduce_559,
+ 1, 161, :_reduce_none,
+ 1, 244, :_reduce_none,
+ 1, 244, :_reduce_none,
+ 1, 245, :_reduce_563,
+ 1, 356, :_reduce_564,
+ 2, 356, :_reduce_565,
+ 3, 357, :_reduce_566,
+ 1, 357, :_reduce_567,
+ 1, 357, :_reduce_568,
+ 3, 246, :_reduce_569,
+ 4, 247, :_reduce_570,
+ 3, 248, :_reduce_571,
+ 0, 360, :_reduce_572,
+ 3, 360, :_reduce_573,
+ 1, 361, :_reduce_574,
+ 2, 361, :_reduce_575,
+ 3, 250, :_reduce_576,
+ 0, 363, :_reduce_577,
+ 3, 363, :_reduce_578,
+ 3, 249, :_reduce_579,
+ 3, 251, :_reduce_580,
+ 0, 364, :_reduce_581,
+ 3, 364, :_reduce_582,
+ 0, 365, :_reduce_583,
+ 3, 365, :_reduce_584,
+ 0, 345, :_reduce_585,
+ 2, 345, :_reduce_586,
+ 0, 358, :_reduce_587,
+ 2, 358, :_reduce_588,
+ 0, 359, :_reduce_589,
+ 2, 359, :_reduce_590,
+ 1, 362, :_reduce_591,
+ 2, 362, :_reduce_592,
+ 0, 367, :_reduce_593,
+ 4, 362, :_reduce_594,
+ 1, 366, :_reduce_595,
+ 1, 366, :_reduce_596,
+ 1, 366, :_reduce_597,
+ 1, 366, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 368, :_reduce_601,
+ 3, 369, :_reduce_602,
+ 1, 355, :_reduce_603,
+ 2, 355, :_reduce_604,
+ 1, 227, :_reduce_605,
+ 1, 227, :_reduce_606,
+ 1, 227, :_reduce_607,
+ 1, 227, :_reduce_608,
+ 1, 352, :_reduce_609,
+ 1, 352, :_reduce_610,
+ 1, 352, :_reduce_611,
+ 1, 218, :_reduce_612,
+ 1, 218, :_reduce_613,
+ 1, 218, :_reduce_614,
+ 1, 218, :_reduce_615,
+ 1, 218, :_reduce_616,
+ 1, 219, :_reduce_617,
+ 1, 219, :_reduce_618,
+ 1, 219, :_reduce_619,
+ 1, 219, :_reduce_620,
+ 1, 219, :_reduce_621,
+ 1, 219, :_reduce_622,
+ 1, 219, :_reduce_623,
+ 1, 252, :_reduce_624,
+ 1, 252, :_reduce_625,
+ 1, 176, :_reduce_626,
+ 1, 176, :_reduce_627,
+ 1, 186, :_reduce_628,
+ 1, 186, :_reduce_629,
+ 0, 370, :_reduce_630,
+ 4, 263, :_reduce_631,
+ 0, 263, :_reduce_632,
+ 1, 182, :_reduce_none,
+ 1, 182, :_reduce_634,
+ 3, 371, :_reduce_635,
+ 1, 266, :_reduce_none,
+ 0, 373, :_reduce_637,
+ 3, 266, :_reduce_638,
+ 4, 372, :_reduce_639,
+ 2, 372, :_reduce_640,
+ 2, 372, :_reduce_641,
+ 1, 372, :_reduce_642,
+ 1, 372, :_reduce_643,
+ 2, 375, :_reduce_644,
+ 0, 375, :_reduce_645,
+ 6, 304, :_reduce_646,
+ 8, 304, :_reduce_647,
+ 4, 304, :_reduce_648,
+ 6, 304, :_reduce_649,
+ 4, 304, :_reduce_650,
+ 6, 304, :_reduce_651,
+ 2, 304, :_reduce_652,
+ 4, 304, :_reduce_653,
+ 6, 304, :_reduce_654,
+ 2, 304, :_reduce_655,
+ 4, 304, :_reduce_656,
+ 2, 304, :_reduce_657,
+ 4, 304, :_reduce_658,
+ 1, 304, :_reduce_659,
+ 0, 304, :_reduce_660,
+ 1, 239, :_reduce_661,
+ 1, 299, :_reduce_662,
+ 1, 299, :_reduce_663,
+ 1, 299, :_reduce_664,
+ 1, 299, :_reduce_665,
+ 1, 275, :_reduce_none,
+ 1, 275, :_reduce_667,
+ 1, 377, :_reduce_668,
+ 1, 378, :_reduce_669,
+ 3, 378, :_reduce_670,
+ 1, 291, :_reduce_671,
+ 3, 291, :_reduce_672,
+ 1, 379, :_reduce_673,
+ 2, 380, :_reduce_674,
+ 1, 380, :_reduce_675,
+ 2, 381, :_reduce_676,
+ 1, 381, :_reduce_677,
+ 1, 285, :_reduce_678,
+ 3, 285, :_reduce_679,
+ 1, 374, :_reduce_680,
+ 3, 374, :_reduce_681,
+ 1, 347, :_reduce_none,
+ 1, 347, :_reduce_none,
+ 1, 281, :_reduce_684,
+ 2, 280, :_reduce_685,
+ 1, 280, :_reduce_686,
+ 3, 382, :_reduce_687,
+ 3, 383, :_reduce_688,
+ 1, 292, :_reduce_689,
+ 3, 292, :_reduce_690,
+ 1, 376, :_reduce_691,
+ 3, 376, :_reduce_692,
+ 1, 384, :_reduce_none,
+ 1, 384, :_reduce_none,
+ 2, 293, :_reduce_695,
+ 1, 293, :_reduce_696,
+ 1, 385, :_reduce_none,
+ 1, 385, :_reduce_none,
+ 2, 287, :_reduce_699,
+ 1, 287, :_reduce_700,
+ 2, 286, :_reduce_701,
+ 0, 286, :_reduce_702,
+ 1, 197, :_reduce_none,
+ 3, 197, :_reduce_704,
+ 0, 253, :_reduce_705,
+ 2, 253, :_reduce_none,
+ 1, 237, :_reduce_707,
+ 3, 237, :_reduce_708,
+ 3, 386, :_reduce_709,
+ 2, 386, :_reduce_710,
+ 1, 386, :_reduce_711,
+ 4, 386, :_reduce_712,
+ 2, 386, :_reduce_713,
+ 1, 208, :_reduce_none,
+ 1, 208, :_reduce_none,
+ 1, 208, :_reduce_none,
+ 1, 202, :_reduce_none,
+ 1, 202, :_reduce_none,
+ 1, 310, :_reduce_none,
+ 1, 310, :_reduce_none,
+ 1, 310, :_reduce_none,
+ 1, 198, :_reduce_none,
+ 1, 198, :_reduce_none,
+ 1, 180, :_reduce_724,
+ 1, 180, :_reduce_725,
+ 0, 152, :_reduce_none,
+ 1, 152, :_reduce_none,
+ 0, 187, :_reduce_none,
+ 1, 187, :_reduce_none,
+ 2, 213, :_reduce_730,
+ 2, 179, :_reduce_731,
+ 2, 334, :_reduce_732,
+ 0, 236, :_reduce_none,
+ 1, 236, :_reduce_none,
+ 1, 236, :_reduce_none,
+ 1, 264, :_reduce_736,
+ 1, 264, :_reduce_none,
+ 1, 154, :_reduce_none,
+ 2, 154, :_reduce_none,
+ 0, 234, :_reduce_740 ]
+
+racc_reduce_n = 741
+
+racc_shift_n = 1236
+
+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",
+ "@1",
+ "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",
+ "@2",
+ "command_rhs",
+ "var_lhs",
+ "primary_value",
+ "opt_call_args",
+ "rbracket",
+ "call_op",
+ "defn_head",
+ "f_opt_paren_args",
+ "command",
+ "arg",
+ "defs_head",
+ "backref",
+ "opt_nl",
+ "p_top_expr_body",
+ "@3",
+ "@4",
+ "expr_value_do",
+ "do",
+ "def_name",
+ "@5",
+ "fname",
+ "k_def",
+ "singleton",
+ "dot_or_colon",
+ "@6",
+ "block_command",
+ "block_call",
+ "operation2",
+ "command_args",
+ "cmd_brace_block",
+ "brace_body",
+ "fcall",
+ "@7",
+ "operation",
+ "k_return",
+ "call_args",
+ "mlhs_basic",
+ "mlhs_inner",
+ "rparen",
+ "mlhs_head",
+ "mlhs_item",
+ "mlhs_node",
+ "mlhs_post",
+ "user_variable",
+ "keyword_variable",
+ "cname",
+ "cpath",
+ "op",
+ "reswords",
+ "symbol",
+ "@8",
+ "arg_rhs",
+ "simple_numeric",
+ "rel_expr",
+ "primary",
+ "relop",
+ "@9",
+ "arg_value",
+ "aref_args",
+ "none",
+ "args",
+ "trailer",
+ "assocs",
+ "paren_args",
+ "args_forward",
+ "opt_paren_args",
+ "opt_block_arg",
+ "block_arg",
+ "@10",
+ "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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "@11",
+ "@12",
+ "@13",
+ "@14",
+ "@15",
+ "@16",
+ "@17",
+ "f_marg",
+ "f_norm_arg",
+ "f_margs",
+ "f_marg_list",
+ "f_rest_marg",
+ "f_any_kwrest",
+ "f_kwrest",
+ "f_no_kwarg",
+ "f_eq",
+ "block_args_tail",
+ "@18",
+ "f_block_kwarg",
+ "opt_f_block_arg",
+ "f_block_arg",
+ "opt_block_args_tail",
+ "excessed_comma",
+ "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",
+ "@19",
+ "@20",
+ "f_args",
+ "do_block",
+ "@21",
+ "@22",
+ "do_body",
+ "@23",
+ "operation3",
+ "@24",
+ "@25",
+ "@26",
+ "@27",
+ "@28",
+ "cases",
+ "p_top_expr",
+ "p_cases",
+ "@29",
+ "@30",
+ "p_expr",
+ "p_args",
+ "p_find",
+ "p_args_tail",
+ "p_kwargs",
+ "p_as",
+ "p_variable",
+ "p_alt",
+ "p_expr_basic",
+ "p_lparen",
+ "p_lbracket",
+ "p_value",
+ "p_const",
+ "rbrace",
+ "@31",
+ "@32",
+ "p_args_head",
+ "p_arg",
+ "p_rest",
+ "p_args_post",
+ "p_kwarg",
+ "p_any_kwrest",
+ "p_kw",
+ "p_kw_label",
+ "string_contents",
+ "p_kwrest",
+ "kwrest_mark",
+ "p_kwnorest",
+ "p_primitive",
+ "p_var_ref",
+ "p_expr_ref",
+ "nonlocal_var",
+ "exc_list",
+ "exc_var",
+ "numeric",
+ "string",
+ "string1",
+ "xstring_contents",
+ "regexp_contents",
+ "word_list",
+ "word",
+ "string_content",
+ "symbol_list",
+ "qword_list",
+ "qsym_list",
+ "string_dvar",
+ "@33",
+ "ssym",
+ "dsym",
+ "@34",
+ "f_paren_args",
+ "args_tail",
+ "@35",
+ "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
+
+def _reduce_1(val, _values, result)
+ @current_arg_stack.push(nil)
+ @max_numparam_stack.push(static: true)
+
+ result
+end
+
+def _reduce_2(val, _values, result)
+ result = val[1]
+
+ @current_arg_stack.pop
+ @max_numparam_stack.pop
+
+ 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
+
+# reduce 8 omitted
+
+def _reduce_9(val, _values, result)
+ result = @builder.preexe(val[0], *val[1])
+
+ result
+end
+
+def _reduce_10(val, _values, result)
+ result = val
+
+ result
+end
+
+def _reduce_11(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_12(val, _values, result)
+ result = @builder.compstmt(val[0])
+
+ result
+end
+
+def _reduce_13(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_14(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_15(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_16(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+# reduce 17 omitted
+
+def _reduce_18(val, _values, result)
+ diagnostic :error, :begin_in_method, nil, val[0]
+
+ result
+end
+
+def _reduce_19(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_20(val, _values, result)
+ result = @builder.alias(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_21(val, _values, result)
+ result = @builder.alias(val[0],
+ @builder.gvar(val[1]),
+ @builder.gvar(val[2]))
+
+ result
+end
+
+def _reduce_22(val, _values, result)
+ result = @builder.alias(val[0],
+ @builder.gvar(val[1]),
+ @builder.back_ref(val[2]))
+
+ result
+end
+
+def _reduce_23(val, _values, result)
+ diagnostic :error, :nth_ref_alias, nil, val[2]
+
+ result
+end
+
+def _reduce_24(val, _values, result)
+ result = @builder.undef_method(val[0], val[1])
+
+ result
+end
+
+def _reduce_25(val, _values, result)
+ result = @builder.condition_mod(val[0], nil,
+ val[1], val[2])
+
+ result
+end
+
+def _reduce_26(val, _values, result)
+ result = @builder.condition_mod(nil, val[0],
+ val[1], val[2])
+
+ result
+end
+
+def _reduce_27(val, _values, result)
+ result = @builder.loop_mod(:while, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_28(val, _values, result)
+ result = @builder.loop_mod(:until, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_29(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_30(val, _values, result)
+ result = @builder.postexe(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+# reduce 31 omitted
+
+def _reduce_32(val, _values, result)
+ result = @builder.multi_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_33(val, _values, result)
+ result = @builder.assign(val[0], val[1],
+ @builder.array(nil, val[2], nil))
+
+ result
+end
+
+def _reduce_34(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_35(val, _values, result)
+ result = @builder.multi_assign(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 36 omitted
+
+def _reduce_37(val, _values, result)
+ result = @builder.assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_38(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_39(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_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)
+ 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)
+ 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_43(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_44(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ result = @builder.def_endless_method(def_t, name_t,
+ val[1], val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_45(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_method(def_t, name_t,
+ val[1], val[2], method_body)
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_46(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t,
+ val[1], val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_47(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t,
+ val[1], val[2], method_body)
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_48(val, _values, result)
+ @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 49 omitted
+
+def _reduce_50(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 51 omitted
+
+# reduce 52 omitted
+
+def _reduce_53(val, _values, result)
+ result = @builder.logical_op(:and, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_54(val, _values, result)
+ result = @builder.logical_op(:or, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_55(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[2], nil)
+
+ result
+end
+
+def _reduce_56(val, _values, result)
+ result = @builder.not_op(val[0], nil, val[1], nil)
+
+ result
+end
+
+def _reduce_57(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_58(val, _values, result)
+ @pattern_variables.pop
+ @context.in_kwarg = val[2]
+ result = @builder.match_pattern(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_59(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_60(val, _values, result)
+ @pattern_variables.pop
+ @context.in_kwarg = val[2]
+ result = @builder.match_pattern_p(val[0], val[1], val[3])
+
+ result
+end
+
+# reduce 61 omitted
+
+# reduce 62 omitted
+
+def _reduce_63(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_64(val, _values, result)
+ @lexer.cond.pop
+ result = [ val[1], val[2] ]
+
+ result
+end
+
+def _reduce_65(val, _values, result)
+ local_push
+ @current_arg_stack.push(nil)
+
+ result = [ val[0], @context.dup ]
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_66(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+def _reduce_67(val, _values, result)
+ @lexer.state = :expr_fname
+ @context.in_argdef = true
+
+ result
+end
+
+def _reduce_68(val, _values, result)
+ result = [ val[0], val[1], val[2], val[4] ]
+
+ result
+end
+
+# reduce 69 omitted
+
+# reduce 70 omitted
+
+# reduce 71 omitted
+
+def _reduce_72(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_73(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_74(val, _values, result)
+ @context.in_block = val[1].in_block
+ result = [ val[0], *val[2], val[3] ]
+
+ result
+end
+
+# reduce 75 omitted
+
+def _reduce_76(val, _values, result)
+ result = @builder.call_method(nil, nil, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_77(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_78(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_79(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_80(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2],
+ nil, val[3], nil)
+
+ result
+end
+
+def _reduce_81(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_82(val, _values, result)
+ result = @builder.keyword_cmd(:super, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_83(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_84(val, _values, result)
+ result = @builder.keyword_cmd(:return, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_85(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_86(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0],
+ nil, val[1], nil)
+
+ result
+end
+
+def _reduce_87(val, _values, result)
+ result = @builder.multi_lhs(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_88(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_89(val, _values, result)
+ result = @builder.multi_lhs(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_90(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 91 omitted
+
+def _reduce_92(val, _values, result)
+ result = val[0].
+ push(val[1])
+
+ result
+end
+
+def _reduce_93(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1], val[2]))
+
+ result
+end
+
+def _reduce_94(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1], val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_95(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1]))
+
+ result
+end
+
+def _reduce_96(val, _values, result)
+ result = val[0].
+ push(@builder.splat(val[1])).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_97(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_98(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_99(val, _values, result)
+ result = [ @builder.splat(val[0]) ]
+
+ result
+end
+
+def _reduce_100(val, _values, result)
+ result = [ @builder.splat(val[0]),
+ *val[2] ]
+
+ result
+end
+
+# reduce 101 omitted
+
+def _reduce_102(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_103(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_104(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_105(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_106(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_107(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_108(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_109(val, _values, result)
+ result = @builder.index_asgn(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_110(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_111(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_112(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_113(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_fetch(val[0], val[1], val[2]))
+
+ result
+end
+
+def _reduce_114(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_global(val[0], val[1]))
+
+ result
+end
+
+def _reduce_115(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_116(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_117(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_118(val, _values, result)
+ result = @builder.index_asgn(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_119(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_120(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_121(val, _values, result)
+ result = @builder.attr_asgn(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_122(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_fetch(val[0], val[1], val[2]))
+
+ result
+end
+
+def _reduce_123(val, _values, result)
+ result = @builder.assignable(
+ @builder.const_global(val[0], val[1]))
+
+ result
+end
+
+def _reduce_124(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_125(val, _values, result)
+ diagnostic :error, :module_name_const, nil, val[0]
+
+ result
+end
+
+# reduce 126 omitted
+
+def _reduce_127(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_128(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_129(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 130 omitted
+
+# reduce 131 omitted
+
+# reduce 132 omitted
+
+# reduce 133 omitted
+
+# reduce 134 omitted
+
+def _reduce_135(val, _values, result)
+ result = @builder.symbol_internal(val[0])
+
+ result
+end
+
+# reduce 136 omitted
+
+def _reduce_137(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_138(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_139(val, _values, result)
+ result = val[0] << val[3]
+
+ result
+end
+
+# 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
+
+# reduce 200 omitted
+
+# reduce 201 omitted
+
+# reduce 202 omitted
+
+# reduce 203 omitted
+
+# reduce 204 omitted
+
+# reduce 205 omitted
+
+# reduce 206 omitted
+
+# reduce 207 omitted
+
+# reduce 208 omitted
+
+# reduce 209 omitted
+
+# reduce 210 omitted
+
+def _reduce_211(val, _values, result)
+ result = @builder.assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_212(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_213(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_214(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_215(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_216(val, _values, result)
+ result = @builder.op_assign(
+ @builder.call_method(
+ val[0], val[1], val[2]),
+ val[3], val[4])
+
+ result
+end
+
+def _reduce_217(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_218(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_219(val, _values, result)
+ result = @builder.op_assign(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_220(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_221(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_222(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_223(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_224(val, _values, result)
+ result = @builder.range_inclusive(nil, val[0], val[1])
+
+ result
+end
+
+def _reduce_225(val, _values, result)
+ result = @builder.range_exclusive(nil, 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.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+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.unary_op(val[0],
+ @builder.binary_op(
+ val[1], val[2], val[3]))
+
+ result
+end
+
+def _reduce_233(val, _values, result)
+ result = @builder.unary_op(val[0], val[1])
+
+ result
+end
+
+def _reduce_234(val, _values, result)
+ result = @builder.unary_op(val[0], val[1])
+
+ result
+end
+
+def _reduce_235(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ 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.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 239 omitted
+
+def _reduce_240(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_241(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+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.match_op(val[0], val[1], val[2])
+
+ result
+end
+
+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.not_op(val[0], nil, val[1], nil)
+
+ result
+end
+
+def _reduce_246(val, _values, result)
+ result = @builder.unary_op(val[0], val[1])
+
+ result
+end
+
+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
+
+def _reduce_249(val, _values, result)
+ result = @builder.logical_op(:and, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_250(val, _values, result)
+ result = @builder.logical_op(:or, val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_251(val, _values, result)
+ @context.in_defined = true
+
+ result
+end
+
+def _reduce_252(val, _values, result)
+ @context.in_defined = false
+ result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[3] ], nil)
+
+ result
+end
+
+def _reduce_253(val, _values, result)
+ result = @builder.ternary(val[0], val[1],
+ val[2], val[4], val[5])
+
+ result
+end
+
+def _reduce_254(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ result = @builder.def_endless_method(def_t, name_t,
+ val[1], val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_255(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_method(def_t, name_t,
+ val[1], val[2], method_body)
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_256(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t,
+ val[1], val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_257(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ endless_method_name(name_t)
+
+ rescue_body = @builder.rescue_body(val[4],
+ nil, nil, nil,
+ nil, val[5])
+
+ method_body = @builder.begin_body(val[3], [ rescue_body ])
+
+ result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t,
+ val[1], val[2], method_body)
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+# reduce 258 omitted
+
+# reduce 259 omitted
+
+# reduce 260 omitted
+
+# reduce 261 omitted
+
+# reduce 262 omitted
+
+def _reduce_263(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_264(val, _values, result)
+ result = @builder.binary_op(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 265 omitted
+
+# reduce 266 omitted
+
+# reduce 267 omitted
+
+def _reduce_268(val, _values, result)
+ result = val[0] << @builder.associate(nil, val[2], nil)
+
+ result
+end
+
+def _reduce_269(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+
+ result
+end
+
+# reduce 270 omitted
+
+def _reduce_271(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_272(val, _values, result)
+ result = val
+
+ result
+end
+
+def _reduce_273(val, _values, result)
+ unless @static_env.declared_forward_args?
+ diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3]
+ end
+
+ result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]]
+
+ result
+end
+
+def _reduce_274(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_275(val, _values, result)
+ result = [ nil, [], nil ]
+
+ result
+end
+
+# reduce 276 omitted
+
+def _reduce_277(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 278 omitted
+
+# reduce 279 omitted
+
+def _reduce_280(val, _values, result)
+ result = val[0] << @builder.associate(nil, val[2], nil)
+
+ result
+end
+
+def _reduce_281(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+
+ result
+end
+
+def _reduce_282(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_283(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_284(val, _values, result)
+ result = [ @builder.associate(nil, val[0], nil) ]
+ result.concat(val[1])
+
+ result
+end
+
+def _reduce_285(val, _values, result)
+ assocs = @builder.associate(nil, val[2], nil)
+ result = val[0] << assocs
+ result.concat(val[3])
+
+ result
+end
+
+def _reduce_286(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_287(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_288(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_289(val, _values, result)
+ result = @builder.block_pass(val[0], val[1])
+
+ result
+end
+
+def _reduce_290(val, _values, result)
+ if !@static_env.declared_anonymous_blockarg?
+ diagnostic :error, :no_anonymous_blockarg, nil, val[0]
+ end
+
+ result = @builder.block_pass(val[0], nil)
+
+ result
+end
+
+def _reduce_291(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_292(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_293(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_294(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_295(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_296(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_297(val, _values, result)
+ result = @builder.array(nil, val[0], nil)
+
+ result
+end
+
+# reduce 298 omitted
+
+def _reduce_299(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_300(val, _values, result)
+ result = val[0] << @builder.splat(val[2], val[3])
+
+ result
+end
+
+def _reduce_301(val, _values, result)
+ result = [ @builder.splat(val[0], val[1]) ]
+
+ result
+end
+
+# reduce 302 omitted
+
+# reduce 303 omitted
+
+# reduce 304 omitted
+
+# reduce 305 omitted
+
+# reduce 306 omitted
+
+# reduce 307 omitted
+
+# reduce 308 omitted
+
+# reduce 309 omitted
+
+# reduce 310 omitted
+
+# reduce 311 omitted
+
+def _reduce_312(val, _values, result)
+ result = @builder.call_method(nil, nil, val[0])
+
+ result
+end
+
+def _reduce_313(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_314(val, _values, result)
+ @lexer.cmdarg.pop
+
+ result = @builder.begin_keyword(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_315(val, _values, result)
+ @lexer.state = :expr_endarg
+
+ result
+end
+
+def _reduce_316(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[3])
+
+ result
+end
+
+def _reduce_317(val, _values, result)
+ @lexer.state = :expr_endarg
+
+ result
+end
+
+def _reduce_318(val, _values, result)
+ result = @builder.begin(val[0], nil, val[3])
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ result = @builder.begin(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ result = @builder.array(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_323(val, _values, result)
+ result = @builder.associate(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_324(val, _values, result)
+ result = @builder.keyword_cmd(:return, val[0])
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_326(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2])
+
+ result
+end
+
+def _reduce_327(val, _values, result)
+ result = @builder.keyword_cmd(:yield, val[0])
+
+ result
+end
+
+def _reduce_328(val, _values, result)
+ @context.in_defined = true
+
+ result
+end
+
+def _reduce_329(val, _values, result)
+ @context.in_defined = false
+ result = @builder.keyword_cmd(:defined?, val[0],
+ val[2], [ val[4] ], val[5])
+
+ result
+end
+
+def _reduce_330(val, _values, result)
+ result = @builder.not_op(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_331(val, _values, result)
+ result = @builder.not_op(val[0], val[1], nil, val[2])
+
+ result
+end
+
+def _reduce_332(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 333 omitted
+
+def _reduce_334(val, _values, result)
+ begin_t, args, body, end_t = val[1]
+ result = @builder.block(val[0],
+ begin_t, args, body, end_t)
+
+ result
+end
+
+# reduce 335 omitted
+
+def _reduce_336(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_337(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_338(val, _values, result)
+ result = @builder.loop(:while, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_339(val, _values, result)
+ result = @builder.loop(:until, val[0], *val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_340(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_341(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_342(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_343(val, _values, result)
+ result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5])
+
+ result
+end
+
+def _reduce_344(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_345(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_346(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_347(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_349(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_350(val, _values, result)
+ def_t, (name_t, ctx) = val[0]
+ result = @builder.def_method(def_t, name_t, val[1],
+ val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_351(val, _values, result)
+ def_t, recv, dot_t, (name_t, ctx) = val[0]
+ result = @builder.def_singleton(def_t, recv, dot_t, name_t, val[1],
+ val[2], val[3])
+
+ local_pop
+ @current_arg_stack.pop
+ @context.in_def = ctx.in_def
+
+ result
+end
+
+def _reduce_352(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_353(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_354(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_355(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 356 omitted
+
+def _reduce_357(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_358(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_359(val, _values, result)
+ result = val[0]
+ @context.in_argdef = true
+
+ result
+end
+
+def _reduce_360(val, _values, result)
+ if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda)
+ diagnostic :error, :invalid_return, nil, val[0]
+ end
+
+ result
+end
+
+# reduce 361 omitted
+
+# reduce 362 omitted
+
+def _reduce_363(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 364 omitted
+
+# reduce 365 omitted
+
+# reduce 366 omitted
+
+def _reduce_367(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 368 omitted
+
+def _reduce_369(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 370 omitted
+
+# reduce 371 omitted
+
+def _reduce_372(val, _values, result)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_373(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_374(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_375(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 376 omitted
+
+def _reduce_377(val, _values, result)
+ result = val[0].
+ push(val[2])
+
+ result
+end
+
+def _reduce_378(val, _values, result)
+ result = val[0].
+ push(val[2]).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_379(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_380(val, _values, result)
+ result = [ val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_381(val, _values, result)
+ result = @builder.restarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_382(val, _values, result)
+ result = @builder.restarg(val[0])
+
+ result
+end
+
+# reduce 383 omitted
+
+# reduce 384 omitted
+
+def _reduce_385(val, _values, result)
+ @context.in_argdef = false
+
+ result
+end
+
+def _reduce_386(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_387(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_388(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_389(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_390(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_391(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_392(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 393 omitted
+
+def _reduce_394(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_395(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_396(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 399 omitted
+
+def _reduce_400(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_401(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_402(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_403(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_404(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_405(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_406(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_407(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 408 omitted
+
+def _reduce_409(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_410(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_411(val, _values, result)
+ @max_numparam_stack.has_ordinary_params!
+ @current_arg_stack.set(nil)
+ @context.in_argdef = false
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_412(val, _values, result)
+ @max_numparam_stack.has_ordinary_params!
+ @current_arg_stack.set(nil)
+ @context.in_argdef = false
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_413(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_414(val, _values, result)
+ result = val[2]
+
+ result
+end
+
+def _reduce_415(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_416(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_417(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 418 omitted
+
+def _reduce_419(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_421(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+ args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2]
+ begin_t, body, end_t = val[4]
+
+ @max_numparam_stack.pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @context.in_lambda = val[1].in_lambda
+
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ result
+end
+
+def _reduce_422(val, _values, result)
+ @context.in_argdef = false
+ @max_numparam_stack.has_ordinary_params!
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_423(val, _values, result)
+ @context.in_argdef = false
+ if val[0].any?
+ @max_numparam_stack.has_ordinary_params!
+ end
+ result = @builder.args(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_424(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ @context.in_lambda = val[1].in_lambda
+ result = [ val[0], val[2], val[3] ]
+
+ result
+end
+
+def _reduce_426(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_427(val, _values, result)
+ @context.in_lambda = val[1].in_lambda
+ result = [ val[0], val[2], val[3] ]
+
+ result
+end
+
+def _reduce_428(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_429(val, _values, result)
+ @context.in_block = val[1].in_block
+ result = [ val[0], *val[2], val[3] ]
+
+ result
+end
+
+def _reduce_430(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_431(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_432(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_433(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_434(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_435(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_436(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_437(val, _values, result)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_438(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_439(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_440(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_441(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_442(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_443(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ @context.in_block = val[1].in_block
+ result = [ val[0], *val[2], val[3] ]
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_446(val, _values, result)
+ @context.in_block = val[1].in_block
+ result = [ val[0], *val[2], val[3] ]
+
+ result
+end
+
+def _reduce_447(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+
+ result
+end
+
+def _reduce_448(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_449(val, _values, result)
+ @static_env.extend_dynamic
+ @max_numparam_stack.push(static: false)
+
+ result
+end
+
+def _reduce_450(val, _values, result)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_451(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_452(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_453(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 454 omitted
+
+def _reduce_455(val, _values, result)
+ @lexer.state = :expr_beg
+ @lexer.command_start = false
+ @pattern_variables.push
+ @pattern_hash_keys.push
+
+ result = @context.in_kwarg
+ @context.in_kwarg = true
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ @pattern_variables.pop
+ @pattern_hash_keys.pop
+ @context.in_kwarg = val[1]
+
+ result
+end
+
+def _reduce_457(val, _values, result)
+ result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]),
+ *val[6] ]
+
+ result
+end
+
+def _reduce_458(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 459 omitted
+
+def _reduce_460(val, _values, result)
+ result = [ val[0], nil ]
+
+ result
+end
+
+def _reduce_461(val, _values, result)
+ result = [ val[0], @builder.if_guard(val[1], val[2]) ]
+
+ result
+end
+
+def _reduce_462(val, _values, result)
+ result = [ val[0], @builder.unless_guard(val[1], val[2]) ]
+
+ result
+end
+
+# reduce 463 omitted
+
+def _reduce_464(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], val[1])
+ result = @builder.array_pattern(nil, [ item ], nil)
+
+ result
+end
+
+def _reduce_465(val, _values, result)
+ result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil)
+
+ result
+end
+
+def _reduce_466(val, _values, result)
+ result = @builder.find_pattern(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_467(val, _values, result)
+ result = @builder.array_pattern(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ result = @builder.hash_pattern(nil, val[0], nil)
+
+ result
+end
+
+# reduce 469 omitted
+
+def _reduce_470(val, _values, result)
+ result = @builder.match_as(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 471 omitted
+
+def _reduce_472(val, _values, result)
+ result = @builder.match_alt(val[0], val[1], val[2])
+
+ result
+end
+
+# reduce 473 omitted
+
+def _reduce_474(val, _values, result)
+ result = val[0]
+ @pattern_hash_keys.push
+
+ result
+end
+
+def _reduce_475(val, _values, result)
+ result = val[0]
+ @pattern_hash_keys.push
+
+ result
+end
+
+# reduce 476 omitted
+
+# reduce 477 omitted
+
+def _reduce_478(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_479(val, _values, result)
+ @pattern_hash_keys.pop
+ pattern = @builder.find_pattern(nil, val[2], nil)
+ result = @builder.const_pattern(val[0], val[1], pattern, val[3])
+
+ result
+end
+
+def _reduce_480(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_481(val, _values, result)
+ pattern = @builder.array_pattern(val[1], nil, val[2])
+ result = @builder.const_pattern(val[0], val[1], pattern, val[2])
+
+ result
+end
+
+def _reduce_482(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_483(val, _values, result)
+ @pattern_hash_keys.pop
+ pattern = @builder.find_pattern(nil, val[2], nil)
+ result = @builder.const_pattern(val[0], val[1], pattern, val[3])
+
+ result
+end
+
+def _reduce_484(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_485(val, _values, result)
+ pattern = @builder.array_pattern(val[1], nil, val[2])
+ result = @builder.const_pattern(val[0], val[1], pattern, val[2])
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ result = @builder.array_pattern(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ result = @builder.find_pattern(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ result = @builder.array_pattern(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_489(val, _values, result)
+ @pattern_hash_keys.push
+ result = @context.in_kwarg
+ @context.in_kwarg = false
+
+ result
+end
+
+def _reduce_490(val, _values, result)
+ @pattern_hash_keys.pop
+ @context.in_kwarg = val[1]
+ result = @builder.hash_pattern(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_491(val, _values, result)
+ result = @builder.hash_pattern(val[0], [], val[1])
+
+ result
+end
+
+def _reduce_492(val, _values, result)
+ @pattern_hash_keys.push
+
+ result
+end
+
+def _reduce_493(val, _values, result)
+ @pattern_hash_keys.pop
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_494(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ result = [ *val[0], val[1] ]
+
+ result
+end
+
+def _reduce_497(val, _values, result)
+ result = [ *val[0], val[1] ]
+
+ result
+end
+
+def _reduce_498(val, _values, result)
+ result = [ *val[0], val[1], *val[3] ]
+
+ result
+end
+
+# reduce 499 omitted
+
+def _reduce_500(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], val[1])
+ result = [ item ]
+
+ result
+end
+
+def _reduce_501(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], val[2])
+ result = [ *val[0], last_item ]
+
+ 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], *val[2], val[4] ]
+
+ result
+end
+
+def _reduce_505(val, _values, result)
+ result = @builder.match_rest(val[0], val[1])
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = @builder.match_rest(val[0])
+
+ 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
+
+# reduce 509 omitted
+
+def _reduce_510(val, _values, result)
+ result = [ *val[0], *val[2] ]
+
+ result
+end
+
+def _reduce_511(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_512(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_513(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_514(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_515(val, _values, result)
+ result = [ *val[0], val[2] ]
+
+ result
+end
+
+def _reduce_516(val, _values, result)
+ result = @builder.match_pair(*val[0], val[1])
+
+ result
+end
+
+def _reduce_517(val, _values, result)
+ result = @builder.match_label(*val[0])
+
+ result
+end
+
+def _reduce_518(val, _values, result)
+ result = [:label, val[0]]
+
+ result
+end
+
+def _reduce_519(val, _values, result)
+ result = [:quoted, [val[0], val[1], val[2]]]
+
+ result
+end
+
+def _reduce_520(val, _values, result)
+ result = [ @builder.match_rest(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_521(val, _values, result)
+ result = [ @builder.match_rest(val[0], nil) ]
+
+ result
+end
+
+def _reduce_522(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 523 omitted
+
+def _reduce_524(val, _values, result)
+ result = [ @builder.match_nil_pattern(val[0][0], val[0][1]) ]
+
+ result
+end
+
+# reduce 525 omitted
+
+def _reduce_526(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_527(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_528(val, _values, result)
+ result = @builder.range_inclusive(val[0], val[1], nil)
+
+ result
+end
+
+def _reduce_529(val, _values, result)
+ result = @builder.range_exclusive(val[0], val[1], nil)
+
+ result
+end
+
+# reduce 530 omitted
+
+# reduce 531 omitted
+
+# reduce 532 omitted
+
+def _reduce_533(val, _values, result)
+ result = @builder.range_inclusive(nil, val[0], val[1])
+
+ result
+end
+
+def _reduce_534(val, _values, result)
+ result = @builder.range_exclusive(nil, val[0], val[1])
+
+ result
+end
+
+# reduce 535 omitted
+
+# reduce 536 omitted
+
+# reduce 537 omitted
+
+# reduce 538 omitted
+
+# reduce 539 omitted
+
+# reduce 540 omitted
+
+# reduce 541 omitted
+
+# reduce 542 omitted
+
+def _reduce_543(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+# reduce 544 omitted
+
+def _reduce_545(val, _values, result)
+ result = @builder.assignable(@builder.match_var(val[0]))
+
+ result
+end
+
+def _reduce_546(val, _values, result)
+ name = val[1][0]
+ unless static_env.declared?(name)
+ diagnostic :error, :undefined_lvar, { :name => name }, val[1]
+ end
+
+ lvar = @builder.accessible(@builder.ident(val[1]))
+ result = @builder.pin(val[0], lvar)
+
+ result
+end
+
+def _reduce_547(val, _values, result)
+ non_lvar = @builder.accessible(val[1])
+ result = @builder.pin(val[0], non_lvar)
+
+ result
+end
+
+def _reduce_548(val, _values, result)
+ expr = @builder.begin(val[1], val[2], val[3])
+ result = @builder.pin(val[0], expr)
+
+ result
+end
+
+def _reduce_549(val, _values, result)
+ result = @builder.const_global(val[0], val[1])
+
+ result
+end
+
+def _reduce_550(val, _values, result)
+ result = @builder.const_fetch(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_551(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_552(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_553(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_554(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 555 omitted
+
+# reduce 556 omitted
+
+def _reduce_557(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 558 omitted
+
+def _reduce_559(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 560 omitted
+
+# reduce 561 omitted
+
+# reduce 562 omitted
+
+def _reduce_563(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_564(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_565(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_566(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_567(val, _values, result)
+ string = @builder.string(val[0])
+ result = @builder.dedent_string(string, @lexer.dedent_level)
+
+ result
+end
+
+def _reduce_568(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_569(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_570(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_571(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_572(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_573(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_574(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_575(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_576(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_577(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_578(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_579(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_580(val, _values, result)
+ result = @builder.symbols_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_581(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_582(val, _values, result)
+ result = val[0] << @builder.string_internal(val[1])
+
+ result
+end
+
+def _reduce_583(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_584(val, _values, result)
+ result = val[0] << @builder.symbol_internal(val[1])
+
+ result
+end
+
+def _reduce_585(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_586(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_587(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_588(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_589(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_590(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_591(val, _values, result)
+ result = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_592(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_593(val, _values, result)
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+
+ result
+end
+
+def _reduce_594(val, _values, result)
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_595(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_596(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_597(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 598 omitted
+
+# reduce 599 omitted
+
+# reduce 600 omitted
+
+def _reduce_601(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_602(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_603(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_604(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_605(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_606(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_607(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.rational(val[0])
+
+ result
+end
+
+def _reduce_608(val, _values, result)
+ @lexer.state = :expr_end
+ result = @builder.complex(val[0])
+
+ result
+end
+
+def _reduce_609(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_610(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_611(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_612(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_613(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_614(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_615(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_616(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_617(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_618(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_619(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_620(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_621(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_622(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_623(val, _values, result)
+ result = @builder.__ENCODING__(val[0])
+
+ result
+end
+
+def _reduce_624(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_625(val, _values, result)
+ result = @builder.accessible(val[0])
+
+ result
+end
+
+def _reduce_626(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_627(val, _values, result)
+ result = @builder.assignable(val[0])
+
+ result
+end
+
+def _reduce_628(val, _values, result)
+ result = @builder.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_629(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_630(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_631(val, _values, result)
+ result = [ val[0], val[2] ]
+
+ result
+end
+
+def _reduce_632(val, _values, result)
+ result = nil
+
+ result
+end
+
+# reduce 633 omitted
+
+def _reduce_634(val, _values, result)
+ @context.in_argdef = false
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_635(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+ @context.in_argdef = false
+
+ result
+end
+
+# reduce 636 omitted
+
+def _reduce_637(val, _values, result)
+ result = @context.dup
+ @context.in_kwarg = true
+ @context.in_argdef = true
+
+ result
+end
+
+def _reduce_638(val, _values, result)
+ @context.in_kwarg = val[0].in_kwarg
+ @context.in_argdef = false
+ result = @builder.args(nil, val[1], nil)
+
+ result
+end
+
+def _reduce_639(val, _values, result)
+ result = val[0].concat(val[2]).concat(val[3])
+
+ result
+end
+
+def _reduce_640(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_641(val, _values, result)
+ result = val[0].concat(val[1])
+
+ result
+end
+
+def _reduce_642(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_643(val, _values, result)
+ @static_env.declare_forward_args
+ result = [ @builder.forward_arg(val[0]) ]
+
+ result
+end
+
+def _reduce_644(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_645(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_646(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_647(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_648(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_649(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_650(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_651(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_652(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_653(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_654(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_655(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_656(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_657(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_658(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_659(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_660(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_661(val, _values, result)
+ result = val[0]
+
+ result
+end
+
+def _reduce_662(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_663(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_664(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_665(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 666 omitted
+
+def _reduce_667(val, _values, result)
+ @static_env.declare val[0][0]
+
+ @max_numparam_stack.has_ordinary_params!
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_668(val, _values, result)
+ @current_arg_stack.set(val[0][0])
+ result = val[0]
+
+ result
+end
+
+def _reduce_669(val, _values, result)
+ @current_arg_stack.set(0)
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_670(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_671(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_672(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_673(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])
+ @context.in_argdef = false
+
+ result = val[0]
+
+ result
+end
+
+def _reduce_674(val, _values, result)
+ @current_arg_stack.set(nil)
+ @context.in_argdef = true
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_675(val, _values, result)
+ @current_arg_stack.set(nil)
+ @context.in_argdef = true
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_676(val, _values, result)
+ @context.in_argdef = true
+ result = @builder.kwoptarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_677(val, _values, result)
+ @context.in_argdef = true
+ result = @builder.kwarg(val[0])
+
+ result
+end
+
+def _reduce_678(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_679(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_680(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_681(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 682 omitted
+
+# reduce 683 omitted
+
+def _reduce_684(val, _values, result)
+ result = [ @builder.kwnilarg(val[0][0], val[0][1]) ]
+
+ result
+end
+
+def _reduce_685(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.kwrestarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_686(val, _values, result)
+ result = [ @builder.kwrestarg(val[0]) ]
+
+ result
+end
+
+def _reduce_687(val, _values, result)
+ @current_arg_stack.set(0)
+ @context.in_argdef = true
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_688(val, _values, result)
+ @current_arg_stack.set(0)
+ @context.in_argdef = true
+ result = @builder.optarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_689(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_690(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_691(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_692(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 693 omitted
+
+# reduce 694 omitted
+
+def _reduce_695(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_696(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 697 omitted
+
+# reduce 698 omitted
+
+def _reduce_699(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+def _reduce_700(val, _values, result)
+ @static_env.declare_anonymous_blockarg
+
+ result = @builder.blockarg(val[0], nil)
+
+ result
+end
+
+def _reduce_701(val, _values, result)
+ result = [ val[1] ]
+
+ result
+end
+
+def _reduce_702(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 703 omitted
+
+def _reduce_704(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_705(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 706 omitted
+
+def _reduce_707(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_708(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_709(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_710(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+def _reduce_711(val, _values, result)
+ result = @builder.pair_label(val[0])
+
+ result
+end
+
+def _reduce_712(val, _values, result)
+ result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_713(val, _values, result)
+ result = @builder.kwsplat(val[0], val[1])
+
+ result
+end
+
+# reduce 714 omitted
+
+# reduce 715 omitted
+
+# reduce 716 omitted
+
+# reduce 717 omitted
+
+# reduce 718 omitted
+
+# reduce 719 omitted
+
+# reduce 720 omitted
+
+# reduce 721 omitted
+
+# reduce 722 omitted
+
+# reduce 723 omitted
+
+def _reduce_724(val, _values, result)
+ result = [:dot, val[0][1]]
+
+ result
+end
+
+def _reduce_725(val, _values, result)
+ result = [:anddot, val[0][1]]
+
+ result
+end
+
+# reduce 726 omitted
+
+# reduce 727 omitted
+
+# reduce 728 omitted
+
+# reduce 729 omitted
+
+def _reduce_730(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_731(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_732(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 733 omitted
+
+# reduce 734 omitted
+
+# reduce 735 omitted
+
+def _reduce_736(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 737 omitted
+
+# reduce 738 omitted
+
+# reduce 739 omitted
+
+def _reduce_740(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class Ruby32
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/rubymotion.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/rubymotion.rb
new file mode 100644
index 000000000..93d10ea20
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/rubymotion.rb
@@ -0,0 +1,6125 @@
+# -*- 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
+
+ def local_push
+ @static_env.extend_static
+ @lexer.cmdarg.push(false)
+ @lexer.cond.push(false)
+ end
+
+ def local_pop
+ @static_env.unextend
+ @lexer.cmdarg.pop
+ @lexer.cond.pop
+ end
+##### State transition tables begin ###
+
+clist = [
+'-279,540,509,509,509,-93,-90,-279,-279,-279,-87,206,207,-279,-279,530',
+'-279,452,521,583,583,209,522,206,207,-93,551,583,509,509,-88,583,499',
+'206,207,498,-279,-279,-456,-279,-279,-279,-279,-279,-90,-456,625,-466',
+'515,-91,661,-88,751,582,582,-92,-87,-86,210,731,210,582,542,541,552',
+'582,-279,-279,-279,-279,-279,-279,-279,-279,-279,-279,-279,-279,-279',
+'-279,661,661,-279,-279,-279,-92,571,206,207,550,-279,210,274,-279,206',
+'207,-456,-86,-279,883,-279,210,-279,-279,-279,-279,-279,-279,-279,-86',
+'-279,-82,-279,210,-528,-79,104,104,104,-93,529,103,103,103,-93,-279',
+'-279,-279,-89,-83,-85,-279,-279,-279,-279,-279,-91,-279,-279,-279,104',
+'-279,104,104,-88,103,779,103,103,-88,104,-279,-279,-279,-83,103,-80',
+'750,-90,-91,274,-279,-279,-90,-279,-279,-279,-279,-279,-92,-87,-86,713',
+'886,-92,-87,-86,104,273,-89,104,104,103,104,210,103,103,540,103,486',
+'-84,-279,-279,-279,-279,-279,-279,-279,-279,-279,-279,-279,-279,-279',
+'-279,-527,-80,-279,-279,-279,-73,571,-279,274,-78,-279,760,-59,-279',
+'-279,796,-279,-90,-279,269,-279,540,-279,-279,-279,-279,-279,-279,-279',
+'888,-279,-528,-279,-81,-92,417,890,-89,203,-527,890,273,-89,542,541',
+'878,-279,-279,-279,-279,-531,-279,693,-279,876,-279,-91,-531,-531,-531',
+'761,701,-531,-531,-531,-87,-531,-80,-91,104,774,625,269,-91,103,-531',
+'-531,-531,-531,-81,712,-462,542,541,547,-93,-531,-531,-462,-531,-531',
+'-531,-531,-531,273,104,204,-82,-527,-81,103,-458,760,-80,-79,210,-80',
+'203,-458,499,540,-87,501,-80,267,895,-531,-531,-531,-531,-531,-531,-531',
+'-531,-531,-531,-531,-531,-531,-531,-88,-79,-531,-531,-531,-81,714,-531',
+'-81,-462,-531,-466,-461,-531,-531,-81,-531,299,-531,-461,-531,810,-531',
+'-531,-531,-531,-531,-531,-531,-458,-531,-531,-531,-82,724,204,641,640',
+'639,645,642,542,541,545,898,563,-531,-531,-531,-531,-456,-531,899,-531',
+'-78,-531,-89,-456,-456,-456,104,-86,-456,-456,-456,103,-456,-79,904',
+'-82,-461,647,-82,229,-456,906,-456,-456,-456,-82,651,650,654,653,206',
+'207,-456,-456,-80,-456,-456,-456,-456,-456,768,-88,641,640,639,645,642',
+'-464,909,-79,911,226,-79,540,-464,228,227,890,540,-79,723,890,-456,-456',
+'-456,-456,-456,-456,-456,-456,-456,-456,-456,-456,-456,-456,75,916,-456',
+'-456,-456,499,-456,-456,501,76,-456,298,499,-456,-456,501,-456,205,-456',
+'77,-456,494,-456,-456,-456,-456,-456,-456,-456,-464,-456,768,-456,641',
+'640,639,645,642,542,541,543,248,843,542,541,538,-456,-456,-456,-456',
+'-453,-456,486,-456,-323,-456,-456,-453,-453,-453,-85,-323,-453,-453',
+'-453,564,-453,-93,229,924,-323,925,203,-453,-453,933,-453,-453,-453',
+'202,-453,300,301,-531,481,482,-453,-453,200,-453,-453,-453,-453,-453',
+'104,-84,774,625,199,103,226,198,-92,-463,228,227,197,203,-82,931,-463',
+'450,-323,210,536,-90,-453,-453,-453,-453,-453,-453,-453,-453,-453,-453',
+'-453,-453,-453,-453,204,-453,-453,-453,-453,-531,-453,-453,206,207,-453',
+'196,-531,-453,-453,195,-453,-527,-453,946,-453,-531,-453,-453,-453,-453',
+'-453,-453,-453,-531,-453,-463,-453,-460,-273,204,-531,-531,-531,-531',
+'-460,-273,-531,-531,890,-531,-453,-453,-453,-453,-273,-453,-459,-453',
+'-531,-453,-453,890,890,-459,-280,950,-525,-531,933,-531,-531,-280,-531',
+'-531,-531,-531,-531,953,954,956,-280,890,890,768,890,641,640,639,645',
+'642,-528,210,373,210,-73,-460,-273,375,374,-531,-531,-531,-531,-531',
+'-531,-531,-531,-531,-531,-531,-531,-531,-531,210,-459,-531,-531,-531',
+'-456,568,764,607,-280,-531,210,-456,-531,492,-524,894,-525,-531,618',
+'-531,-456,-531,-531,-531,-531,-531,-531,-531,625,-531,-531,-531,210',
+'-465,229,229,657,229,-525,229,-465,515,664,573,-286,-531,-531,269,-81',
+'-465,-531,-286,-286,-286,-531,-89,-286,-286,-286,210,-286,-259,-456',
+'687,688,229,-453,689,98,99,-286,-286,203,-453,559,556,692,555,-524,518',
+'-286,-286,-453,-286,-286,-286,-286,-286,516,695,808,-465,641,640,639',
+'-260,642,226,702,459,-524,228,227,224,225,106,107,108,109,110,-286,-286',
+'-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-453,229',
+'-286,-286,-286,203,204,-286,459,278,-286,210,915,-286,-286,716,-286',
+'728,-286,452,-286,526,-286,-286,-286,-286,-286,-286,-286,520,-286,519',
+'-286,226,203,450,210,228,227,224,225,524,366,515,618,-533,-286,-286',
+'210,-286,526,-286,-533,-533,-533,-286,269,-533,-533,-533,452,-533,808',
+'204,641,640,639,203,642,269,-533,-533,-533,-533,490,106,107,108,109',
+'110,618,-533,-533,415,-533,-533,-533,-533,-533,-527,229,229,204,503',
+'768,742,641,640,639,645,642,106,107,108,109,110,502,-259,746,723,754',
+'-533,-533,-533,-533,-533,-533,-533,-533,-533,-533,-533,-533,-533,-533',
+'204,756,-533,-533,-533,759,764,-533,762,770,-533,771,625,-533,-533,767',
+'-533,778,-533,210,-533,495,-533,-533,-533,-533,-533,-533,-533,494,-533',
+'-533,-533,229,488,210,-280,487,203,787,483,100,-261,-280,269,478,-533',
+'-533,-533,-533,-274,-533,-280,-533,476,-533,210,-274,-274,-274,933,890',
+'-274,-274,-274,644,-274,641,640,639,645,642,-279,278,479,798,-274,-274',
+'-274,-279,800,803,804,723,-528,811,-274,-274,-279,-274,-274,-274,-274',
+'-274,-280,472,204,471,210,818,819,768,647,641,640,639,645,642,618,210',
+'-58,651,650,654,653,459,-274,-274,-274,-274,-274,-274,-274,-274,-274',
+'-274,-274,-274,-274,-274,-279,452,-274,-274,-274,723,838,-274,764,450',
+'-274,841,448,-274,-274,760,-274,767,-274,210,-274,845,-274,-274,-274',
+'-274,-274,-274,-274,209,-274,847,-274,419,418,768,203,641,640,639,645',
+'642,416,414,853,376,-274,-274,-274,-274,-232,-274,415,-274,855,-274',
+'210,-232,-232,-232,858,-279,-232,-232,-232,-262,-232,933,-279,890,865',
+'866,647,-528,870,871,-232,-279,873,450,364,879,,654,653,,-232,-232,',
+'-232,-232,-232,-232,-232,204,,,,768,,641,640,639,645,642,,,,,,,,644',
+',641,640,639,645,642,-279,,,,,,,,-232,,-532,,,,,-232,647,-532,-532,-532',
+'269,-232,-532,-532,-532,,-532,654,653,,647,682,,,,-532,-532,-532,-532',
+'651,650,654,653,-232,,,-532,-532,,-532,-532,-532,-532,-532,,,,-232,',
+',,,-232,,,768,-232,641,640,639,645,642,,,,,-532,-532,-532,-532,-532',
+'-532,-532,-532,-532,-532,-532,-532,-532,-532,,,-532,-532,-532,,,-532',
+',,-532,,764,-532,-532,,-532,,-532,,-532,,-532,-532,-532,-532,-532,-532',
+'-532,,-532,-532,-532,644,,641,640,639,645,642,,,,,,,-532,-532,-532,-532',
+'-232,-532,,-532,,-532,,-232,-232,-232,,,-232,-232,-232,,-232,,,644,647',
+'641,640,639,645,642,-232,,,651,650,654,653,,,,-232,-232,,-232,-232,-232',
+'-232,-232,229,,,,768,,641,640,639,645,642,,647,633,,,243,244,,,,651',
+'650,654,653,,,,,,,,226,-232,232,-232,228,227,224,225,-232,647,-232,-232',
+'-232,269,-232,-232,-232,-232,,-232,654,653,,,,,,,-232,-232,-232,,,,',
+',-232,,,-232,-232,,-232,-232,-232,-232,-232,,,,-232,,,,,-232,,,768,-232',
+'641,640,639,645,642,,,,,-232,-232,-232,-232,-232,-232,-232,-232,-232',
+'-232,-232,-232,-232,-232,,,-232,-232,-232,,,-232,,269,-232,,764,-232',
+'-232,,-232,,-232,,-232,,-232,-232,-232,-232,-232,-232,-232,,-232,-232',
+'-232,,,,768,,641,640,639,645,642,,,-396,-232,-232,,-232,,-232,-396,-396',
+'-396,-232,,-396,-396,-396,724,-396,641,640,639,645,642,,,,-396,-396',
+'-396,764,,,,,,,,-396,-396,,-396,-396,-396,-396,-396,768,,641,640,639',
+'645,642,768,647,641,640,639,645,642,,,,651,650,654,653,,-396,-396,-396',
+'-396,-396,-396,-396,-396,-396,-396,-396,-396,-396,-396,,764,-396,-396',
+'-396,,,-396,764,269,-396,,,-396,-396,,-396,,-396,,-396,,-396,-396,-396',
+'-396,-396,-396,-396,,-396,-396,-396,,724,,641,640,639,645,642,,,,,,-396',
+'-396,,-396,,-396,,,,-396,5,68,69,65,7,51,,,,57,58,,,,61,647,59,60,62',
+'23,24,66,67,,651,650,654,653,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9',
+'96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,768,,641,640',
+'639,645,642,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,768,,641,640,639,645',
+'642,18,647,,,,83,75,78,79,,80,81,654,653,,76,82,5,68,69,65,7,51,56,',
+'77,57,58,,,647,61,,59,60,62,23,24,66,67,,654,653,,,22,28,27,92,91,93',
+'94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39',
+'37,,,,,,,,768,,641,640,639,645,642,,,,,,36,,,30,,,52,53,,,54,,32,,,',
+'40,768,,641,640,639,645,642,18,647,,,,83,75,78,79,,80,81,654,653,,76',
+'82,5,68,69,65,7,51,56,,77,57,58,,,647,61,,59,60,62,23,24,66,67,,654',
+'653,,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,768,,641,640,639,645,642,,,,,,36,,',
+'30,,,52,53,,,54,,32,,,,40,768,,641,640,639,645,642,18,647,,,,83,75,78',
+'79,,80,81,654,653,,76,82,5,68,69,65,7,51,56,,77,57,58,,,647,61,,59,60',
+'62,23,24,66,67,,654,653,,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96',
+'95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,229,-552,-552,-552,-552',
+'235,237,,,-552,-552,,,,,,243,244,,36,,,30,,,52,53,,,54,,32,226,,232',
+'40,228,227,224,225,236,234,230,18,231,,,,83,75,78,79,,80,81,,,,76,82',
+'5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28',
+'27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99',
+',84,85,38,39,37,229,-552,-552,-552,-552,235,237,,,-552,-552,,,,,,243',
+'244,,36,,,30,,,52,53,,,54,,32,226,,232,40,228,227,224,225,236,234,230',
+'18,231,,,,83,75,78,79,,80,81,,,,76,82,5,68,69,65,7,51,56,,77,57,58,',
+',,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,6,41',
+'8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,229,-552,-552',
+'-552,-552,235,237,,,-552,-552,,,,,,243,244,,36,,,30,,,52,53,,,54,,32',
+'226,,232,40,228,227,224,225,236,234,230,18,231,,,,83,75,78,79,,80,81',
+',,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,',
+',,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,',
+'90,98,99,,84,85,38,39,37,229,,,,,,,,,,,,,,,,243,244,,36,,,30,,,52,53',
+',,54,,32,226,,232,40,228,227,224,225,,,230,18,231,,,,83,75,78,79,,80',
+'81,,,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67',
+',,,,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,229,,,,,,,,,,,,,,,,243,244,,36,,,30,,,52,53',
+',,54,,32,226,,232,40,228,227,224,225,,,230,18,231,,,,83,75,78,79,,80',
+'81,,,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67',
+',,,,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,229,233,238,239,240,235,237,245,,241,242,',
+',,,,243,244,,36,,,30,,,52,53,,,54,,32,226,,232,40,228,227,224,225,236',
+'234,230,18,231,,,,83,75,78,79,,80,81,,,,76,82,5,68,69,65,7,51,56,,77',
+'57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,',
+',,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,229,233',
+'238,239,240,235,237,,,241,242,,,,,,243,244,,36,,,280,,,52,53,,,54,,32',
+'226,,232,40,228,227,224,225,236,234,230,18,231,,,,83,75,78,79,,80,81',
+',,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,',
+',,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,',
+'90,98,99,,84,85,38,39,37,229,233,238,239,240,235,237,245,246,241,242',
+',-552,-552,,,243,244,,36,,,30,,,52,53,,,54,,32,226,,232,40,228,227,224',
+'225,236,234,230,18,231,,,,83,75,78,79,,80,81,,,,76,82,5,68,69,65,7,51',
+'56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,',
+',17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37',
+'229,233,238,239,240,235,237,245,246,241,242,,-552,-552,,,243,244,,36',
+',,30,,,52,53,,,54,,32,226,,232,40,228,227,224,225,236,234,230,18,231',
+',,,83,75,78,79,,80,81,,,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59',
+'60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95',
+'97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,229,,,,,,,,,,,,,,,,243,244',
+',36,,,30,,,52,53,,,54,,32,226,,232,40,228,227,224,225,,,230,18,231,',
+',,83,75,78,79,,80,81,,,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59',
+'60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95',
+'97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,229,-552,-552,-552,-552',
+'235,237,,,-552,-552,,,,,,243,244,,36,,,30,,,52,53,,,54,,32,226,,232',
+'40,228,227,224,225,236,234,230,18,231,,,,83,75,78,79,,80,81,,,,76,82',
+'5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28',
+'27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99',
+',84,85,38,39,37,229,,,,,,,,,,,,,,,,243,244,,36,,,280,,,52,53,,,54,,32',
+'226,,232,40,228,227,224,225,,,230,18,231,,,,83,75,78,79,,80,81,,,,76',
+'82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22',
+'28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98',
+'99,,84,85,38,39,37,229,-552,-552,-552,-552,235,237,,,-552,-552,,,,,',
+'243,244,,36,,,30,,,52,53,,,54,,32,226,,232,40,228,227,224,225,236,234',
+'230,18,231,,,,83,75,78,79,,80,81,,,,76,82,5,68,69,65,7,51,56,,77,57',
+'58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,6',
+'41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,229,-552,-552',
+'-552,-552,235,237,,,-552,-552,,,,,,243,244,,36,,,30,,,52,53,,,54,,32',
+'226,,232,40,228,227,224,225,236,234,230,18,231,,,,83,75,78,79,,80,81',
+',,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,',
+',,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,',
+'90,98,99,,84,85,38,39,37,229,,,,,,,,,,,,,,,,243,244,,36,,,30,,,52,53',
+',,54,,32,226,,,40,228,227,224,225,,,,18,,,,,83,75,78,79,,80,81,,,,76',
+'82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22',
+'28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98',
+'99,,84,85,38,39,37,229,,,,,,,,,,,,,,,,243,244,,36,,,30,,,52,53,,,54',
+',32,226,,232,40,228,227,224,225,,,,18,,,,,83,75,78,79,,80,81,,,,76,82',
+'5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28',
+'27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99',
+',84,85,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,',
+',,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,5,68,69,65,7,51,56,,77,57,58',
+',,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,6,41',
+'8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,',
+',,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81',
+',,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,',
+',,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,',
+'90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32',
+',,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,5,68,69,65,7,51,56,',
+'77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17',
+',,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,',
+',,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,83,75,78',
+'79,,80,81,,,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24',
+'66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88',
+'87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,',
+',54,,32,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,5,68,69,65,7',
+'51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94',
+',,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,83,75',
+'78,79,,80,81,,,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23',
+'24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50',
+'88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53',
+',,54,,32,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,5,68,69,65',
+'7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93',
+'94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39',
+'37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,83',
+'75,78,79,,80,81,,,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59,60,62',
+'23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95,97,86',
+'50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52',
+'53,,,54,,32,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,5,68,69',
+'65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91',
+'93,94,,,17,,,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38',
+'39,37,,,,,,,,,,,,,,,,,,,,36,,,280,,,52,53,,,54,,32,,,,40,,,,,,,,18,',
+',,,83,75,78,79,,80,81,,,,76,82,5,68,69,65,7,51,56,,77,57,58,,,,61,,59',
+'60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,6,41,8,9,96,95',
+'97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,36,,',
+'30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,',
+'84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,',
+',,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,',
+',,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,,41,',
+',96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,',
+',,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,',
+',76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,',
+',259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90',
+'98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,',
+',40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77',
+'57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221',
+',,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,',
+',,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79',
+',80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66',
+'67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87',
+'89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,',
+'54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51',
+'56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93',
+'94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83',
+'75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62',
+'260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97',
+'86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220',
+',,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68',
+'69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294',
+'92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85',
+'38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219',
+',,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96',
+'95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214',
+',,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,',
+'84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,',
+',,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,',
+',,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,',
+',,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,',
+',,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80',
+'81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67',
+',,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54',
+',,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56',
+',77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94',
+',,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,',
+',,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75',
+'78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260',
+'261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86',
+'50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,',
+',52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69',
+'65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92',
+'91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38',
+'39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,',
+',,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96',
+'95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214',
+',,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,',
+'84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,',
+',,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,',
+',,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,',
+',,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,',
+',,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80',
+'81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67',
+',,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54',
+',,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56',
+',77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94',
+',,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,',
+',,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75',
+'78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260',
+'261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86',
+'50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,',
+',52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69',
+'65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92',
+'91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38',
+'39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,',
+',,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96',
+'95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214',
+',,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,',
+'84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,',
+',,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,',
+',,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,',
+',,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,',
+',,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80',
+'81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67',
+',,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54',
+',,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56',
+',77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94',
+',,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,',
+',,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75',
+'78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260',
+'261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86',
+'50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,',
+',52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69',
+'65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92',
+'91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38',
+'39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,',
+',,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96',
+'95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214',
+',,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,291,,,96,95,97,86,50,88,87,89,,90,98,99',
+',84,85,,644,295,641,640,639,645,642,,,,,,,,,,,,,,,824,,,220,,,52,53',
+',,54,,,,,,647,,,,,,,,,651,650,654,653,83,75,78,79,,80,81,,,,76,82,,68',
+'69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294',
+'92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85',
+'38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219',
+',,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96',
+'95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214',
+',,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,',
+'84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,699,,,,40',
+',,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,7,51,56,,77,57',
+'58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,6',
+'41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,',
+',,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,83,75,78,79,,80',
+'81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67',
+',,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54',
+',,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56',
+',77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94',
+',,221,,,,,,,41,,,96,95,97,86,50,88,87,89,263,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,588,,256,,40,,,,,,,,219,',
+',,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96',
+'95,97,86,50,88,87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,',
+',214,,,220,,,52,53,,,54,,,,256,,40,,,,,,,,219,,,,,83,75,78,79,,80,81',
+',,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,',
+',22,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98',
+'99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40',
+',,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58',
+',,,61,,59,60,62,260,261,66,67,,,,,,259,28,27,92,91,93,94,,,221,,,,,',
+',41,,,96,95,97,86,50,88,87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,',
+',,,,,,,,,,214,,,220,,,52,53,,,54,,258,,256,,40,,,,,,,,219,,,,,83,75',
+'78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260',
+'261,66,67,,,,,,259,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50',
+'88,87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,',
+',52,53,,,54,,258,,256,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,28',
+'27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,263,90,98,99',
+',84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,258,,256',
+',40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77',
+'57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,28,27,92,91,93,94,,,221',
+',,,,,,41,,,96,95,97,86,50,88,87,89,263,90,98,99,,84,85,38,39,37,,,,',
+',,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,258,,256,,40,,,,,,,,219,,,,,83',
+'75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62',
+'260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,291,,,96,95,97',
+'86,50,88,87,89,,90,98,99,,84,85,,644,295,641,640,639,645,642,,,,,,,',
+',,,,,,,288,,,285,,,52,53,,,54,,284,,,,647,682,,,,,,,,651,650,654,653',
+'83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60',
+'62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,557,291,,,96',
+'95,97,86,50,88,87,89,,90,98,99,,84,85,,,295,,229,233,238,239,240,235',
+'237,245,246,241,242,,222,223,,,243,244,288,,,220,,,52,53,,,54,,,,226',
+',232,,228,227,224,225,236,234,230,,231,,,83,75,78,79,,80,81,,,,76,82',
+',,247,297,-226,,56,,77,68,69,65,,51,,,,57,58,,,,61,,59,60,62,260,261',
+'66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88',
+'87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52',
+'53,,,54,,588,,256,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68',
+'69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294',
+'92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85',
+'38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,588,,256,,40,,,',
+',,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,',
+',,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,',
+',,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,',
+',,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80',
+'81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67',
+',,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54',
+',,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56',
+',77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94',
+',,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,',
+',,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75',
+'78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23',
+'24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,,41,,,96,95,97,86,50,88',
+'87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53',
+',,54,,,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51',
+'56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93',
+'94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,263,90,98,99,,84,85,38,39',
+'37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,258,,,,40,,,,,,,,219,',
+',,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96',
+'95,97,86,50,88,87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,',
+',214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,',
+',76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22',
+'28,27,92,91,93,94,,,17,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99',
+',84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,',
+',,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,',
+',,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,,41,',
+',96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,',
+',,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,',
+',76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22',
+'28,27,92,91,93,94,,,17,,,,,560,,41,,,96,95,97,86,50,88,87,89,,90,98',
+'99,,84,85,38,39,37,229,233,238,239,240,235,237,245,246,241,242,,222',
+'223,,,243,244,,214,,,220,,,52,53,,,54,,,226,,232,40,228,227,224,225',
+'236,234,230,18,231,,,,83,75,78,79,,80,81,,,,76,82,104,247,,,,103,56',
+',77,68,69,65,,51,,,,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,291,,,96,95,97,86,50,88,87,89,,90,98,99',
+',84,85,,644,295,641,640,639,645,642,,,,,,,,,,,,,,,329,,,30,,,52,53,',
+',54,,32,,,,647,,,,,,,,,651,650,654,653,83,75,78,79,,80,81,,,,76,82,',
+'68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,291,,,96,95,97,334,50,88,87,335,,90,98,99',
+',84,85,,724,295,641,640,639,645,642,,,,,,,,,,,,341,,,336,,,220,,,52',
+'53,,,54,,,,,,647,,,,,,,,,651,650,654,653,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,291,,,96,95,97,334,50,88,87,335,,90,98,99',
+',84,85,,644,295,641,640,639,645,642,,,,,,,,,,,,,,,336,,,220,,,52,53',
+',,54,,,,,,647,,,,,,,,,651,650,654,653,83,75,78,79,,80,81,,,,76,82,,68',
+'69,65,7,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92',
+'91,93,94,,,17,,,,,557,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84',
+'85,38,39,37,229,233,238,239,240,235,237,245,246,241,242,,222,223,,,243',
+'244,,36,,,30,,,52,53,,,54,,32,226,,232,40,228,227,224,225,236,234,230',
+'18,231,,,,83,75,78,79,,80,81,,,,76,82,,247,,,,366,56,,77,68,69,65,,51',
+',,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17',
+',,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,',
+',,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,83,75,78,79',
+',80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23,24,66',
+'67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,,41,,,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54',
+',,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,',
+'77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17',
+',,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,',
+',,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,83,75,78,79',
+',80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23,24,66',
+'67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,,41,,,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54',
+',,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,7,51,56',
+',77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17',
+',,,,,6,41,8,9,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,',
+',,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,83,75,78',
+'79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261',
+'66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,291,,,96,95,97,86,50',
+'88,87,89,,90,98,99,,84,85,,,295,,,,,,,,,,,,,,,,,,,,868,,,220,,,52,53',
+',,54,,,,,,,,,,,,,,,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56',
+',77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94',
+',,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,',
+',,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75',
+'78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23',
+'24,66,67,,,,,,22,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88',
+'87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53',
+',,54,,383,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65',
+',51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93',
+'94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,383,,,,40,,,,,,,,219,,,,',
+'83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60',
+'62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86',
+'50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,',
+',52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69',
+'65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,28,27,92',
+'91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,263,90,98,99,,84,85',
+'38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,258,,256,,40,,,',
+',,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,',
+',,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,221,,,,,,,41',
+',,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,',
+',,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81',
+',,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,',
+',22,28,27,92,91,93,94,,,17,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98',
+'99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40',
+',,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58',
+',,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,,41',
+',,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,',
+',,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,',
+',,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,',
+'22,28,27,92,91,93,94,,,17,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98',
+'99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40',
+',,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58',
+',,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,,41',
+',,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,',
+',,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,',
+',,76,82,210,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67',
+',,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54',
+',588,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51',
+'56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,28,27,92,91,93,94',
+',,221,,,,,,,41,,,96,95,97,86,50,88,87,89,263,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,258,,256,,40,,,,,,,,219,',
+',,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95',
+'97,86,50,88,87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214',
+',,220,,,464,53,,,54,,258,,256,,40,,,,,,,,219,,,,,83,75,78,79,,80,81',
+',,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,',
+',,,259,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,263',
+'90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,',
+'258,,256,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,210,68,69,65',
+',51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91',
+'93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,263,90,98,99,,84,85,38',
+'39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,258,,256,,40,,,,,,',
+',219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61',
+',59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,291',
+',,96,95,97,86,50,88,87,89,,90,98,99,,84,85,,,295,229,233,238,239,240',
+'235,237,245,246,241,242,,222,223,,,243,244,,288,,,220,,,52,53,,,54,',
+',226,,232,,228,227,224,225,236,234,230,,231,,,,83,75,78,79,,80,81,,',
+',76,82,,247,,474,,,56,,77,68,69,65,,51,,,,57,58,,,,61,,59,60,62,260',
+'261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86',
+'50,88,87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220',
+',,52,53,,,54,,258,,256,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,',
+'84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,',
+',,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,',
+',,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,',
+',,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,',
+',,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80',
+'81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67',
+',,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54',
+',,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56',
+',77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94',
+',,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,',
+',,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75',
+'78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23',
+'24,66,67,,,,,,22,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88',
+'87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53',
+',,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51',
+'56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93',
+'94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83',
+'75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62',
+'260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,291,,,96,95,97',
+'86,50,88,87,89,,90,98,99,,84,85,,,295,,,,,,,,,,,,,,,,,,,,288,,,285,',
+',52,53,,,54,,,,,,,,,,,,,,,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65',
+',51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93',
+'94,,,17,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,83,75',
+'78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260',
+'261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86',
+'50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,492',
+',52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69',
+'65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92',
+'91,93,94,,,221,,,,,,,291,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85',
+',,295,,,,,,,,,,,,,,,,,,,,288,,,285,,,52,53,,,54,,,,,,,,,,,,,,,,,,,83',
+'75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62',
+'23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,,41,,,96,95,97,86,50',
+'88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52',
+'53,,,54,,,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65',
+',51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93',
+'94,,,17,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,83,75',
+'78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260',
+'261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,291,,,96,95,97,86',
+'50,88,87,89,,90,98,99,,84,85,,,295,,,,,,,,,,,,,,,,,,,,288,,,285,,,52',
+'53,,,54,,,,,,,,,,,,,,,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51',
+'56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93',
+'94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83',
+'75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62',
+'23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,,41,,,96,95,97,86,50',
+'88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52',
+'53,,,54,,,,,,40,,,,,,,,18,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65',
+',51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91',
+'93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39',
+'37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,',
+'83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60',
+'62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86',
+'50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,',
+',52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69',
+'65,,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91',
+'93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39',
+'37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,',
+'83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60',
+'62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86',
+'50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,',
+',52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69',
+'65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92',
+'91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38',
+'39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,',
+',,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96',
+'95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214',
+',,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27',
+'92,91,93,94,,,17,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85',
+'38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18',
+',,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96',
+'95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214',
+',,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27',
+'92,91,93,94,,,17,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85',
+'38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18',
+',,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95',
+'97,86,50,88,87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214',
+',,220,,,52,53,,,54,,258,,256,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,',
+',,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,',
+',,259,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,263',
+'90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,',
+'258,,256,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51',
+'56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93',
+'94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83',
+'75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62',
+'260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97',
+'86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220',
+',,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68',
+'69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294',
+'92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85',
+'38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219',
+',,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,260,261,66,67,,,,,,259,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95',
+'97,86,50,88,87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214',
+',,220,,,52,53,,,54,,258,,256,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,',
+',,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,',
+',,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,',
+'90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,',
+'258,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56',
+',77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94',
+',,221,,,,,,,41,,,96,95,97,86,50,88,87,89,263,90,98,99,,84,85,38,39,37',
+',,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83',
+'75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62',
+'260,261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97',
+'86,50,88,87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,',
+',220,,,52,53,,,54,,588,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76',
+'82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259',
+'290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98',
+'99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,383,,',
+',40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77',
+'57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,',
+',,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,',
+',,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,83,75,78,79,,80',
+'81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67',
+',,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86,50,88,87,89',
+',90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54',
+',,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56',
+',77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92,91,93,94',
+',,221,,,,,,,41,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85,38,39,37,',
+',,,,,,,,,,,,,,,,,,214,,,220,,,52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75',
+'78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260',
+'261,66,67,,,,,,259,290,294,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86',
+'50,88,87,89,,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220,',
+',52,53,,,54,,,,,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82,,68,69',
+'65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290,294,92',
+'91,93,94,,,221,,,,,,,291,,,96,95,97,86,50,88,87,89,,90,98,99,,84,85',
+',,295,,,,,,,,,,,,,,,,,,,,288,,,285,,,52,53,,,54,,,,,,,,,,,,,,,,,,,83',
+'75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59,60,62',
+'260,261,66,67,,,,,,259,28,27,92,91,93,94,,,221,,,,,,,41,,,96,95,97,86',
+'50,88,87,89,263,90,98,99,,84,85,38,39,37,,,,,,,,,,,,,,,,,,,,214,,,220',
+',,52,53,,,54,,258,,256,,40,,,,,,,,219,,,,,83,75,78,79,,80,81,,,,76,82',
+',68,69,65,,51,56,,77,57,58,,,,61,,59,60,62,260,261,66,67,,,,,,259,290',
+'294,92,91,93,94,,,221,,,,,,,291,,,96,95,97,86,50,88,87,89,,90,98,99',
+',84,85,,,295,,,,,,,,,,,,,,,,,,,,288,,,285,,,52,53,,,54,,,,,,,,,,,,,',
+',,,,,83,75,78,79,,80,81,,,,76,82,,68,69,65,,51,56,,77,57,58,,,,61,,59',
+'60,62,23,24,66,67,,,,,,22,28,27,92,91,93,94,,,17,,,,,,,41,,,96,95,97',
+'86,50,88,87,89,263,90,98,99,,84,85,38,39,37,229,233,238,239,240,235',
+'237,245,246,241,242,,222,223,,,243,244,,214,,-226,220,,,52,53,,,54,',
+',226,256,232,40,228,227,224,225,236,234,230,18,231,,,,83,75,78,79,,80',
+'81,,,,76,82,,247,,-226,,,56,,77,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,83,,,,,,,,,,,82,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,83,,,,,,,,,,,82,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,83,,,,,,,,,,,82,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,83,,,,,,,,,,,82,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,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,351,350,352,349,158,177',
+'176,,,,,,157,164,155,156,346,347,348,344,116,88,87,345,,90,,,,,,147',
+'148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,356',
+',,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145,124,576,403',
+'151,,577,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149',
+'150,136,137,,,,,,269,,,,,,,,141,140,,125,146,143,142,138,139,133,131',
+'123,145,124,456,396,151,,457,,,,,,,,147,148,,144,126,127,128,135,132',
+'134,,,129,130,,,,149,150,136,137,,,,,,269,,,,,,,,141,140,,125,146,143',
+'142,138,139,133,131,123,145,124,392,396,151,,393,,,,,,,,147,148,,144',
+'126,127,128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,269,,,,,,',
+',141,140,,125,146,143,142,138,139,133,131,123,145,124,574,396,151,,575',
+',,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136',
+'137,,,,,,269,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145',
+'124,942,403,151,,941,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129',
+'130,,,,149,150,136,137,,,,,,269,,,,,,,,141,140,,125,146,143,142,138',
+'139,133,131,123,145,124,611,396,151,,612,,,,,,,,147,148,,144,126,127',
+'128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,269,,,,,,,,141,140',
+',125,146,143,142,138,139,133,131,123,145,124,614,403,151,,615,,,,,,',
+',147,148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136,137,',
+',,,,269,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145,124',
+'576,403,151,,577,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130',
+',,,149,150,136,137,,,,,,269,,,,,,,,141,140,,125,146,143,142,138,139',
+'133,131,123,145,124,398,403,151,,400,,,,,,,,147,148,,144,126,127,128',
+'135,132,134,,,129,130,,,,149,150,136,137,,,,,,269,,,,,,,,141,140,,125',
+'146,143,142,138,139,133,131,123,145,124,574,396,151,,575,,,,,,,,147',
+'148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,269',
+',,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145,124,920,396',
+'151,,921,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149',
+'150,136,137,,,,,,269,,,,,,,,141,140,,125,146,143,142,138,139,133,131',
+'123,145,124,456,396,151,,457,,,,,,,,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,456,396,151,,457,,,,,,,,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,669,403,151,,670,,,,,,',
+',147,148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136,137,',
+',,,,269,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145,124',
+'672,403,151,,673,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130',
+',,,149,150,136,137,,,,,,269,,,,,,,,141,140,,125,146,143,142,138,139',
+'133,131,123,145,124,922,403,151,,923,,,,,,,,147,148,,144,126,127,128',
+'135,132,134,,,129,130,,,,149,150,136,137,,,,,,269,,,,,,,,141,140,,125',
+'146,143,142,138,139,133,131,123,145,124,667,396,151,,668,,,,,,,,147',
+'148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,269',
+',,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145,124,,,151,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,210,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,,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(23453, 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 = [
+'400,363,745,321,320,825,668,400,400,400,781,537,537,400,400,340,400',
+'598,336,465,595,17,336,622,622,330,362,446,846,665,920,466,311,309,309',
+'311,400,400,345,400,400,400,400,400,921,345,851,213,851,670,512,667',
+'632,465,595,879,944,822,17,598,41,446,363,363,363,466,400,400,400,400',
+'400,400,400,400,400,400,400,400,400,400,511,782,400,400,400,519,400',
+'531,531,362,400,829,55,400,410,410,345,213,400,830,400,537,400,400,400',
+'400,400,400,400,327,400,668,400,622,670,781,745,321,320,825,340,745',
+'321,320,825,577,400,400,922,400,330,400,577,577,577,400,400,577,577',
+'577,340,577,846,665,920,340,665,846,665,920,512,577,577,577,670,512',
+'667,632,921,923,26,577,577,921,577,577,577,577,577,879,944,822,575,831',
+'879,944,822,531,55,669,511,782,531,3,410,511,782,548,3,416,519,577,577',
+'577,577,577,577,577,577,577,577,577,577,577,577,922,611,577,577,577',
+'606,577,577,292,327,577,644,606,577,577,715,577,575,577,26,577,361,577',
+'577,577,577,577,577,577,834,577,923,577,614,416,215,835,922,823,669',
+'837,26,922,548,548,823,577,577,577,577,576,577,548,577,823,577,577,576',
+'576,576,644,561,576,576,576,715,576,611,923,324,934,934,292,923,324',
+'576,576,576,576,669,574,347,361,361,361,215,576,576,347,576,576,576',
+'576,576,292,683,823,612,614,614,683,350,724,611,561,840,611,25,350,315',
+'360,561,315,611,25,842,576,576,576,576,576,576,576,576,576,576,576,576',
+'576,576,574,738,576,576,576,614,576,576,614,347,576,35,349,576,576,614',
+'576,36,576,349,576,724,576,576,576,576,576,576,576,350,576,576,576,612',
+'582,25,582,582,582,582,582,360,360,360,848,392,576,576,576,576,89,576',
+'849,576,35,576,576,89,89,89,530,35,89,89,89,530,89,738,854,612,349,582',
+'612,423,89,859,89,89,89,612,582,582,582,582,319,319,89,89,392,89,89',
+'89,89,89,767,392,767,767,767,767,767,348,860,738,861,423,738,359,348',
+'423,423,862,358,738,582,864,89,89,89,89,89,89,89,89,89,89,89,89,89,89',
+'73,868,89,89,89,631,89,89,631,73,89,34,312,89,89,312,89,14,89,73,89',
+'875,89,89,89,89,89,89,89,348,89,894,89,894,894,894,894,894,359,359,359',
+'20,767,358,358,358,89,89,89,89,86,89,299,89,42,89,89,86,86,86,14,42',
+'86,86,86,393,86,14,422,880,42,881,13,344,86,896,86,86,86,13,344,37,37',
+'672,295,295,86,86,13,86,86,86,86,86,677,299,656,656,12,677,422,11,299',
+'346,422,422,10,354,393,894,346,917,42,919,354,393,86,86,86,86,86,86',
+'86,86,86,86,86,86,86,86,13,344,86,86,86,672,86,86,15,15,86,9,672,86',
+'86,8,86,672,86,926,86,672,86,86,86,86,86,86,86,398,86,346,86,352,289',
+'354,398,398,398,672,352,289,398,398,927,398,86,86,86,86,289,86,351,86',
+'398,86,86,928,929,351,522,930,335,672,932,398,398,522,398,398,398,398',
+'398,935,936,937,522,938,939,841,940,841,841,841,841,841,941,461,113',
+'467,470,352,289,113,113,398,398,398,398,398,398,398,398,398,398,398',
+'398,398,398,469,351,398,398,398,335,398,841,473,522,398,475,335,398',
+'480,334,841,335,398,484,398,335,398,398,398,398,398,398,398,493,398',
+'398,398,496,286,427,426,508,425,335,424,286,513,514,412,28,398,398,399',
+'398,286,398,28,28,28,398,398,28,28,28,390,28,386,335,541,541,441,334',
+'541,541,541,28,28,328,334,384,378,545,377,334,328,28,28,334,28,28,28',
+'28,28,328,551,723,286,723,723,723,558,723,441,562,565,334,441,441,441',
+'441,4,4,4,4,4,28,28,28,28,28,28,28,28,28,28,28,28,28,28,334,442,28,28',
+'28,867,328,28,569,28,28,578,867,28,28,580,28,585,28,587,28,867,28,28',
+'28,28,28,28,28,331,28,329,28,442,338,599,601,442,442,442,442,338,326',
+'325,608,404,28,28,610,28,338,28,404,404,404,28,613,404,404,404,316,404',
+'866,867,866,866,866,302,866,616,404,404,404,404,302,365,365,365,365',
+'365,617,404,404,302,404,404,404,404,404,942,620,621,338,314,647,623',
+'647,647,647,647,647,111,111,111,111,111,313,626,627,634,635,404,404',
+'404,404,404,404,404,404,404,404,404,404,404,404,302,636,404,404,404',
+'637,647,404,645,652,404,655,658,404,404,647,404,663,404,666,404,308',
+'404,404,404,404,404,404,404,307,404,404,404,304,301,675,479,300,287',
+'680,296,1,698,479,294,287,404,404,404,404,50,404,479,404,287,404,291',
+'50,50,50,951,960,50,50,50,754,50,754,754,754,754,754,673,290,288,717',
+'50,50,50,673,718,719,721,722,673,726,50,50,673,50,50,50,50,50,479,283',
+'287,282,734,735,736,764,754,764,764,764,764,764,737,281,279,754,754',
+'754,754,268,50,50,50,50,50,50,50,50,50,50,50,50,50,50,673,257,50,50',
+'50,752,760,50,764,254,50,766,253,50,50,768,50,764,50,769,50,772,50,50',
+'50,50,50,50,50,221,50,775,50,217,216,759,212,759,759,759,759,759,214',
+'212,784,193,50,50,50,50,455,50,212,50,788,50,789,455,455,455,792,615',
+'455,455,455,793,455,961,615,962,805,806,759,615,812,813,455,615,814',
+'816,100,824,,759,759,,455,455,,455,455,455,455,455,212,,,,803,,803,803',
+'803,803,803,,,,,,,,533,,533,533,533,533,533,615,,,,,,,,455,,403,,,,',
+'455,803,403,403,403,455,455,403,403,403,,403,803,803,,533,533,,,,403',
+'403,403,403,533,533,533,533,455,,,403,403,,403,403,403,403,403,,,,455',
+',,,,455,,,950,455,950,950,950,950,950,,,,,403,403,403,403,403,403,403',
+'403,403,403,403,403,403,403,,,403,403,403,,,403,,,403,,950,403,403,',
+'403,,403,,403,,403,403,403,403,403,403,403,,403,403,403,633,,633,633',
+'633,633,633,,,,,,,403,403,403,403,458,403,,403,,403,,458,458,458,,,458',
+'458,458,,458,,,506,633,506,506,506,506,506,458,,,633,633,633,633,,,',
+'458,458,,458,458,458,458,458,428,,,,946,,946,946,946,946,946,,506,506',
+',,428,428,,,,506,506,506,506,,,,,,,,428,458,428,394,428,428,428,428',
+'458,946,394,394,394,458,458,394,394,394,,394,946,946,,,,,,,394,394,394',
+',,,,,458,,,394,394,,394,394,394,394,394,,,,458,,,,,458,,,931,458,931',
+'931,931,931,931,,,,,394,394,394,394,394,394,394,394,394,394,394,394',
+'394,394,,,394,394,394,,,394,,394,394,,931,394,394,,394,,394,,394,,394',
+'394,394,394,394,394,394,,394,394,394,,,,895,,895,895,895,895,895,,,27',
+'394,394,,394,,394,27,27,27,394,,27,27,27,798,27,798,798,798,798,798',
+',,,27,27,27,895,,,,,,,,27,27,,27,27,27,27,27,843,,843,843,843,843,843',
+'933,798,933,933,933,933,933,,,,798,798,798,798,,27,27,27,27,27,27,27',
+'27,27,27,27,27,27,27,,843,27,27,27,,,27,933,27,27,,,27,27,,27,,27,,27',
+',27,27,27,27,27,27,27,,27,27,27,,800,,800,800,800,800,800,,,,,,27,27',
+',27,,27,,,,27,903,903,903,903,903,903,,,,903,903,,,,903,800,903,903',
+'903,903,903,903,903,,800,800,800,800,903,903,903,903,903,903,903,,,903',
+',,,,,903,903,903,903,903,903,903,903,903,903,903,903,,903,903,903,,903',
+'903,903,903,903,,,,,,,,956,,956,956,956,956,956,,,,,,903,,,903,,,903',
+'903,,,903,,903,,,,903,886,,886,886,886,886,886,903,956,,,,903,903,903',
+'903,,903,903,956,956,,903,903,897,897,897,897,897,897,903,,903,897,897',
+',,886,897,,897,897,897,897,897,897,897,,886,886,,,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,,,,,,,,888,,888,888,888,888,888,,,',
+',,897,,,897,,,897,897,,,897,,897,,,,897,890,,890,890,890,890,890,897',
+'888,,,,897,897,897,897,,897,897,888,888,,897,897,828,828,828,828,828',
+'828,897,,897,828,828,,,890,828,,828,828,828,828,828,828,828,,890,890',
+',,828,828,828,828,828,828,828,,,828,,,,,,828,828,828,828,828,828,828',
+'828,828,828,828,828,,828,828,828,,828,828,828,828,828,,,,,,,,909,,909',
+'909,909,909,909,,,,,,828,,,828,,,828,828,,,828,,828,,,,828,911,,911',
+'911,911,911,911,828,909,,,,828,828,828,828,,828,828,909,909,,828,828',
+'786,786,786,786,786,786,828,,828,786,786,,,911,786,,786,786,786,786',
+'786,786,786,,911,911,,,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,437,437,437,437,437,437,437,,,437,437,,,,,,437,437,,786,,,786,,',
+'786,786,,,786,,786,437,,437,786,437,437,437,437,437,437,437,786,437',
+',,,786,786,786,786,,786,786,,,,786,786,195,195,195,195,195,195,786,',
+'786,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,431,431,431,431,431,431,431,,,431',
+'431,,,,,,431,431,,195,,,195,,,195,195,,,195,,195,431,,431,195,431,431',
+'431,431,431,431,431,195,431,,,,195,195,195,195,,195,195,,,,195,195,196',
+'196,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,439,439',
+'439,439,439,439,439,,,439,439,,,,,,439,439,,196,,,196,,,196,196,,,196',
+',196,439,,439,196,439,439,439,439,439,439,439,196,439,,,,196,196,196',
+'196,,196,196,,,,196,196,827,827,827,827,827,827,196,,196,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,827,827,827,435,,,,,,,,,,,,,,,,435,435,,827,,,827,,,827,827',
+',,827,,827,435,,435,827,435,435,435,435,,,435,827,435,,,,827,827,827',
+'827,,827,827,,,,827,827,625,625,625,625,625,625,827,,827,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,434,,,,,,,,,,,,,,,,434,434,,625,,,625,,,625,625',
+',,625,,625,434,,434,625,434,434,434,434,,,434,625,434,,,,625,625,625',
+'625,,625,625,,,,625,625,676,676,676,676,676,676,625,,625,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,444,444,444,444,444,444,444,444,,444,444,,,,,,444',
+'444,,676,,,676,,,676,676,,,676,,676,444,,444,676,444,444,444,444,444',
+'444,444,676,444,,,,676,676,676,676,,676,676,,,,676,676,285,285,285,285',
+'285,285,676,,676,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,443,443,443,443,443,443',
+'443,,,443,443,,,,,,443,443,,285,,,285,,,285,285,,,285,,285,443,,443',
+'285,443,443,443,443,443,443,443,285,443,,,,285,285,285,285,,285,285',
+',,,285,285,730,730,730,730,730,730,285,,285,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,421,421,421,421,421,421,421,421,421,421,421,,421,421,,,421,421',
+',730,,,730,,,730,730,,,730,,730,421,,421,730,421,421,421,421,421,421',
+'421,730,421,,,,730,730,730,730,,730,730,,,,730,730,51,51,51,51,51,51',
+'730,,730,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,420,420,420,420,420,420,420,420,420,420,420,,420,420,,,420,420,,51',
+',,51,,,51,51,,,51,,51,420,,420,51,420,420,420,420,420,420,420,51,420',
+',,,51,51,51,51,,51,51,,,,51,51,532,532,532,532,532,532,51,,51,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,433,,,,,,,,,,,,,,,,433,433,,532,,,532,,,532',
+'532,,,532,,532,433,,433,532,433,433,433,433,,,433,532,433,,,,532,532',
+'532,532,,532,532,,,,532,532,0,0,0,0,0,0,532,,532,0,0,,,,0,,0,0,0,0,0',
+'0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0',
+'0,0,0,438,438,438,438,438,438,438,,,438,438,,,,,,438,438,,0,,,0,,,0',
+'0,,,0,,0,438,,438,0,438,438,438,438,438,438,438,0,438,,,,0,0,0,0,,0',
+'0,,,,0,0,280,280,280,280,280,280,0,,0,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',
+'432,,,,,,,,,,,,,,,,432,432,,280,,,280,,,280,280,,,280,,280,432,,432',
+'280,432,432,432,432,,,432,280,432,,,,280,280,280,280,,280,280,,,,280',
+'280,681,681,681,681,681,681,280,,280,681,681,,,,681,,681,681,681,681',
+'681,681,681,,,,,,681,681,681,681,681,681,681,,,681,,,,,,681,681,681',
+'681,681,681,681,681,681,681,681,681,,681,681,681,,681,681,681,681,681',
+'436,436,436,436,436,436,436,,,436,436,,,,,,436,436,,681,,,681,,,681',
+'681,,,681,,681,436,,436,681,436,436,436,436,436,436,436,681,436,,,,681',
+'681,681,681,,681,681,,,,681,681,742,742,742,742,742,742,681,,681,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,440,440,440,440,440,440,440,,,440,440,',
+',,,,440,440,,742,,,742,,,742,742,,,742,,742,440,,440,742,440,440,440',
+'440,440,440,440,742,440,,,,742,742,742,742,,742,742,,,,742,742,691,691',
+'691,691,691,691,742,,742,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,430,,,,,,',
+',,,,,,,,,430,430,,691,,,691,,,691,691,,,691,,691,430,,,691,430,430,430',
+'430,,,,691,,,,,691,691,691,691,,691,691,,,,691,691,780,780,780,780,780',
+'780,691,,691,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,429,,,,,,,,,,,,,,,,429,429',
+',780,,,780,,,780,780,,,780,,780,429,,429,780,429,429,429,429,,,,780',
+',,,,780,780,780,780,,780,780,,,,780,780,584,584,584,584,584,584,780',
+',780,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,,,,584',
+'584,777,777,777,777,777,777,584,,584,777,777,,,,777,,777,777,777,777',
+'777,777,777,,,,,,777,777,777,777,777,777,777,,,777,,,,,,777,777,777',
+'777,777,777,777,777,777,777,777,777,,777,777,777,,777,777,777,777,777',
+',,,,,,,,,,,,,,,,,,,777,,,777,,,777,777,,,777,,777,,,,777,,,,,,,,777',
+',,,,777,777,777,777,,777,777,,,,777,777,776,776,776,776,776,776,777',
+',777,776,776,,,,776,,776,776,776,776,776,776,776,,,,,,776,776,776,776',
+'776,776,776,,,776,,,,,,776,776,776,776,776,776,776,776,776,776,776,776',
+',776,776,776,,776,776,776,776,776,,,,,,,,,,,,,,,,,,,,776,,,776,,,776',
+'776,,,776,,776,,,,776,,,,,,,,776,,,,,776,776,776,776,,776,776,,,,776',
+'776,507,507,507,507,507,507,776,,776,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,220,220,220,220,220,220,507',
+',507,220,220,,,,220,,220,220,220,220,220,220,220,,,,,,220,220,220,220',
+'220,220,220,,,220,,,,,,220,220,220,220,220,220,220,220,220,220,220,220',
+',220,220,220,,220,220,220,220,220,,,,,,,,,,,,,,,,,,,,220,,,220,,,220',
+'220,,,220,,220,,,,220,,,,,,,,220,,,,,220,220,220,220,,220,220,,,,220',
+'220,510,510,510,510,510,510,220,,220,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,510,603,603,603,603,603,603,510',
+',510,603,603,,,,603,,603,603,603,603,603,603,603,,,,,,603,603,603,603',
+'603,603,603,,,603,,,,,,603,603,603,603,603,603,603,603,603,603,603,603',
+',603,603,603,,603,603,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603',
+'603,,,603,,603,,,,603,,,,,,,,603,,,,,603,603,603,603,,603,603,,,,603',
+'603,604,604,604,604,604,604,603,,603,604,604,,,,604,,604,604,604,604',
+'604,604,604,,,,,,604,604,604,604,604,604,604,,,604,,,,,,604,604,604',
+'604,604,604,604,604,604,604,604,604,,604,604,604,,604,604,604,604,604',
+',,,,,,,,,,,,,,,,,,,604,,,604,,,604,604,,,604,,604,,,,604,,,,,,,,604',
+',,,,604,604,604,604,,604,604,,,,604,604,821,821,821,821,821,821,604',
+',604,821,821,,,,821,,821,821,821,821,821,821,821,,,,,,821,821,821,821',
+'821,821,821,,,821,,,,,,821,821,821,821,821,821,821,821,821,821,821,821',
+',821,821,821,,821,821,821,821,821,,,,,,,,,,,,,,,,,,,,821,,,821,,,821',
+'821,,,821,,821,,,,821,,,,,,,,821,,,,,821,821,821,821,,821,821,,,,821',
+'821,30,30,30,30,30,30,821,,821,30,30,,,,30,,30,30,30,30,30,30,30,,,',
+',,30,30,30,30,30,30,30,,,30,,,,,,30,30,30,30,30,30,30,30,30,30,30,30',
+',30,30,30,,30,30,30,30,30,,,,,,,,,,,,,,,,,,,,30,,,30,,,30,30,,,30,,30',
+',,,30,,,,,,,,30,,,,,30,30,30,30,,30,30,,,,30,30,905,905,905,905,905',
+'905,30,,30,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,,219,219,219,,219,905,,905,219,219,,,,219,,219,219,219,219',
+'219,219,219,,,,,,219,219,219,219,219,219,219,,,219,,,,,,,219,,,219,219',
+'219,219,219,219,219,219,,219,219,219,,219,219,219,219,219,,,,,,,,,,',
+',,,,,,,,,219,,,219,,,219,219,,,219,,,,,,219,,,,,,,,219,,,,,219,219,219',
+'219,,219,219,,,,219,219,,774,774,774,,774,219,,219,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,,222,222,222,,222,774,,774,222',
+'222,,,,222,,222,222,222,222,222,222,222,,,,,,222,222,222,222,222,222',
+'222,,,222,,,,,,,222,,,222,222,222,222,222,222,222,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,,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,,761,761,761',
+',761,247,,247,761,761,,,,761,,761,761,761,761,761,761,761,,,,,,761,761',
+'761,761,761,761,761,,,761,,,,,,,761,,,761,761,761,761,761,761,761,761',
+',761,761,761,,761,761,761,761,761,,,,,,,,,,,,,,,,,,,,761,,,761,,,761',
+'761,,,761,,,,,,761,,,,,,,,761,,,,,761,761,761,761,,761,761,,,,761,761',
+',256,256,256,,256,761,,761,256,256,,,,256,,256,256,256,256,256,256,256',
+',,,,,256,256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256,256,256',
+'256,256,256,,256,256,256,,256,256,256,256,256,,,,,,,,,,,,,,,,,,,,256',
+',,256,,,256,256,,,256,,,,,,256,,,,,,,,256,,,,,256,256,256,256,,256,256',
+',,,256,256,,746,746,746,,746,256,,256,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,,682,746,682,682,682,682',
+'682,,,,,,,,,,,,,,,746,,,746,,,746,746,,,746,,,,,,682,,,,,,,,,682,682',
+'682,682,746,746,746,746,,746,746,,,,746,746,,258,258,258,,258,746,,746',
+'258,258,,,,258,,258,258,258,258,258,258,258,,,,,,258,258,258,258,258',
+'258,258,,,258,,,,,,,258,,,258,258,258,258,258,258,258,258,,258,258,258',
+',258,258,258,258,258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,',
+',,,258,,,,,,,,258,,,,,258,258,258,258,,258,258,,,,258,258,,263,263,263',
+',263,258,,258,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',
+',559,559,559,,559,263,,263,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,,5,5,5,5,5,559,,559,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5',
+'5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,',
+',,,,,,,,,,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,5,,,,,5,5,5,5,,5,5,,,,5,5',
+',452,452,452,,452,5,,5,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,,448,448,448,,448,452,,452,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,448,,450,450,450,,450,448,,448,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,,18,18,18,,18',
+'450,,450,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,,876,876',
+'876,,876,24,,24,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,876,,876,876',
+',,,876,876,,31,31,31,,31,876,,876,31,31,,,,31,,31,31,31,31,31,31,31',
+',,,,,31,31,31,31,31,31,31,,,31,,,,,,,31,,,31,31,31,31,31,31,31,31,,31',
+'31,31,,31,31,,857,31,857,857,857,857,857,,,,,,,,,,,,,,,31,,,31,,,31',
+'31,,,31,,31,,,,857,857,,,,,,,,857,857,857,857,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,,,,,,381,32,,,32,32,32,32,32,32,32,32,,32,32',
+'32,,32,32,,,32,,381,381,381,381,381,381,381,381,381,381,381,,381,381',
+',,381,381,32,,,32,,,32,32,,,32,,,,381,,381,,381,381,381,381,381,381',
+'381,,381,,,32,32,32,32,,32,32,,,,32,32,,,381,32,381,,32,,32,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,,,,,,,,873,,,,,873,873,873,873,,873,873',
+',,,873,873,,870,870,870,,870,873,,873,870,870,,,,870,,870,870,870,870',
+'870,870,870,,,,,,870,870,870,870,870,870,870,,,870,,,,,,,870,,,870,870',
+'870,870,870,870,870,870,,870,870,870,,870,870,870,870,870,,,,,,,,,,',
+',,,,,,,,,870,,,870,,,870,870,,,870,,870,,870,,870,,,,,,,,870,,,,,870',
+'870,870,870,,870,870,,,,870,870,,38,38,38,,38,870,,870,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,,,,,389,,61,,,61,61,61,61,61,61',
+'61,61,,61,61,61,,61,61,61,61,61,389,389,389,389,389,389,389,389,389',
+'389,389,,389,389,,,389,389,,61,,,61,,,61,61,,,61,,,389,,389,61,389,389',
+'389,389,389,389,389,61,389,,,,61,61,61,61,,61,61,,,,61,61,61,389,,,',
+'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,,883,62,883,883,883,883,883,,,,,,,,,,,,,,,62,,,62,,,62,62,,,62',
+',62,,,,883,,,,,,,,,883,883,883,883,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,,906',
+'63,906,906,906,906,906,,,,,,,,,,,,63,,,63,,,63,,,63,63,,,63,,,,,,906',
+',,,,,,,,906,906,906,906,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,,756,64,756,756',
+'756,756,756,,,,,,,,,,,,,,,64,,,64,,,64,64,,,64,,,,,,756,,,,,,,,,756',
+'756,756,756,64,64,64,64,,64,64,,,,64,64,,102,102,102,102,102,64,,64',
+'102,102,,,,102,,102,102,102,102,102,102,102,,,,,,102,102,102,102,102',
+'102,102,,,102,,,,,579,102,102,102,102,102,102,102,102,102,102,102,102',
+',102,102,102,,102,102,102,102,102,579,579,579,579,579,579,579,579,579',
+'579,579,,579,579,,,579,579,,102,,,102,,,102,102,,,102,,102,579,,579',
+'102,579,579,579,579,579,579,579,102,579,,,,102,102,102,102,,102,102',
+',,,102,102,,579,,,,102,102,,102,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,110,,810,810,810,,810',
+'110,,110,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,,796,796,796,',
+'796,810,,810,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',
+',197,197,197,,197,796,,796,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,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,,205,205,205,,205,200,,200,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',
+',209,209,209,,209,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,779,779,779,,779,209,,209,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,,269,269,269,,269,779,,779,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',
+',270,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,,278,278,278,,278,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,731,731,731,,731,278,,278,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,731,,284,284',
+'284,,284,731,,731,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,491,491,491,491,491,491,491,491,491',
+'491,491,,491,491,,,491,491,,284,,,284,,,284,284,,,284,,,491,,491,,491',
+'491,491,491,491,491,491,,491,,,,284,284,284,284,,284,284,,,,284,284',
+',491,,284,,,284,,284,728,728,728,,728,,,,728,728,,,,728,,728,728,728',
+'728,728,728,728,,,,,,728,728,728,728,728,728,728,,,728,,,,,,,728,,,728',
+'728,728,728,728,728,728,728,728,728,728,728,,728,728,728,728,728,,,',
+',,,,,,,,,,,,,,,,728,,,728,,,728,728,,,728,,728,,728,,728,,,,,,,,728',
+',,,,728,728,728,728,,728,728,,,,728,728,,716,716,716,,716,728,,728,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,,714,714,714',
+',714,716,,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,714,,714,714,714,714,714,,,,,,,,,,,,,,,,,,,,714,,,714,,,714',
+'714,,,714,,,,,,714,,,,,,,,714,,,,,714,714,714,714,,714,714,,,,714,714',
+',713,713,713,,713,714,,714,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,,712,712,712,,712,713,,713,712,712,,,,712,,712,712,712,712',
+'712,712,712,,,,,,712,712,712,712,712,712,712,,,712,,,,,,,712,,,712,712',
+'712,712,712,712,712,712,,712,712,712,,712,712,712,712,712,,,,,,,,,,',
+',,,,,,,,,712,,,712,,,712,712,,,712,,,,,,712,,,,,,,,712,,,,,712,712,712',
+'712,,712,712,,,,712,712,,701,701,701,,701,712,,712,701,701,,,,701,,701',
+'701,701,701,701,701,701,,,,,,701,701,701,701,701,701,701,,,701,,,,,',
+',701,,,701,701,701,701,701,701,701,701,,701,701,701,,701,701,701,701',
+'701,,,,,,,,,,,,,,,,,,,,701,,,701,,,701,701,,,701,,,,,,701,,,,,,,,701',
+',,,,701,701,701,701,,701,701,,,,701,701,,699,699,699,,699,701,,701,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,,297,297,297',
+',297,699,,699,297,297,,,,297,,297,297,297,297,297,297,297,,,,,,297,297',
+'297,297,297,297,297,,,297,,,,,,,297,,,297,297,297,297,297,297,297,297',
+',297,297,297,,297,297,,,297,,,,,,,,,,,,,,,,,,,,297,,,297,,,297,297,',
+',297,,,,,,,,,,,,,,,,,,,297,297,297,297,,297,297,,,,297,297,,671,671',
+'671,,671,297,,297,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,,306,306,306,,306,671,,671,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,,618,618,618,,618,306,,306,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,,322,322,322,,322,618,,618,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,,323,323,323,,323,322,,322,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,,607,607,607',
+',607,323,,323,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,,588,588',
+'588,,588,607,,607,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,,341,341,341,,341,588,,588,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,,571,571,571,,571,341,,341,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,,568,568,568,,568,571,,571,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,568,568,,568,568,,,,568,568,,564,564,564',
+',564,568,,568,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',
+',563,563,563,,563,564,,564,563,563,,,,563,,563,563,563,563,563,563,563',
+',,,,,563,563,563,563,563,563,563,,,563,,,,,,,563,,,563,563,563,563,563',
+'563,563,563,,563,563,563,,563,563,563,563,563,,,,,,,,,,,,,,,,,,,,563',
+',,563,,,563,563,,,563,,,,,,563,,,,,,,,563,,,,,563,563,563,563,,563,563',
+',,,563,563,,560,560,560,,560,563,,563,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,,557,557,557,,557,560,,560,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,,356,356,356,,356,557,,557,356',
+'356,,,,356,,356,356,356,356,356,356,356,,,,,,356,356,356,356,356,356',
+'356,,,356,,,,,,,356,,,356,356,356,356,356,356,356,356,,356,356,356,',
+'356,356,356,356,356,,,,,,,,,,,,,,,,,,,,356,,,356,,,356,356,,,356,,,',
+',,356,,,,,,,,356,,,,,356,356,356,356,,356,356,,,,356,356,,383,383,383',
+',383,356,,356,383,383,,,,383,,383,383,383,383,383,383,383,,,,,,383,383',
+'383,383,383,383,383,,,383,,,,,,,383,,,383,383,383,383,383,383,383,383',
+',383,383,383,,383,383,383,383,383,,,,,,,,,,,,,,,,,,,,383,,,383,,,383',
+'383,,,383,,,,,,383,,,,,,,,383,,,,,383,383,383,383,,383,383,,,,383,383',
+',529,529,529,,529,383,,383,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,,526,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,,415,415,415,,415,526,,526,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,,,415,,415,,415',
+',415,,,,,,,,415,,,,,415,415,415,415,,415,415,,,,415,415,,417,417,417',
+',417,415,,415,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,,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,,516,516,516,,516,419,,419,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,,515,515,515,,515',
+'516,,516,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,,,,,,,,,,,,,,,,,,,,515,,,515,,,515,515',
+',,515,,515,,,,515,,,,,,,,515,,,,,515,515,515,515,,515,515,,,,515,515',
+',501,501,501,,501,515,,515,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,,498,498,498,,498,501,,501,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,,494,494,494,,494,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,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,,492,492,492',
+',492,494,,494,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',
+',488,488,488,,488,492,,492,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,,487,487,487,,487,488,,488,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,,486,486,486,,486,487,,487,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,,483,483,483,,483,486,,486,483',
+'483,,,,483,,483,483,483,483,483,483,483,,,,,,483,483,483,483,483,483',
+'483,,,483,,,,,,,483,,,483,483,483,483,483,483,483,483,,483,483,483,',
+'483,483,,,483,,,,,,,,,,,,,,,,,,,,483,,,483,,,483,483,,,483,,,,,,,,,',
+',,,,,,,,,483,483,483,483,,483,483,,,,483,483,,476,476,476,,476,483,',
+'483,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,,474,474,474,,474,476,,476,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,,464,464,464,,464,474,,474,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,597,597,597,597',
+'597,597,597,597,597,597,597,,597,597,,,597,597,,464,,597,464,,,464,464',
+',,464,,,597,464,597,464,597,597,597,597,597,597,597,464,597,,,,464,464',
+'464,464,,464,464,,,,464,464,,597,,597,,,464,,464,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',
+'554,,,554,554,,,,554,554,554,554,,,,,,,,,,,,,,554,554,,554,554,554,554',
+'554,554,554,554,554,554,554,,,554,554,,,,,,,,,,,554,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,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,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,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,684,684,684,684,684',
+'684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684',
+'684,684,,,,684,684,684,684,684,684,684,684,684,684,,,,,,684,684,684',
+'684,684,684,684,684,684,,,684,,,,,,,,684,684,,684,684,684,684,684,684',
+'684,,,684,684,,,,684,684,684,684,,,,,,,,,,,,,,684,684,,684,684,684,684',
+'684,684,684,684,684,684,684,,,684,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,414,414,65,,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,525,525,414,,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,201,201,525',
+',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,413,413,201,,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,915,915,413,,915,,,,,,,,915,915,,915,915',
+'915,915,915,915,915,,,915,915,,,,915,915,915,915,,,,,,915,,,,,,,,915',
+'915,,915,915,915,915,915,915,915,915,915,915,915,477,477,915,,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',
+'478,478,477,,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,490,490,478,,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,202,202,490,,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,489,489',
+'202,,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,877,877,489,,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,267,267,877,,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,266,266,267,,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,518',
+'518,266,,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,524,524,518,,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,878,878,524,,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,517,517,878',
+',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,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,,251,251,251,251,251,251,251',
+'251,251,251,251,,251,251,,19,251,251,,,,,,,,,,,,,,,251,,251,,251,251',
+'251,251,251,251,251,,251,,406,406,406,406,406,406,406,406,406,406,406',
+',406,406,,251,406,406,,,,,,,,,,,,,,,406,,406,,406,406,406,406,406,406',
+'406,,406,,445,445,445,445,445,445,445,445,445,445,445,,445,445,,406',
+'445,445,,,,,,,,,,,,,,,445,,445,,445,445,445,445,445,445,445,,445,,619',
+'619,619,619,619,619,619,619,619,619,619,,619,619,445,445,619,619,,,',
+',,,,,,,,,,,619,,619,,619,619,619,619,619,619,619,,619,,697,697,697,697',
+'697,697,697,697,697,697,697,,697,697,,619,697,697,,,,,,,,,,,,,,,697',
+',697,,697,697,697,697,697,697,697,,697,,700,700,700,700,700,700,700',
+'700,700,700,700,,700,700,,697,700,700,,,,,,,,,,,,,,,700,,700,,700,700',
+'700,700,700,700,700,,700,,704,704,704,704,704,704,704,704,704,704,704',
+',704,704,,700,704,704,,,,,,,,,,,,,,,704,,704,,704,704,704,704,704,704',
+'704,,704,,706,706,706,706,706,706,706,706,706,706,706,,706,706,,704',
+'706,706,,,,,,,,,,,,,,,706,,706,,706,706,706,706,706,706,706,,706,,709',
+'709,709,709,709,709,709,709,709,709,709,,709,709,,706,709,709,,,,,,',
+',,,,,,,,709,,709,,709,709,709,709,709,709,709,,709,,711,711,711,711',
+'711,711,711,711,711,711,711,,711,711,,709,711,711,,,,,,,,,,,,,,,711',
+',711,,711,711,711,711,711,711,711,,711,,795,795,795,795,795,795,795',
+'795,795,795,795,,795,795,,711,795,795,,,,,,,,,,,,,,,795,,795,,795,795',
+'795,795,795,795,795,,795,,797,797,797,797,797,797,797,797,797,797,797',
+',797,797,,795,797,797,,,,,,,,,,,,,,,797,,797,,797,797,797,797,797,797',
+'797,,797,,,,,,,,,,,,,,,,,797' ]
+ racc_action_check = arr = ::Array.new(23453, 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 = [
+ 3307, 995, nil, 57, 771, 9682, 21345, 21221, 499, 495,
+ 435, 430, 477, 460, 396, 567, nil, -68, 10182, 22773,
+ 479, nil, 10307, 10432, 10557, 235, 135, 1547, 749, nil,
+ 5182, 10807, 10932, nil, 347, 260, 297, 485, 11315, 11440,
+ 11565, -66, 442, nil, nil, nil, nil, nil, nil, nil,
+ 1004, 3057, 11690, 11815, 11940, 67, nil, 12065, 12190, nil,
+ nil, 12315, 12448, 12573, 12698, 21705, nil, nil, nil, nil,
+ nil, nil, nil, 350, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 515, nil, nil, 385,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ 1164, nil, 12823, nil, nil, nil, 12956, 13081, 13206, 13331,
+ 13456, 891, nil, 630, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, 1000, nil, 2182, 2307, 13831, 13956, 14081,
+ 14206, 21885, 22245, nil, nil, 14331, 14456, 14581, 14706, 14831,
+ nil, nil, 1043, -39, 1071, 154, 982, 1031, nil, 5432,
+ 4557, 1024, 5682, 5807, 5932, 6057, 6182, 6307, 6432, 6557,
+ 6682, 6807, 6932, 7057, 7182, 7307, 7432, 7557, 7682, 7807,
+ 7932, 8057, 8182, 8307, 8432, 8557, 8682, 8807, nil, nil,
+ nil, 22819, nil, 967, 964, nil, 9057, 998, 9307, nil,
+ nil, nil, nil, 9432, nil, nil, 22485, 22425, 973, 15081,
+ 15206, nil, nil, nil, nil, nil, nil, nil, 15331, 928,
+ 3432, 937, 961, 920, 15581, 2807, 661, 915, 973, 552,
+ 938, 884, 188, nil, 909, 488, 865, 16589, nil, 431,
+ 925, 922, 819, nil, 921, nil, 16839, 976, 966, -3,
+ nil, -94, 351, 841, 810, 188, 802, nil, nil, 383,
+ -8, -9, 17089, 17214, 148, 856, 740, 85, 700, 805,
+ 1, 834, nil, nil, 694, 632, -33, nil, 786, nil,
+ 14, 17589, nil, nil, 461, -39, 491, 209, 359, 270,
+ 229, 570, 551, nil, 495, nil, 18464, nil, 387, 382,
+ 255, 166, -34, -59, nil, 865, nil, nil, nil, nil,
+ nil, nil, 21469, nil, nil, nil, nil, 670, 668, nil,
+ nil, 10933, nil, 18589, 650, nil, 637, nil, nil, 12315,
+ 638, nil, 294, 444, 1422, nil, nil, nil, 624, 663,
+ 0, nil, nil, 1213, 874, nil, 22865, nil, nil, nil,
+ 58, nil, 658, 21945, 21765, 18964, 103, 19089, 19214, 19339,
+ 3057, 2932, 467, 342, 678, 676, 674, 673, 1321, 3932,
+ 3807, 2182, 3432, 3182, 2557, 2432, 3557, 2057, 3307, 2307,
+ 3682, 704, 764, 2807, 2682, 22911, -47, nil, 9932, nil,
+ 10057, nil, 9807, nil, nil, 1134, nil, nil, 1343, nil,
+ nil, 556, nil, nil, 20964, -55, -43, 558, nil, 578,
+ 556, nil, nil, 583, 20839, 589, 20714, 22065, 22125, 913,
+ 629, nil, nil, 20589, 594, nil, 20464, 20339, 20214, 22305,
+ 22185, 15581, 20089, 719, 19964, nil, 611, nil, 19839, nil,
+ nil, 19714, nil, nil, nil, nil, 1311, 4432, 729, nil,
+ 4682, 54, 24, 730, 738, 19589, 19464, 22725, 22545, 61,
+ nil, nil, 578, nil, 22605, 21825, 18839, nil, nil, 18714,
+ 269, 51, 3182, 1145, nil, nil, nil, -25, nil, nil,
+ nil, 715, nil, nil, nil, 663, nil, nil, 127, nil,
+ nil, 664, nil, nil, 21097, nil, nil, 18339, 671, 9557,
+ 18214, 180, 709, 18089, 17964, 708, nil, nil, 17839, 741,
+ nil, 17714, nil, nil, 199, 86, 255, 125, 714, 12823,
+ 716, nil, 318, nil, 4057, 717, nil, 761, 17464, nil,
+ nil, nil, nil, nil, nil, -54, nil, 20964, -70, 735,
+ nil, 739, nil, 4807, 4932, nil, 81, 17339, 744, nil,
+ 751, 182, 278, 796, 214, 1068, 809, 780, 16964, 22957,
+ 853, 854, -13, 916, nil, 2557, 807, 850, nil, nil,
+ nil, 344, 24, 1275, 807, 810, 826, 830, nil, nil,
+ nil, nil, nil, nil, 129, 911, nil, 872, nil, nil,
+ nil, nil, 912, nil, nil, 914, 548, nil, 952, nil,
+ nil, nil, nil, 962, nil, 17, 847, 27, -18, 155,
+ 25, 16714, 523, 949, nil, 863, 2682, 433, nil, nil,
+ 984, 3557, 9195, 174, 21593, nil, nil, nil, nil, nil,
+ nil, 3807, nil, nil, nil, nil, nil, 23003, 867, 16464,
+ 23049, 16339, nil, nil, 23095, nil, 23141, nil, nil, 23187,
+ nil, 23233, 16214, 16089, 15964, 134, 15839, 900, 905, 906,
+ nil, 928, 906, 744, 220, nil, 1030, nil, 15714, nil,
+ 2932, 15456, nil, nil, 926, 941, 1045, 933, 312, nil,
+ nil, nil, 3682, nil, nil, -10, 9182, nil, nil, nil,
+ nil, nil, 958, nil, 968, nil, 12711, nil, nil, 1068,
+ 1039, 8932, nil, nil, 1004, nil, 966, 378, 1012, 977,
+ nil, nil, 1096, nil, 5557, 1106, 4307, 4182, nil, 14956,
+ 3932, -14, 55, nil, 1119, nil, 2057, nil, 1129, 1014,
+ nil, nil, 1032, 1020, nil, 23279, 13706, 23325, 1511, nil,
+ 1610, nil, nil, 1131, nil, 1046, 1026, nil, nil, nil,
+ 13581, nil, 1029, 1047, 1033, nil, 1034, nil, nil, nil,
+ nil, 5057, 45, 166, 1110, -7, nil, 2432, 1932, -35,
+ -30, 44, nil, nil, 105, 112, nil, 116, nil, nil,
+ 184, 623, 191, 1540, nil, nil, 16, nil, 370, 378,
+ nil, 32, nil, nil, 394, nil, nil, 10820, nil, 281,
+ 308, 310, 317, nil, 321, nil, 840, 757, 411, nil,
+ 11190, nil, nil, 11065, nil, 479, 10682, 22365, 22665, 43,
+ 422, 527, nil, 12461, nil, nil, 1733, nil, 1829, nil,
+ 1858, nil, nil, nil, 445, 1487, 411, 1807, nil, nil,
+ nil, nil, nil, 1682, nil, 5307, 12586, nil, nil, 1954,
+ nil, 1983, nil, nil, nil, 22005, nil, 447, nil, 452,
+ 18, 32, 116, 147, nil, nil, 485, 510, 523, 524,
+ 527, 1426, 530, 1547, 262, 659, 660, 541, 543, 544,
+ 546, 592, 829, nil, 44, nil, 1340, nil, nil, nil,
+ 1217, 885, nil, nil, nil, nil, 1704, nil, nil, nil,
+ 886, 1022, 1024, nil, nil ]
+
+racc_action_default = [
+ -4, -552, -1, -538, -5, -552, -552, -552, -552, -552,
+ -552, -552, -552, -552, -273, -32, -33, -540, -552, -38,
+ -40, -41, -283, -319, -320, -45, -248, -248, -248, -58,
+ -4, -62, -70, -72, -552, -465, -552, -552, -552, -552,
+ -552, -540, -225, -266, -267, -268, -269, -270, -271, -272,
+ -526, -4, -552, -551, -518, -291, -293, -552, -552, -297,
+ -300, -538, -552, -552, -552, -552, -321, -322, -324, -325,
+ -414, -415, -416, -417, -418, -433, -421, -422, -435, -437,
+ -426, -431, -447, -435, -449, -450, -524, -454, -455, -525,
+ -457, -458, -459, -460, -461, -462, -463, -464, -467, -468,
+ -552, -3, -539, -547, -548, -549, -552, -552, -552, -552,
+ -552, -7, -8, -552, -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, -552, -552, -552,
+ -234, -552, -552, -536, -537, -552, -552, -552, -552, -540,
+ -541, -37, -552, -465, -552, -273, -552, -552, -217, -552,
+ -4, -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, -384, -386,
+ -42, -226, -236, -258, -258, -241, -552, -259, -552, -283,
+ -319, -320, -520, -552, -43, -44, -552, -552, -50, -234,
+ -552, -290, -389, -398, -400, -56, -395, -57, -540, -60,
+ -4, -540, -552, -63, -66, -4, -78, -552, -552, -85,
+ -286, -540, -552, -323, -396, -552, -68, -552, -74, -280,
+ -451, -452, -552, -202, -203, -218, -552, -406, -552, -276,
+ -227, -544, -544, -552, -552, -544, -552, -292, -376, -39,
+ -552, -552, -552, -552, -538, -552, -539, -465, -552, -552,
+ -273, -552, -335, -336, -94, -95, -552, -97, -552, -273,
+ -552, -552, -465, -312, -99, -100, -140, -141, -142, -158,
+ -163, -170, -173, -314, -552, -516, -552, -419, -552, -552,
+ -552, -552, -552, -552, 965, -6, -550, -14, -15, -16,
+ -17, -18, -552, -10, -11, -12, -109, -552, -552, -21,
+ -29, -181, -259, -552, -552, -22, -30, -31, -23, -183,
+ -540, -235, -527, -528, -248, -393, -529, -530, -527, -248,
+ -528, -392, -394, -529, -530, -28, -191, -34, -35, -36,
+ -540, -289, -552, -552, -552, -234, -280, -552, -552, -552,
+ -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, -540, -365, -237, -257, -238,
+ -257, -255, -552, -260, -523, -248, -527, -528, -248, -48,
+ -51, -540, -249, -250, -251, -365, -365, -540, -285, -540,
+ -59, -278, -75, -64, -552, -540, -234, -552, -552, -84,
+ -552, -451, -452, -552, -71, -76, -552, -552, -552, -552,
+ -552, -223, -552, -551, -551, -275, -540, -228, -546, -545,
+ -230, -546, -281, -282, -519, -294, -488, -4, -326, -327,
+ -4, -552, -552, -552, -552, -552, -234, -552, -552, -280,
+ -305, -94, -95, -96, -552, -552, -234, -308, -469, -552,
+ -552, -552, -4, -488, -316, -534, -535, -540, -420, -434,
+ -439, -552, -441, -423, -436, -552, -438, -425, -552, -428,
+ -430, -552, -448, -9, -552, -19, -20, -552, -265, -552,
+ -552, -397, -552, -552, -552, -52, -233, -390, -552, -54,
+ -391, -552, -288, -542, -527, -528, -527, -528, -540, -181,
+ -552, -366, -370, -368, -4, -258, -256, -261, -552, -521,
+ -522, -46, -387, -47, -388, -365, -231, -38, -552, -258,
+ -247, -540, -253, -4, -4, -284, -61, -552, -67, -73,
+ -540, -527, -528, -232, -531, -83, -552, -69, -552, -190,
+ -200, -201, -540, -551, -333, -4, -407, -551, -408, -409,
+ -277, -544, -552, -488, -370, -515, -515, -515, -487, -489,
+ -490, -491, -492, -493, -494, -552, -497, -552, -499, -505,
+ -507, -508, -510, -511, -512, -552, -551, -328, -551, -298,
+ -329, -330, -301, -552, -304, -552, -540, -527, -528, -531,
+ -279, -552, -94, -95, -98, -540, -4, -552, -471, -310,
+ -552, -4, -488, -552, -552, -517, -440, -443, -444, -445,
+ -446, -4, -424, -427, -429, -432, -110, -182, -263, -552,
+ -184, -552, -543, -25, -186, -26, -187, -53, -27, -188,
+ -55, -189, -552, -552, -552, -397, -552, -515, -515, -515,
+ -364, -552, -370, -552, -494, -503, -552, -239, -257, -262,
+ -4, -552, -244, -252, -540, -552, -552, -65, -397, -77,
+ -287, -2, -4, -413, -334, -552, -552, -411, -229, -377,
+ -380, -382, -370, -379, -552, -480, -552, -483, -485, -552,
+ -552, -552, -496, -337, -552, -339, -341, -348, -494, -540,
+ -509, -513, -552, -331, -552, -552, -4, -4, -303, -552,
+ -4, -397, -552, -397, -552, -470, -4, -313, -552, -540,
+ -473, -317, -552, -264, -24, -185, -552, -224, -355, -357,
+ -552, -360, -362, -552, -367, -552, -371, -372, -374, -375,
+ -552, -385, -258, -552, -258, -243, -258, -254, -399, -401,
+ -412, -4, -465, -552, -552, -273, -410, -4, -4, -540,
+ -515, -515, -500, -514, -515, -515, -506, -515, -495, -501,
+ -540, -552, -346, -552, -498, -295, -552, -296, -552, -552,
+ -261, -551, -306, -309, -552, -315, -472, -488, -442, -515,
+ -515, -515, -515, -504, -515, -369, -552, -502, -552, -240,
+ -257, -49, -242, -257, -245, -406, -234, -552, -552, -280,
+ -552, -552, -378, -552, -476, -478, -552, -481, -552, -484,
+ -552, -486, -338, -340, -344, -552, -349, -4, -299, -302,
+ -402, -403, -404, -4, -311, -4, -552, -352, -354, -552,
+ -358, -552, -361, -363, -373, -552, -280, -258, -405, -540,
+ -527, -528, -531, -279, -381, -383, -515, -515, -515, -515,
+ -342, -552, -347, -552, -551, -552, -552, -515, -515, -515,
+ -515, -279, -531, -246, -397, -474, -552, -477, -479, -482,
+ -552, -345, -332, -307, -318, -350, -552, -353, -356, -359,
+ -515, -343, -515, -475, -351 ]
+
+clist = [
+'117,117,308,35,390,208,272,276,35,312,315,493,514,561,311,623,201,252',
+'252,252,353,10,447,449,105,681,10,283,266,306,122,122,772,35,286,286',
+'507,510,719,12,523,310,101,589,12,211,120,120,807,112,194,10,309,718',
+'35,296,763,319,319,117,634,319,484,460,896,327,342,342,342,12,638,809',
+'10,461,268,275,277,497,500,394,399,504,105,332,836,380,387,320,321,111',
+'12,324,893,279,589,534,281,638,659,662,325,769,250,264,265,35,319,319',
+'319,319,496,721,539,35,546,549,932,832,586,318,586,863,359,10,293,293',
+'592,363,584,594,322,10,340,343,600,776,367,368,369,370,323,12,777,671',
+'455,458,720,603,604,12,903,676,951,786,532,293,293,293,384,384,533,832',
+'684,753,857,554,722,595,1,372,333,961,193,763,806,632,842,749,506,102',
+'775,395,249,827,893,828,365,752,446,465,316,914,466,900,371,252,404',
+'638,35,35,663,715,627,745,357,358,407,408,409,410,831,836,834,360,809',
+'413,10,10,840,578,361,548,362,35,379,385,388,863,674,686,691,830,405',
+'738,12,12,789,355,741,608,314,10,317,505,734,601,638,462,617,602,763',
+'805,763,832,860,331,861,527,313,12,354,,,,252,252,,,,859,,,272,252,276',
+',,730,,480,610,829,,35,,,,286,35,781,477,394,399,485,,2,,,783,,286,10',
+'694,930,763,489,10,473,,,952,,,,,,,,,12,666,589,319,319,12,282,,,,,675',
+'517,,382,386,,,,,926,763,531,763,279,,105,469,,279,905,463,475,511,512',
+'727,613,537,535,467,763,707,528,937,513,710,,117,613,732,852,,,737,901',
+'566,,,293,562,570,,780,628,,,,,,,,293,,451,395,453,613,122,748,586,454',
+',815,,613,585,,,,404,,252,,120,,,553,,,,,599,638,,,,,,,,,411,,,580,',
+'566,,,566,,,,565,,,,,569,,,,,,,631,384,,395,,,,821,,14,309,,,,14,395',
+'485,252,404,,,,665,286,,485,,,629,680,404,,286,,,,377,378,622,14,289',
+'289,,395,,468,,,470,591,,395,593,,,,35,252,404,35,14,282,,,404,558,',
+'252,,,,330,339,339,10,319,,10,660,660,,35,,,902,,586,,944,586,,,12,',
+'117,12,,678,679,10,,,,,,677,,,897,,717,14,562,293,,,,12,,14,,282,293',
+',122,918,282,869,,872,587,874,316,35,590,,703,705,,566,120,708,570,696',
+'562,,598,,,485,,10,35,35,,,286,743,,,739,747,,,,,,286,,12,10,10,,784',
+'35,,626,572,788,,587,,,316,,791,,,12,12,,,10,,,,,382,,,562,,,,14,14',
+',,,562,12,,,,,,,319,,,,,,,117,35,919,,596,14,35,,943,816,605,812,606',
+',814,,35,698,609,10,785,,293,782,10,,790,,,,,,,293,10,,,12,,630,,,12',
+',,,729,,,,794,,12,,,35,,,,854,835,,,837,,14,,35,,289,14,822,,10,,,,613',
+',,685,,289,,,10,,,,826,,12,,,,,319,,,,,35,35,12,862,35,,864,,,,35,,',
+',,,,,10,10,,,10,656,660,846,658,,10,,,,,,342,,12,12,,,12,,,733,13,35',
+'12,877,,13,917,35,35,,,,793,,,,293,,212,10,740,,212,212,212,10,10,,',
+',13,287,287,936,395,,,12,,,,,927,12,12,928,,929,252,404,,13,212,,,,726',
+'212,212,,,212,328,338,338,938,,,939,,940,,,,839,735,736,35,,,293,,,35',
+'562,35,404,,,,,,850,,,10,,744,,,,10,13,10,,960,212,212,212,212,13,,',
+'12,289,962,,,,12,,12,,289,,,,,,,,,817,,,,,,,,,,,,,,,14,,,14,,755,757',
+'758,,,,,,,,,792,,,,844,,,,,14,,,,,,,,,690,,850,,,587,856,,,,,,,,13,13',
+'212,212,212,212,,813,,,212,212,212,212,212,,,,,820,,,,,,13,,,,14,,,882',
+',,,,,,799,801,802,,892,,,,,14,14,,,289,848,849,,,851,,,,,,289,,,,,,',
+'14,,,,212,212,,,,,,,,212,,13,,,,287,13,,,,,,,,875,,,,287,,880,881,,',
+',,,,,,,,,,,,,14,,,,,14,212,212,,,,,,,,14,,,,,,,,,,212,,,,,,884,885,',
+',887,889,,891,,212,,,,,,,,,,,,,934,14,,,,,935,907,908,910,912,26,913',
+'14,,,26,825,,,,,,,,,,,,26,,,,26,26,26,,,,,,26,,,,,212,14,14,,,14,,,',
+',,14,,,,,26,26,,,,,26,26,,,26,,945,947,948,949,,,,339,,,,955,957,958',
+'959,,,,14,,,212,,,14,14,,,,,,287,,212,963,,964,,,26,287,,,26,26,26,26',
+'26,,212,,,,,,,,,,,,,,,13,,,13,,,,,,212,,,,,,,,,,212,,,212,,,13,,,,,14',
+',,,,,14,,14,,,,,,,,,,,,,,,,,,212,212,,,,212,,,,,,,26,26,26,26,26,26',
+',,,13,26,26,26,26,26,,,,,,,,,,,26,,,13,13,,,287,,,,,,,,,,,287,,,,,,',
+'13,,,,,,,,,,,,,,,,,,,,,,,,26,26,,,,,,,,26,,26,,,,,26,,,,,,212,,,,,13',
+',,,,13,,,,,,,,,,13,,,,,,,,,,212,26,26,,,,,,,,,,,,,,,,,,26,,,,,,,,,13',
+',,,,,26,,,,,,13,,,,823,,,,,,,,,,,,,,,,,,,,,,,,,,,,212,,13,13,,,13,,',
+',,,13,,,,,,,,,26,,,,,,,,,,,,,,,867,,218,,,,251,251,251,,,13,,,,,,13',
+'13,,,,303,304,305,,,,,,,,,,26,,,251,251,,,,,,,,26,,,,,,,,,,,,,,,,26',
+',,,212,,,,,,,,,,,26,,,26,,,,,,26,13,,,,,,13,,13,26,,,26,,,26,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,26,26,,,,26,,,,,,,,,,,,,,,,26,,,,,,,,,,,,,,,',
+',,,26,26,,,,,,,381,251,389,251,,,,,406,,,,,,26,,,,,,,,218,,,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,445,,,,,,,,,251,26,251,,,,26,251,,,,26,,251',
+'251,,,,,,,26,251,,,,,,,,,26,,,,,,,,,,,,,,,,,,,491,,,,,,,,,,26,,,,,,',
+',,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,26,,26,26,,,26,,,,,,26,,,,,,',
+',,,,251,,,,,,,,,,,,,,,,,,,,,,,,26,,,,,,26,26,251,,406,579,389,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,251,,251,,251,,,,,,,,,,26,,597,,,,,,,,,,,,251',
+',,,,,,26,,,619,620,621,26,,26,,,251,,,,251,,,251,,,,,,,,,,,,,,251,251',
+',,,,,,,,,251,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,697,,251,700,,,704,706,,',
+',709,,,711,,,,,,,,,,,,,,,,,251,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,251,,795,,,,,,,,,,,704,706,709,,797,,,,,,,,,,,,251,,,251,,,,,,',
+',,,,,,,,,,,,,,,,,,,,,,,251,,,,,,,,,,,,,,,,,,251,,,,,,,,,,,,,,,,,795',
+',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
+',,,,,251,,,251,,,251' ]
+ racc_goto_table = arr = ::Array.new(2494, 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,3,46,19,27,62,62,46,61,61,4,85,20,59,5,21,29,29,29,49,14,64,64',
+'89,91,14,43,21,27,54,54,83,46,46,46,82,82,115,17,47,58,8,155,17,15,53',
+'53,121,11,11,14,25,114,46,44,109,25,25,50,126,25,45,35,111,46,46,46',
+'46,17,117,122,14,19,34,34,34,60,60,33,33,60,89,14,151,23,23,13,13,9',
+'17,13,108,39,155,93,40,117,84,84,8,110,31,31,31,46,25,25,25,25,94,119',
+'145,46,145,145,111,150,65,95,65,152,141,14,56,56,63,141,36,63,96,14',
+'48,48,65,97,13,13,13,13,98,17,99,100,33,33,117,36,36,17,101,102,111',
+'103,104,56,56,56,59,59,105,150,106,119,107,55,112,37,1,26,16,111,12',
+'109,120,123,109,124,125,10,5,62,127,128,108,129,9,126,130,132,24,121',
+'133,134,9,29,50,117,46,46,85,20,135,136,139,140,25,25,25,25,115,151',
+'115,142,122,21,14,14,110,19,143,144,146,46,15,15,15,152,47,147,148,149',
+'15,20,17,17,126,77,6,45,78,14,79,81,70,69,117,67,45,66,109,119,109,150',
+'115,86,115,88,57,17,92,,,,29,29,,,,114,,,62,29,62,,,36,,27,19,119,,46',
+',,,46,46,20,21,33,33,43,,2,,,20,,46,14,145,109,109,21,14,44,,,83,,,',
+',,,,,17,19,155,25,25,17,2,,,,,19,21,,24,24,,,,,115,109,25,109,39,,89',
+'40,,39,91,31,40,13,13,64,33,25,21,31,109,35,89,115,8,35,,50,33,64,84',
+',,45,5,62,,,56,27,62,,82,23,,,,,,,,56,,24,62,24,33,54,60,65,24,,65,',
+'33,61,,,,50,,29,,53,,,11,,,,,61,117,,,,,,,,,41,,,27,,62,,,62,,,,34,',
+',,,34,,,,,,,61,59,,62,,,,82,,22,25,,,,22,62,43,29,50,,,,59,46,,43,,',
+'58,3,50,,46,,,,2,2,25,22,22,22,,62,,41,,,41,34,,62,34,,,,46,29,50,46',
+'22,2,,,50,24,,29,,,,22,22,22,14,25,,14,89,89,,46,,,85,,65,,20,65,,,17',
+',50,17,,89,89,14,,,,,,13,,,82,,113,22,27,56,,,,17,,22,,2,56,,54,4,2',
+'64,,64,24,64,24,46,24,,15,15,,62,53,15,62,11,27,,24,,,43,,14,46,46,',
+',46,58,,,43,58,,,,,,46,,17,14,14,,3,46,,24,41,3,,24,,,24,,49,,,17,17',
+',,14,,,,,24,,,27,,,,22,22,,,,27,17,,,,,,,25,,,,,,,50,46,19,,41,22,46',
+',64,61,41,59,41,,59,,46,24,41,14,89,,56,13,14,,89,,,,,,,56,14,,,17,',
+'41,,,17,,,,24,,,,15,,17,,,46,,,,3,113,,,113,,22,,46,,22,22,46,,14,,',
+',33,,,41,,22,,,14,,,,14,,17,,,,,25,,,,,46,46,17,113,46,,113,,,,46,,',
+',,,,,14,14,,,14,2,89,13,2,,14,,,,,,46,,17,17,,,17,,,41,18,46,17,21,',
+'18,61,46,46,,,,24,,,,56,,18,14,41,,18,18,18,14,14,,,,18,18,18,3,62,',
+',17,,,,,113,17,17,113,,113,29,50,,18,18,,,,2,18,18,,,18,18,18,18,113',
+',,113,,113,,,,24,2,2,46,,,56,,,46,27,46,50,,,,,,24,,,14,,2,,,,14,18',
+'14,,113,18,18,18,18,18,,,17,22,113,,,,17,,17,,22,,,,,,,,,41,,,,,,,,',
+',,,,,,22,,,22,,116,116,116,,,,,,,,,2,,,,41,,,,,22,,,,,,,,,22,,24,,,24',
+'41,,,,,,,,18,18,18,18,18,18,,2,,,18,18,18,18,18,,,,,2,,,,,,18,,,,22',
+',,41,,,,,,,116,116,116,,41,,,,,22,22,,,22,2,2,,,2,,,,,,22,,,,,,,22,',
+',,18,18,,,,,,,,18,,18,,,,18,18,,,,,,,,2,,,,18,,2,2,,,,,,,,,,,,,,,,22',
+',,,,22,18,18,,,,,,,,22,,,,,,,,,,18,,,,,,116,116,,,116,116,,116,,18,',
+',,,,,,,,,,,2,22,,,,,2,116,116,116,116,38,116,22,,,38,22,,,,,,,,,,,,38',
+',,,38,38,38,,,,,,38,,,,,18,22,22,,,22,,,,,,22,,,,,38,38,,,,,38,38,,',
+'38,,116,116,116,116,,,,22,,,,116,116,116,116,,,,22,,,18,,,22,22,,,,',
+',18,,18,116,,116,,,38,18,,,38,38,38,38,38,,18,,,,,,,,,,,,,,,18,,,18',
+',,,,,18,,,,,,,,,,18,,,18,,,18,,,,,22,,,,,,22,,22,,,,,,,,,,,,,,,,,,18',
+'18,,,,18,,,,,,,38,38,38,38,38,38,,,,18,38,38,38,38,38,,,,,,,,,,,38,',
+',18,18,,,18,,,,,,,,,,,18,,,,,,,18,,,,,,,,,,,,,,,,,,,,,,,,38,38,,,,,',
+',,38,,38,,,,,38,,,,,,18,,,,,18,,,,,18,,,,,,,,,,18,,,,,,,,,,18,38,38',
+',,,,,,,,,,,,,,,,,38,,,,,,,,,18,,,,,,38,,,,,,18,,,,18,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,18,,18,18,,,18,,,,,,18,,,,,,,,,38,,,,,,,,,,,,,,,18,,28,',
+',,28,28,28,,,18,,,,,,18,18,,,,28,28,28,,,,,,,,,,38,,,28,28,,,,,,,,38',
+',,,,,,,,,,,,,,,38,,,,18,,,,,,,,,,,38,,,38,,,,,,38,18,,,,,,18,,18,38',
+',,38,,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,38,38,,,,38,,,,,,,,,,,,,,,,38',
+',,,,,,,,,,,,,,,,,,38,38,,,,,,,28,28,28,28,,,,,28,,,,,,38,,,,,,,,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,38,28,,,,38,28,,,,38,,28,28,,,,,,,38,28,,,,,,,,',
+'38,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,38,,,,,,,,,,,,38,,,,,,,,,,,,,,,,,,',
+',,,,,,,,,,,,,38,,38,38,,,38,,,,,,38,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,',
+',,,,38,,,,,,38,38,28,,28,28,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,,28,,28',
+',,,,,,,,,38,,28,,,,,,,,,,,,28,,,,,,,38,,,28,28,28,38,,38,,,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(2494, 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, 168, 295, -49, -296, -478, -385, nil, 39, 84,
+ 176, 43, 165, 30, 21, 27, 108, 39, 823, -196,
+ -377, 3, 463, -112, 136, 0, 57, -12, 1617, -5,
+ nil, 80, nil, -122, 48, -205, -318, -292, 1203, 63,
+ 66, 221, nil, -4, 23, -235, 3, -296, 69, -45,
+ -6, nil, nil, 40, 24, -211, 93, 205, -12, -39,
+ -234, -44, -20, -329, -231, -330, -215, -23, nil, -219,
+ -358, nil, nil, nil, nil, nil, nil, 172, 186, 187,
+ nil, -75, -284, -624, -413, -313, 193, nil, -83, 21,
+ nil, -508, 195, -259, -199, 63, 71, -524, 80, -520,
+ -377, -702, -376, -526, -189, -193, -372, -627, -749, -591,
+ -546, -779, -416, -18, -529, -544, 340, -436, nil, -471,
+ -549, -675, -652, -331, -455, -140, -446, 162, -567, -566,
+ -60, nil, -84, -82, -658, -292, -424, nil, nil, 131,
+ 130, 44, 134, 140, -140, -246, 141, -312, -312, -523,
+ -637, -672, -679, nil, nil, -407 ]
+
+racc_goto_default = [
+ nil, nil, 307, nil, nil, 773, nil, 3, nil, 4,
+ 326, nil, nil, nil, 216, 16, 11, 217, 302, nil,
+ nil, 525, 215, nil, 257, 15, nil, 412, 19, 20,
+ 21, 391, 25, 616, nil, nil, nil, nil, 292, 29,
+ nil, nil, 31, 34, 33, nil, 213, 337, nil, 119,
+ 397, 118, 121, 71, 72, nil, 42, nil, 624, 253,
+ nil, 254, 402, 567, nil, 255, nil, nil, 270, nil,
+ nil, 43, 44, 45, 46, 47, 48, 49, nil, 271,
+ 55, nil, nil, nil, nil, nil, nil, 63, nil, 508,
+ 64, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, 765, 646,
+ nil, 766, nil, 635, nil, 637, nil, 833, 581, nil,
+ nil, nil, 643, nil, nil, nil, 683, nil, nil, nil,
+ nil, 401, nil, nil, nil, nil, nil, 70, 73, 74,
+ nil, nil, nil, nil, nil, 544, nil, nil, nil, 636,
+ 648, 649, 725, 652, 655, 262 ]
+
+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, 232, :_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,
+ 0, 233, :_reduce_293,
+ 3, 194, :_reduce_294,
+ 6, 194, :_reduce_295,
+ 6, 194, :_reduce_296,
+ 0, 234, :_reduce_297,
+ 0, 235, :_reduce_298,
+ 7, 194, :_reduce_299,
+ 0, 236, :_reduce_300,
+ 0, 237, :_reduce_301,
+ 7, 194, :_reduce_302,
+ 5, 194, :_reduce_303,
+ 4, 194, :_reduce_304,
+ 0, 238, :_reduce_305,
+ 0, 239, :_reduce_306,
+ 9, 194, :_reduce_307,
+ 0, 240, :_reduce_308,
+ 6, 194, :_reduce_309,
+ 0, 241, :_reduce_310,
+ 7, 194, :_reduce_311,
+ 0, 242, :_reduce_312,
+ 5, 194, :_reduce_313,
+ 0, 243, :_reduce_314,
+ 6, 194, :_reduce_315,
+ 0, 244, :_reduce_316,
+ 0, 245, :_reduce_317,
+ 9, 194, :_reduce_318,
+ 1, 194, :_reduce_319,
+ 1, 194, :_reduce_320,
+ 1, 194, :_reduce_321,
+ 1, 194, :_reduce_322,
+ 1, 156, :_reduce_none,
+ 1, 225, :_reduce_324,
+ 1, 228, :_reduce_325,
+ 1, 220, :_reduce_none,
+ 1, 220, :_reduce_none,
+ 2, 220, :_reduce_328,
+ 1, 222, :_reduce_none,
+ 1, 222, :_reduce_none,
+ 1, 221, :_reduce_none,
+ 5, 221, :_reduce_332,
+ 1, 143, :_reduce_none,
+ 2, 143, :_reduce_334,
+ 1, 224, :_reduce_none,
+ 1, 224, :_reduce_none,
+ 1, 246, :_reduce_none,
+ 3, 246, :_reduce_338,
+ 1, 249, :_reduce_339,
+ 3, 249, :_reduce_340,
+ 1, 248, :_reduce_none,
+ 4, 248, :_reduce_342,
+ 6, 248, :_reduce_343,
+ 3, 248, :_reduce_344,
+ 5, 248, :_reduce_345,
+ 2, 248, :_reduce_346,
+ 4, 248, :_reduce_347,
+ 1, 248, :_reduce_348,
+ 3, 248, :_reduce_349,
+ 6, 250, :_reduce_350,
+ 8, 250, :_reduce_351,
+ 4, 250, :_reduce_352,
+ 6, 250, :_reduce_353,
+ 4, 250, :_reduce_354,
+ 2, 250, :_reduce_none,
+ 6, 250, :_reduce_356,
+ 2, 250, :_reduce_357,
+ 4, 250, :_reduce_358,
+ 6, 250, :_reduce_359,
+ 2, 250, :_reduce_360,
+ 4, 250, :_reduce_361,
+ 2, 250, :_reduce_362,
+ 4, 250, :_reduce_363,
+ 1, 250, :_reduce_364,
+ 0, 174, :_reduce_365,
+ 1, 174, :_reduce_366,
+ 3, 256, :_reduce_367,
+ 1, 256, :_reduce_368,
+ 4, 256, :_reduce_369,
+ 0, 257, :_reduce_370,
+ 2, 257, :_reduce_371,
+ 1, 258, :_reduce_372,
+ 3, 258, :_reduce_373,
+ 1, 259, :_reduce_374,
+ 1, 259, :_reduce_none,
+ 0, 263, :_reduce_376,
+ 3, 219, :_reduce_377,
+ 4, 261, :_reduce_378,
+ 2, 261, :_reduce_379,
+ 0, 266, :_reduce_380,
+ 4, 262, :_reduce_381,
+ 0, 267, :_reduce_382,
+ 4, 262, :_reduce_383,
+ 0, 268, :_reduce_384,
+ 5, 265, :_reduce_385,
+ 2, 170, :_reduce_386,
+ 4, 170, :_reduce_387,
+ 4, 170, :_reduce_388,
+ 2, 218, :_reduce_389,
+ 4, 218, :_reduce_390,
+ 4, 218, :_reduce_391,
+ 3, 218, :_reduce_392,
+ 3, 218, :_reduce_393,
+ 3, 218, :_reduce_394,
+ 2, 218, :_reduce_395,
+ 1, 218, :_reduce_396,
+ 4, 218, :_reduce_397,
+ 0, 270, :_reduce_398,
+ 5, 217, :_reduce_399,
+ 0, 271, :_reduce_400,
+ 5, 217, :_reduce_401,
+ 5, 223, :_reduce_402,
+ 1, 272, :_reduce_403,
+ 1, 272, :_reduce_none,
+ 6, 142, :_reduce_405,
+ 0, 142, :_reduce_406,
+ 1, 273, :_reduce_407,
+ 1, 273, :_reduce_none,
+ 1, 273, :_reduce_none,
+ 2, 274, :_reduce_410,
+ 1, 274, :_reduce_none,
+ 2, 144, :_reduce_412,
+ 1, 144, :_reduce_none,
+ 1, 209, :_reduce_none,
+ 1, 209, :_reduce_none,
+ 1, 209, :_reduce_none,
+ 1, 210, :_reduce_417,
+ 1, 276, :_reduce_418,
+ 2, 276, :_reduce_419,
+ 3, 277, :_reduce_420,
+ 1, 277, :_reduce_421,
+ 1, 277, :_reduce_422,
+ 3, 211, :_reduce_423,
+ 4, 212, :_reduce_424,
+ 3, 213, :_reduce_425,
+ 0, 281, :_reduce_426,
+ 3, 281, :_reduce_427,
+ 1, 282, :_reduce_428,
+ 2, 282, :_reduce_429,
+ 3, 214, :_reduce_430,
+ 0, 284, :_reduce_431,
+ 3, 284, :_reduce_432,
+ 0, 278, :_reduce_433,
+ 2, 278, :_reduce_434,
+ 0, 279, :_reduce_435,
+ 2, 279, :_reduce_436,
+ 0, 280, :_reduce_437,
+ 2, 280, :_reduce_438,
+ 1, 283, :_reduce_439,
+ 2, 283, :_reduce_440,
+ 0, 286, :_reduce_441,
+ 4, 283, :_reduce_442,
+ 1, 285, :_reduce_443,
+ 1, 285, :_reduce_444,
+ 1, 285, :_reduce_445,
+ 1, 285, :_reduce_none,
+ 1, 191, :_reduce_447,
+ 3, 192, :_reduce_448,
+ 1, 275, :_reduce_449,
+ 1, 275, :_reduce_450,
+ 2, 275, :_reduce_451,
+ 2, 275, :_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, 184, :_reduce_462,
+ 1, 184, :_reduce_463,
+ 1, 184, :_reduce_464,
+ 1, 215, :_reduce_465,
+ 1, 155, :_reduce_466,
+ 1, 160, :_reduce_467,
+ 1, 160, :_reduce_468,
+ 1, 226, :_reduce_469,
+ 3, 226, :_reduce_470,
+ 2, 226, :_reduce_471,
+ 3, 229, :_reduce_472,
+ 2, 229, :_reduce_473,
+ 6, 264, :_reduce_474,
+ 8, 264, :_reduce_475,
+ 4, 264, :_reduce_476,
+ 6, 264, :_reduce_477,
+ 4, 264, :_reduce_478,
+ 6, 264, :_reduce_479,
+ 2, 264, :_reduce_480,
+ 4, 264, :_reduce_481,
+ 6, 264, :_reduce_482,
+ 2, 264, :_reduce_483,
+ 4, 264, :_reduce_484,
+ 2, 264, :_reduce_485,
+ 4, 264, :_reduce_486,
+ 1, 264, :_reduce_487,
+ 0, 264, :_reduce_488,
+ 1, 260, :_reduce_489,
+ 1, 260, :_reduce_490,
+ 1, 260, :_reduce_491,
+ 1, 260, :_reduce_492,
+ 1, 247, :_reduce_none,
+ 1, 247, :_reduce_494,
+ 3, 247, :_reduce_495,
+ 2, 247, :_reduce_496,
+ 1, 288, :_reduce_none,
+ 3, 288, :_reduce_498,
+ 1, 251, :_reduce_499,
+ 3, 251, :_reduce_500,
+ 3, 289, :_reduce_501,
+ 3, 290, :_reduce_502,
+ 1, 252, :_reduce_503,
+ 3, 252, :_reduce_504,
+ 1, 287, :_reduce_505,
+ 3, 287, :_reduce_506,
+ 1, 291, :_reduce_none,
+ 1, 291, :_reduce_none,
+ 2, 253, :_reduce_509,
+ 1, 253, :_reduce_510,
+ 1, 292, :_reduce_none,
+ 1, 292, :_reduce_none,
+ 2, 255, :_reduce_513,
+ 2, 254, :_reduce_514,
+ 0, 254, :_reduce_515,
+ 1, 230, :_reduce_none,
+ 3, 230, :_reduce_517,
+ 0, 216, :_reduce_518,
+ 2, 216, :_reduce_none,
+ 1, 199, :_reduce_520,
+ 3, 199, :_reduce_521,
+ 3, 293, :_reduce_522,
+ 2, 293, :_reduce_523,
+ 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, 269, :_reduce_none,
+ 1, 269, :_reduce_none,
+ 1, 269, :_reduce_none,
+ 1, 231, :_reduce_none,
+ 1, 231, :_reduce_none,
+ 1, 159, :_reduce_536,
+ 1, 159, :_reduce_537,
+ 0, 146, :_reduce_none,
+ 1, 146, :_reduce_none,
+ 0, 165, :_reduce_none,
+ 1, 165, :_reduce_none,
+ 2, 179, :_reduce_542,
+ 2, 158, :_reduce_543,
+ 0, 198, :_reduce_none,
+ 1, 198, :_reduce_none,
+ 1, 198, :_reduce_none,
+ 1, 227, :_reduce_547,
+ 1, 227, :_reduce_none,
+ 1, 148, :_reduce_none,
+ 2, 148, :_reduce_none,
+ 0, 196, :_reduce_551 ]
+
+racc_reduce_n = 552
+
+racc_shift_n = 965
+
+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",
+ "k_class",
+ "superclass",
+ "term",
+ "k_module",
+ "f_arglist",
+ "singleton",
+ "dot_or_colon",
+ "@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_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",
+ "@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",
+ "qword_list",
+ "string_dvar",
+ "@27",
+ "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.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
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_49(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ 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_internal(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)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_294(val, _values, result)
+ lambda_call = @builder.call_lambda(val[0])
+
+ args, (begin_t, body, end_t) = val[2]
+ result = @builder.block(lambda_call,
+ begin_t, args, body, end_t)
+
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_295(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_296(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_297(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_298(val, _values, result)
+ @lexer.cond.pop
+
+ result
+end
+
+def _reduce_299(val, _values, result)
+ result = @builder.loop(:while, val[0], val[2], val[3],
+ val[5], val[6])
+
+ result
+end
+
+def _reduce_300(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_301(val, _values, result)
+ @lexer.cond.pop
+
+ result
+end
+
+def _reduce_302(val, _values, result)
+ result = @builder.loop(:until, val[0], val[2], val[3],
+ val[5], val[6])
+
+ result
+end
+
+def _reduce_303(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_304(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_305(val, _values, result)
+ @lexer.cond.push(true)
+
+ result
+end
+
+def _reduce_306(val, _values, result)
+ @lexer.cond.pop
+
+ result
+end
+
+def _reduce_307(val, _values, result)
+ result = @builder.for(val[0], val[1],
+ val[2], val[4],
+ val[5], val[7], val[8])
+
+ result
+end
+
+def _reduce_308(val, _values, result)
+ local_push
+ @context.in_class = true
+
+ result
+end
+
+def _reduce_309(val, _values, result)
+ k_class, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :class_in_def, nil, k_class
+ end
+
+ lt_t, superclass = val[2]
+ result = @builder.def_class(k_class, val[1],
+ lt_t, superclass,
+ val[4], val[5])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_310(val, _values, result)
+ @context.in_def = false
+ @context.in_class = false
+ local_push
+
+ result
+end
+
+def _reduce_311(val, _values, result)
+ k_class, ctx = val[0]
+ result = @builder.def_sclass(k_class, val[1], val[2],
+ val[5], val[6])
+
+ local_pop
+ @context.in_def = ctx.in_def
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_312(val, _values, result)
+ @context.in_class = true
+ local_push
+
+ result
+end
+
+def _reduce_313(val, _values, result)
+ k_mod, ctx = val[0]
+ if @context.in_def
+ diagnostic :error, :module_in_def, nil, k_mod
+ end
+
+ result = @builder.def_module(k_mod, val[1],
+ val[3], val[4])
+
+ local_pop
+ @context.in_class = ctx.in_class
+
+ result
+end
+
+def _reduce_314(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_315(val, _values, result)
+ result = @builder.def_method(val[0], val[1],
+ val[3], val[4], val[5])
+
+ local_pop
+ @context.in_def = val[2].in_def
+
+ result
+end
+
+def _reduce_316(val, _values, result)
+ @lexer.state = :expr_fname
+
+ result
+end
+
+def _reduce_317(val, _values, result)
+ local_push
+ result = context.dup
+ @context.in_def = true
+
+ result
+end
+
+def _reduce_318(val, _values, result)
+ result = @builder.def_singleton(val[0], val[1], val[2],
+ val[4], val[6], val[7], val[8])
+
+ local_pop
+ @context.in_def = val[5].in_def
+
+ result
+end
+
+def _reduce_319(val, _values, result)
+ result = @builder.keyword_cmd(:break, val[0])
+
+ result
+end
+
+def _reduce_320(val, _values, result)
+ result = @builder.keyword_cmd(:next, val[0])
+
+ result
+end
+
+def _reduce_321(val, _values, result)
+ result = @builder.keyword_cmd(:redo, val[0])
+
+ result
+end
+
+def _reduce_322(val, _values, result)
+ result = @builder.keyword_cmd(:retry, val[0])
+
+ result
+end
+
+# reduce 323 omitted
+
+def _reduce_324(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+def _reduce_325(val, _values, result)
+ result = [ val[0], @context.dup ]
+
+ result
+end
+
+# reduce 326 omitted
+
+# reduce 327 omitted
+
+def _reduce_328(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 329 omitted
+
+# reduce 330 omitted
+
+# reduce 331 omitted
+
+def _reduce_332(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 333 omitted
+
+def _reduce_334(val, _values, result)
+ result = val
+
+ result
+end
+
+# reduce 335 omitted
+
+# reduce 336 omitted
+
+# reduce 337 omitted
+
+def _reduce_338(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_339(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_340(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 341 omitted
+
+def _reduce_342(val, _values, result)
+ result = val[0].
+ push(@builder.objc_restarg(val[2], val[3]))
+
+ result
+end
+
+def _reduce_343(val, _values, result)
+ result = val[0].
+ push(@builder.objc_restarg(val[2], val[3])).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_344(val, _values, result)
+ result = val[0].
+ push(@builder.objc_restarg(val[2]))
+
+ result
+end
+
+def _reduce_345(val, _values, result)
+ result = val[0].
+ push(@builder.objc_restarg(val[2])).
+ concat(val[4])
+
+ result
+end
+
+def _reduce_346(val, _values, result)
+ result = [ @builder.objc_restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_347(val, _values, result)
+ result = [ @builder.objc_restarg(val[0], val[1]),
+ *val[3] ]
+
+ result
+end
+
+def _reduce_348(val, _values, result)
+ result = [ @builder.objc_restarg(val[0]) ]
+
+ result
+end
+
+def _reduce_349(val, _values, result)
+ result = [ @builder.objc_restarg(val[0]),
+ *val[2] ]
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_352(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+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)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+# reduce 355 omitted
+
+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)
+ 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_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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ 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[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[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_364(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_365(val, _values, result)
+ result = @builder.args(nil, [], nil)
+
+ result
+end
+
+def _reduce_366(val, _values, result)
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_367(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_368(val, _values, result)
+ result = @builder.args(val[0], [], val[0])
+
+ result
+end
+
+def _reduce_369(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_370(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_371(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_372(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_373(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_374(val, _values, result)
+ @static_env.declare val[0][0]
+ result = @builder.shadowarg(val[0])
+
+ result
+end
+
+# reduce 375 omitted
+
+def _reduce_376(val, _values, result)
+ @static_env.extend_dynamic
+
+ result
+end
+
+def _reduce_377(val, _values, result)
+ result = [ val[1], val[2] ]
+
+ @static_env.unextend
+
+ result
+end
+
+def _reduce_378(val, _values, result)
+ result = @builder.args(val[0], val[1].concat(val[2]), val[3])
+
+ result
+end
+
+def _reduce_379(val, _values, result)
+ result = @builder.args(nil, val[0].concat(val[1]), nil)
+
+ result
+end
+
+def _reduce_380(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_381(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_382(val, _values, result)
+ result = @context.dup
+ @context.in_lambda = true
+
+ result
+end
+
+def _reduce_383(val, _values, result)
+ result = [ val[0], val[2], val[3] ]
+ @context.in_lambda = val[1].in_lambda
+
+ result
+end
+
+def _reduce_384(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_385(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_386(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_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)
+ lparen_t, args, rparen_t = val[1]
+ result = @builder.call_method(nil, nil, val[0],
+ 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)
+ 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)
+ result = @builder.call_method(val[0], val[1], val[2])
+
+ 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[2]
+ result = @builder.call_method(val[0], val[1], nil,
+ lparen_t, args, rparen_t)
+
+ result
+end
+
+def _reduce_395(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_396(val, _values, result)
+ result = @builder.keyword_cmd(:zsuper, val[0])
+
+ result
+end
+
+def _reduce_397(val, _values, result)
+ result = @builder.index(val[0], val[1], val[2], val[3])
+
+ result
+end
+
+def _reduce_398(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_399(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_400(val, _values, result)
+ @static_env.extend_dynamic
+ result = @context.dup
+ @context.in_block = true
+
+ result
+end
+
+def _reduce_401(val, _values, result)
+ result = [ val[0], val[2], val[3], val[4] ]
+
+ @static_env.unextend
+ @context.in_block = val[1].in_block
+
+ result
+end
+
+def _reduce_402(val, _values, result)
+ result = [ @builder.when(val[0], val[1], val[2], val[3]),
+ *val[4] ]
+
+ result
+end
+
+def _reduce_403(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 404 omitted
+
+def _reduce_405(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_406(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_407(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+# reduce 408 omitted
+
+# reduce 409 omitted
+
+def _reduce_410(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 411 omitted
+
+def _reduce_412(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+# reduce 413 omitted
+
+# reduce 414 omitted
+
+# reduce 415 omitted
+
+# reduce 416 omitted
+
+def _reduce_417(val, _values, result)
+ result = @builder.string_compose(nil, val[0], nil)
+
+ result
+end
+
+def _reduce_418(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_419(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_420(val, _values, result)
+ result = @builder.string_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_421(val, _values, result)
+ result = @builder.string(val[0])
+
+ result
+end
+
+def _reduce_422(val, _values, result)
+ result = @builder.character(val[0])
+
+ result
+end
+
+def _reduce_423(val, _values, result)
+ result = @builder.xstring_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_424(val, _values, result)
+ opts = @builder.regexp_options(val[3])
+ result = @builder.regexp_compose(val[0], val[1], val[2], opts)
+
+ result
+end
+
+def _reduce_425(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_426(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_427(val, _values, result)
+ result = val[0] << @builder.word(val[1])
+
+ result
+end
+
+def _reduce_428(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_429(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_430(val, _values, result)
+ result = @builder.words_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_431(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_432(val, _values, result)
+ result = val[0] << @builder.string_internal(val[1])
+
+ result
+end
+
+def _reduce_433(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_434(val, _values, result)
+ result = val[0] << val[1]
+
+ result
+end
+
+def _reduce_435(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_436(val, _values, result)
+ result = val[0] << 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 = @builder.string_internal(val[0])
+
+ result
+end
+
+def _reduce_440(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_441(val, _values, result)
+ @lexer.cond.push(false)
+ @lexer.cmdarg.push(false)
+
+ result
+end
+
+def _reduce_442(val, _values, result)
+ @lexer.cond.lexpop
+ @lexer.cmdarg.lexpop
+
+ result = @builder.begin(val[0], val[2], val[3])
+
+ result
+end
+
+def _reduce_443(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_444(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_445(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+# reduce 446 omitted
+
+def _reduce_447(val, _values, result)
+ result = @builder.symbol(val[0])
+
+ result
+end
+
+def _reduce_448(val, _values, result)
+ result = @builder.symbol_compose(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_449(val, _values, result)
+ result = @builder.integer(val[0])
+
+ result
+end
+
+def _reduce_450(val, _values, result)
+ result = @builder.float(val[0])
+
+ result
+end
+
+def _reduce_451(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_452(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_453(val, _values, result)
+ result = @builder.ident(val[0])
+
+ result
+end
+
+def _reduce_454(val, _values, result)
+ result = @builder.ivar(val[0])
+
+ result
+end
+
+def _reduce_455(val, _values, result)
+ result = @builder.gvar(val[0])
+
+ result
+end
+
+def _reduce_456(val, _values, result)
+ result = @builder.const(val[0])
+
+ result
+end
+
+def _reduce_457(val, _values, result)
+ result = @builder.cvar(val[0])
+
+ result
+end
+
+def _reduce_458(val, _values, result)
+ result = @builder.nil(val[0])
+
+ result
+end
+
+def _reduce_459(val, _values, result)
+ result = @builder.self(val[0])
+
+ result
+end
+
+def _reduce_460(val, _values, result)
+ result = @builder.true(val[0])
+
+ result
+end
+
+def _reduce_461(val, _values, result)
+ result = @builder.false(val[0])
+
+ result
+end
+
+def _reduce_462(val, _values, result)
+ result = @builder.__FILE__(val[0])
+
+ result
+end
+
+def _reduce_463(val, _values, result)
+ result = @builder.__LINE__(val[0])
+
+ result
+end
+
+def _reduce_464(val, _values, result)
+ result = @builder.__ENCODING__(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.nth_ref(val[0])
+
+ result
+end
+
+def _reduce_468(val, _values, result)
+ result = @builder.back_ref(val[0])
+
+ result
+end
+
+def _reduce_469(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_470(val, _values, result)
+ result = [ val[0], val[1] ]
+
+ result
+end
+
+def _reduce_471(val, _values, result)
+ yyerrok
+ result = nil
+
+ result
+end
+
+def _reduce_472(val, _values, result)
+ result = @builder.args(val[0], val[1], val[2])
+
+ @lexer.state = :expr_value
+
+ result
+end
+
+def _reduce_473(val, _values, result)
+ result = @builder.args(nil, val[0], nil)
+
+ 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[4]).
+ concat(val[6]).
+ concat(val[7])
+
+ result
+end
+
+def _reduce_476(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_477(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ 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[2]).
+ concat(val[4]).
+ concat(val[5])
+
+ result
+end
+
+def _reduce_483(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_484(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_485(val, _values, result)
+ result = val[0].
+ concat(val[1])
+
+ result
+end
+
+def _reduce_486(val, _values, result)
+ result = val[0].
+ concat(val[2]).
+ concat(val[3])
+
+ result
+end
+
+def _reduce_487(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_488(val, _values, result)
+ result = []
+
+ result
+end
+
+def _reduce_489(val, _values, result)
+ diagnostic :error, :argument_const, nil, val[0]
+
+ result
+end
+
+def _reduce_490(val, _values, result)
+ diagnostic :error, :argument_ivar, nil, val[0]
+
+ result
+end
+
+def _reduce_491(val, _values, result)
+ diagnostic :error, :argument_gvar, nil, val[0]
+
+ result
+end
+
+def _reduce_492(val, _values, result)
+ diagnostic :error, :argument_cvar, nil, val[0]
+
+ result
+end
+
+# reduce 493 omitted
+
+def _reduce_494(val, _values, result)
+ @static_env.declare val[0][0]
+
+ result = @builder.arg(val[0])
+
+ result
+end
+
+def _reduce_495(val, _values, result)
+ @static_env.declare val[2][0]
+
+ result = @builder.objc_kwarg(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_496(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.objc_kwarg(val[0], nil, val[1])
+
+ result
+end
+
+# reduce 497 omitted
+
+def _reduce_498(val, _values, result)
+ result = @builder.multi_lhs(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_499(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_500(val, _values, result)
+ result = val[0] << 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)
+ @static_env.declare val[0][0]
+
+ result = @builder.optarg(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)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_506(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+# reduce 507 omitted
+
+# reduce 508 omitted
+
+def _reduce_509(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = [ @builder.restarg(val[0], val[1]) ]
+
+ result
+end
+
+def _reduce_510(val, _values, result)
+ result = [ @builder.restarg(val[0]) ]
+
+ result
+end
+
+# reduce 511 omitted
+
+# reduce 512 omitted
+
+def _reduce_513(val, _values, result)
+ @static_env.declare val[1][0]
+
+ result = @builder.blockarg(val[0], val[1])
+
+ result
+end
+
+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[1]
+
+ result
+end
+
+def _reduce_518(val, _values, result)
+ result = []
+
+ result
+end
+
+# reduce 519 omitted
+
+def _reduce_520(val, _values, result)
+ result = [ val[0] ]
+
+ result
+end
+
+def _reduce_521(val, _values, result)
+ result = val[0] << val[2]
+
+ result
+end
+
+def _reduce_522(val, _values, result)
+ result = @builder.pair(val[0], val[1], val[2])
+
+ result
+end
+
+def _reduce_523(val, _values, result)
+ result = @builder.pair_keyword(val[0], val[1])
+
+ result
+end
+
+# 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
+
+def _reduce_536(val, _values, result)
+ result = [:dot, val[0][1]]
+
+ result
+end
+
+def _reduce_537(val, _values, result)
+ result = [:anddot, val[0][1]]
+
+ result
+end
+
+# reduce 538 omitted
+
+# reduce 539 omitted
+
+# reduce 540 omitted
+
+# reduce 541 omitted
+
+def _reduce_542(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+def _reduce_543(val, _values, result)
+ result = val[1]
+
+ result
+end
+
+# reduce 544 omitted
+
+# reduce 545 omitted
+
+# reduce 546 omitted
+
+def _reduce_547(val, _values, result)
+ yyerrok
+
+ result
+end
+
+# reduce 548 omitted
+
+# reduce 549 omitted
+
+# reduce 550 omitted
+
+def _reduce_551(val, _values, result)
+ result = nil
+
+ result
+end
+
+def _reduce_none(val, _values, result)
+ val[0]
+end
+
+ end # class RubyMotion
+ end # module Parser
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/runner.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/runner.rb
new file mode 100644
index 000000000..516d45319
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/runner.rb
@@ -0,0 +1,288 @@
+# 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
+ @option_parser = OptionParser.new { |opts| setup_option_parsing(opts) }
+ @legacy = {}
+ @parser_class = nil
+ @parser = nil
+ @files = []
+ @fragments = []
+ @warnings = false
+ @benchmark = false
+
+ @source_count = 0
+ @source_size = 0
+ end
+
+ def execute(options)
+ parse_options(options)
+ setup_builder_default
+ prepare_parser
+
+ process_all_input
+ end
+
+ private
+
+ LEGACY_MODES = %i[lambda procarg0 encoding index arg_inside_procarg0 forward_arg kwargs match_pattern].freeze
+
+ 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 '--30', 'Parse as Ruby 3.0 would' do
+ require 'parser/ruby30'
+ @parser_class = Parser::Ruby30
+ end
+
+ opts.on '--31', 'Parse as Ruby 3.1 would' do
+ require 'parser/ruby31'
+ @parser_class = Parser::Ruby31
+ end
+
+ opts.on '--32', 'Parse as Ruby 3.2 would' do
+ require 'parser/ruby32'
+ @parser_class = Parser::Ruby32
+ 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 '--legacy', "Parse with all legacy modes" do
+ @legacy = Hash.new(true)
+ end
+
+ LEGACY_MODES.each do |mode|
+ opt_name = "--legacy-#{mode.to_s.gsub('_', '-')}"
+ opts.on opt_name, "Parse with legacy mode for emit_#{mode}" do
+ @legacy[mode] = true
+ end
+ 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`.
+ @fragments << $stdin.read if options.delete('-')
+ 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 setup_builder_default
+ LEGACY_MODES.each do |mode|
+ Parser::Builders::Default.send(:"emit_#{mode}=", !@legacy[mode])
+ 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/runner/ruby_parse.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/runner/ruby_parse.rb
new file mode 100644
index 000000000..aa96c8045
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/runner/ruby_parse.rb
@@ -0,0 +1,157 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/runner/ruby_rewrite.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/runner/ruby_rewrite.rb
new file mode 100644
index 000000000..05bd82714
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/runner/ruby_rewrite.rb
@@ -0,0 +1,101 @@
+# 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,
+ 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/buffer.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/buffer.rb
new file mode 100644
index 000000000..487e8420f
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/buffer.rb
@@ -0,0 +1,355 @@
+# 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, source: nil)
+ @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_index_for_position = {}
+
+ self.source = source if source
+ 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_index = line_index_for_position(position)
+ line_begin = line_begins[line_index]
+
+ [ @first_line + line_index , 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_index_for_position(position) + @first_line
+ 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)
+ line_index = line_index_for_position(position)
+ position - line_begins[line_index]
+ 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
+ if index < 0 || index + 1 >= line_begins.size
+ raise IndexError, 'Parser::Source::Buffer: range for line ' \
+ "#{lineno} requested, valid line numbers are #{@first_line}.." \
+ "#{@first_line + line_begins.size - 2}"
+ else
+ Range.new(self, line_begins[index], line_begins[index + 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 - 2
+ end
+
+ # :nodoc:
+ def freeze
+ source_lines; line_begins; source_range # build cache
+ super
+ end
+
+ # :nodoc:
+ def inspect
+ "#<#{self.class} #{name}>"
+ end
+
+ private
+
+ # @returns [0, line_begin_of_line_1, ..., source.size + 1]
+ def line_begins
+ @line_begins ||= begin
+ begins = [0]
+ index = 0
+ while index = @source.index("\n".freeze, index)
+ index += 1
+ begins << index
+ end
+ begins << @source.size + 1
+ begins
+ end
+ end
+
+ # @returns 0-based line index of position
+ def line_index_for_position(position)
+ @line_index_for_position[position] || begin
+ index = bsearch(line_begins, position) - 1
+ @line_index_for_position[position] = index unless @line_index_for_position.frozen?
+ index
+ end
+ end
+
+ if Array.method_defined?(:bsearch_index) # RUBY_VERSION >= 2.3
+ def bsearch(line_begins, position)
+ line_begins.bsearch_index do |line_begin|
+ position < line_begin
+ end || line_begins.size - 1 # || only for out of bound values
+ end
+ else
+ def bsearch(line_begins, position)
+ @line_range ||= 0...line_begins.size
+ @line_range.bsearch do |i|
+ position < line_begins[i]
+ end || line_begins.size - 1 # || only for out of bound values
+ end
+ end
+ end
+
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/comment.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/comment.rb
new file mode 100644
index 000000000..411d98727
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/comment.rb
@@ -0,0 +1,134 @@
+# 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::Range]
+ #
+ # @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
+
+ ##
+ # Associate `comments` with `ast` nodes using identity.
+ #
+ # @param [Parser::AST::Node] ast
+ # @param [Array] comments
+ # @return [Hash>]
+ # @see Parser::Source::Comment::Associator#associate_by_identity
+ #
+ def self.associate_by_identity(ast, comments)
+ associator = Associator.new(ast, comments)
+ associator.associate_by_identity
+ 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/comment/associator.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/comment/associator.rb
new file mode 100644
index 000000000..32811b5b2
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/comment/associator.rb
@@ -0,0 +1,233 @@
+# 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.
+ # You may prefer using {associate_by_identity} or {associate_locations}.
+ #
+ # @return [Hash>]
+ # @deprecated Use {associate_locations}.
+ #
+ def associate
+ @map_using = :eql
+ do_associate
+ end
+
+ ##
+ # Same as {associate}, but compares by identity, thus producing an unambiguous
+ # result even in presence of equal nodes.
+ #
+ # @return [Hash>]
+ #
+ def associate_locations
+ @map_using = :location
+ 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_by_identity
+ @map_using = :identity
+ do_associate
+ end
+
+ private
+
+ POSTFIX_TYPES = Set[:if, :while, :while_post, :until, :until_post, :masgn].freeze
+ def children_in_source_order(node)
+ if POSTFIX_TYPES.include?(node.type)
+ # All these types have either nodes with expressions, or `nil`
+ # so a compact will do, but they need to be sorted.
+ node.children.compact.sort_by { |child| child.loc.expression.begin_pos }
+ else
+ node.children.select do |child|
+ child.is_a?(AST::Node) && child.loc && child.loc.expression
+ end
+ end
+ end
+
+ def do_associate
+ @mapping = Hash.new { |h, k| h[k] = [] }
+ @mapping.compare_by_identity if @map_using == :identity
+ @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)
+ children_in_source_order(node).each { |child| visit(child) }
+
+ 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 == :location ? 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map.rb
new file mode 100644
index 000000000..456e11f85
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map.rb
@@ -0,0 +1,186 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/collection.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/collection.rb
new file mode 100644
index 000000000..1bf1f970b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/collection.rb
@@ -0,0 +1,18 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/condition.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/condition.rb
new file mode 100644
index 000000000..07a6f6f93
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/condition.rb
@@ -0,0 +1,21 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/constant.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/constant.rb
new file mode 100644
index 000000000..d22b3451b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/constant.rb
@@ -0,0 +1,32 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/definition.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/definition.rb
new file mode 100644
index 000000000..2260192ab
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/definition.rb
@@ -0,0 +1,23 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/for.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/for.rb
new file mode 100644
index 000000000..7eec546a0
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/for.rb
@@ -0,0 +1,19 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/heredoc.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/heredoc.rb
new file mode 100644
index 000000000..7e5db3437
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/heredoc.rb
@@ -0,0 +1,19 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/index.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/index.rb
new file mode 100644
index 000000000..62cf9b0f8
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/index.rb
@@ -0,0 +1,33 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/keyword.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/keyword.rb
new file mode 100644
index 000000000..15bf1e4e8
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/keyword.rb
@@ -0,0 +1,20 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/method_definition.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/method_definition.rb
new file mode 100644
index 000000000..12f6b9f18
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/method_definition.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+module Parser
+ module Source
+
+ class Map::MethodDefinition < Map
+ attr_reader :keyword
+ attr_reader :operator
+ attr_reader :name
+ attr_reader :end
+ attr_reader :assignment
+
+ def initialize(keyword_l, operator_l, name_l, end_l, assignment_l, body_l)
+ @keyword = keyword_l
+ @operator = operator_l
+ @name = name_l
+ @end = end_l
+ @assignment = assignment_l
+
+ super(@keyword.join(end_l || body_l))
+ end
+ end
+
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/objc_kwarg.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/objc_kwarg.rb
new file mode 100644
index 000000000..33bd6a8b7
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/objc_kwarg.rb
@@ -0,0 +1,19 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/operator.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/operator.rb
new file mode 100644
index 000000000..c54e61821
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/operator.rb
@@ -0,0 +1,17 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/rescue_body.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/rescue_body.rb
new file mode 100644
index 000000000..92edd8904
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/rescue_body.rb
@@ -0,0 +1,21 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/send.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/send.rb
new file mode 100644
index 000000000..659d6d48f
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/send.rb
@@ -0,0 +1,36 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/ternary.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/ternary.rb
new file mode 100644
index 000000000..312d8c73a
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/ternary.rb
@@ -0,0 +1,18 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/variable.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/variable.rb
new file mode 100644
index 000000000..479f7049f
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/map/variable.rb
@@ -0,0 +1,31 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/range.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/range.rb
new file mode 100644
index 000000000..cc1d63961
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/range.rb
@@ -0,0 +1,326 @@
+# 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::Source::Buffer]
+ #
+ # @!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 line != last_line
+ raise RangeError, "#{self.inspect} spans more than one line"
+ end
+
+ column...last_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
+
+ ##
+ # @return [Range] a Ruby range with the same `begin_pos` and `end_pos`
+ #
+ def to_range
+ self.begin_pos...self.end_pos
+ 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
+
+ alias_method :eql?, :==
+
+ ##
+ # Support for Ranges be used in as Hash indices and in Sets.
+ #
+ def hash
+ [@source_buffer, @begin_pos, @end_pos].hash
+ end
+
+ ##
+ # @return [String] a human-readable representation of this range.
+ #
+ def inspect
+ "#"
+ end
+ end
+
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/rewriter.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/rewriter.rb
new file mode 100644
index 000000000..23a6fb99b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/rewriter.rb
@@ -0,0 +1,513 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/rewriter/action.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/rewriter/action.rb
new file mode 100644
index 000000000..908e6d107
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/rewriter/action.rb
@@ -0,0 +1,44 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/tree_rewriter.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/tree_rewriter.rb
new file mode 100644
index 000000000..2bbff5827
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/tree_rewriter.rb
@@ -0,0 +1,431 @@
+# 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
+
+ ##
+ # Returns true iff no (non trivial) update has been recorded
+ #
+ # @return [Boolean]
+ #
+ def empty?
+ @action_root.empty?
+ end
+
+ ##
+ # Merges the updates of argument with the receiver.
+ # Policies of the receiver are used.
+ # This action is atomic in that it won't change the receiver
+ # unless it succeeds.
+ #
+ # @param [Rewriter] with
+ # @return [Rewriter] self
+ # @raise [ClobberingError] when clobbering is detected
+ #
+ def merge!(with)
+ raise 'TreeRewriter are not for the same source_buffer' unless
+ source_buffer == with.source_buffer
+
+ @action_root = @action_root.combine(with.action_root)
+ self
+ end
+
+ ##
+ # Returns a new rewriter that consists of the updates of the received
+ # and the given argument. Policies of the receiver are used.
+ #
+ # @param [Rewriter] with
+ # @return [Rewriter] merge of receiver and argument
+ # @raise [ClobberingError] when clobbering is detected
+ #
+ def merge(with)
+ dup.merge!(with)
+ end
+
+ ##
+ # For special cases where one needs to merge a rewriter attached to a different source_buffer
+ # or that needs to be offset. Policies of the receiver are used.
+ #
+ # @param [TreeRewriter] rewriter from different source_buffer
+ # @param [Integer] offset
+ # @return [Rewriter] self
+ # @raise [IndexError] if action ranges (once offset) don't fit the current buffer
+ #
+ def import!(foreign_rewriter, offset: 0)
+ return self if foreign_rewriter.empty?
+
+ contracted = foreign_rewriter.action_root.contract
+ merge_effective_range = ::Parser::Source::Range.new(
+ @source_buffer,
+ contracted.range.begin_pos + offset,
+ contracted.range.end_pos + offset,
+ )
+ check_range_validity(merge_effective_range)
+
+ merge_with = contracted.moved(@source_buffer, offset)
+
+ @action_root = @action_root.combine(merge_with)
+ self
+ 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
+
+ chunks = []
+ last_end = 0
+ @action_root.ordered_replacements.each do |range, replacement|
+ chunks << source[last_end...range.begin_pos] << replacement
+ last_end = range.end_pos
+ end
+ chunks << source[last_end...source.length]
+ chunks.join
+ end
+
+ ##
+ # Returns a representation of the rewriter as an ordered list of replacements.
+ #
+ # rewriter.as_replacements # => [ [1...1, '('],
+ # [2...4, 'foo'],
+ # [5...6, ''],
+ # [6...6, '!'],
+ # [10...10, ')'],
+ # ]
+ #
+ # This representation is sufficient to recreate the result of `process` but it is
+ # not sufficient to recreate completely the rewriter for further merging/actions.
+ # See `as_nested_actions`
+ #
+ # @return [Array] an ordered list of pairs of range & replacement
+ #
+ def as_replacements
+ @action_root.ordered_replacements
+ end
+
+ ##
+ # Returns a representation of the rewriter as nested insertions (:wrap) and replacements.
+ #
+ # rewriter.as_actions # =>[ [:wrap, 1...10, '(', ')'],
+ # [:wrap, 2...6, '', '!'], # aka "insert_after"
+ # [:replace, 2...4, 'foo'],
+ # [:replace, 5...6, ''], # aka "removal"
+ # ],
+ #
+ # Contrary to `as_replacements`, this representation is sufficient to recreate exactly
+ # the rewriter.
+ #
+ # @return [Array<(Symbol, Range, String{, String})>]
+ #
+ def as_nested_actions
+ @action_root.nested_actions
+ 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. Transactions can be nested.
+ #
+ # @raise [RuntimeError] when no block is passed
+ #
+ 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
+
+ # :nodoc:
+ def inspect
+ "#<#{self.class} #{source_buffer.name}: #{action_summary}>"
+ 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
+
+ protected
+
+ attr_reader :action_root
+
+ private
+
+ def action_summary
+ replacements = as_replacements
+ case replacements.size
+ when 0 then return 'empty'
+ when 1..3 then #ok
+ else
+ replacements = replacements.first(3)
+ suffix = '…'
+ end
+ parts = replacements.map do |(range, str)|
+ if str.empty? # is this a deletion?
+ "-#{range.to_range}"
+ elsif range.size == 0 # is this an insertion?
+ "+#{str.inspect}@#{range.begin_pos}"
+ else # it is a replacement
+ "^#{str.inspect}@#{range.to_range}"
+ end
+ end
+ parts << suffix if suffix
+ parts.join(', ')
+ end
+
+ 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.to_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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/tree_rewriter/action.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/tree_rewriter/action.rb
new file mode 100644
index 000000000..26cc02600
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/source/tree_rewriter/action.rb
@@ -0,0 +1,242 @@
+# 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 and ordered
+ # 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
+
+ def combine(action)
+ return self if action.empty? # Ignore empty action
+ do_combine(action)
+ end
+
+ def empty?
+ @insert_before.empty? &&
+ @insert_after.empty? &&
+ @children.empty? &&
+ (@replacement == nil || (@replacement.empty? && @range.empty?))
+ end
+
+ def ordered_replacements
+ reps = []
+ reps << [@range.begin, @insert_before] unless @insert_before.empty?
+ reps << [@range, @replacement] if @replacement
+ reps.concat(@children.flat_map(&:ordered_replacements))
+ reps << [@range.end, @insert_after] unless @insert_after.empty?
+ reps
+ end
+
+ def nested_actions
+ actions = []
+ actions << [:wrap, @range, @insert_before, @insert_after] if !@insert_before.empty? ||
+ !@insert_after.empty?
+ actions << [:replace, @range, @replacement] if @replacement
+ actions.concat(@children.flat_map(&:nested_actions))
+ end
+
+ def insertion?
+ !insert_before.empty? || !insert_after.empty? || (replacement && !replacement.empty?)
+ end
+
+ ##
+ # A root action has its range set to the whole source range, even
+ # though it typically do not act on that range.
+ # This method returns the action as if it was a child action with
+ # its range contracted.
+ # @return [Action]
+ def contract
+ raise 'Empty actions can not be contracted' if empty?
+ return self if insertion?
+ range = @range.with(
+ begin_pos: children.first.range.begin_pos,
+ end_pos: children.last.range.end_pos,
+ )
+ with(range: range)
+ end
+
+ ##
+ # @return [Action] that has been moved to the given source_buffer and with the given offset
+ # No check is done on validity of resulting range.
+ def moved(source_buffer, offset)
+ moved_range = ::Parser::Source::Range.new(
+ source_buffer,
+ @range.begin_pos + offset,
+ @range.end_pos + offset
+ )
+ with(
+ range: moved_range,
+ children: children.map { |child| child.moved(source_buffer, offset) }
+ )
+ end
+
+ protected
+
+ attr_reader :children
+
+ def with(range: @range, enforcer: @enforcer, 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_hierarchy(action)
+ end
+ end
+
+ def place_in_hierarchy(action)
+ family = analyse_hierarchy(action)
+
+ if family[:fusible]
+ fuse_deletions(action, family[:fusible], [*family[:sibbling_left], *family[:child], *family[:sibbling_right]])
+ else
+ extra_sibbling = if family[:parent] # action should be a descendant of one of the children
+ family[:parent].do_combine(action)
+ elsif family[:child] # or it should become the parent of some of the children,
+ action.with(children: family[:child], enforcer: @enforcer)
+ .combine_children(action.children)
+ else # or else it should become an additional child
+ action
+ end
+ with(children: [*family[:sibbling_left], extra_sibbling, *family[:sibbling_right]])
+ end
+ end
+
+ # Assumes `more_children` all contained within `@range`
+ def combine_children(more_children)
+ more_children.inject(self) do |parent, new_child|
+ parent.place_in_hierarchy(new_child)
+ 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
+
+ # Similar to @children.bsearch_index || size
+ # except allows for a starting point
+ # and `bsearch_index` is only Ruby 2.3+
+ def bsearch_child_index(from = 0)
+ size = @children.size
+ (from...size).bsearch { |i| yield @children[i] } || size
+ end
+
+ # Returns the children in a hierarchy with respect to `action`:
+ # :sibbling_left, sibbling_right (for those that are disjoint from `action`)
+ # :parent (in case one of our children contains `action`)
+ # :child (in case `action` strictly contains some of our children)
+ # :fusible (in case `action` overlaps some children but they can be fused in one deletion)
+ # or raises a `CloberingError`
+ # In case a child has equal range to `action`, it is returned as `:parent`
+ # Reminder: an empty range 1...1 is considered disjoint from 1...10
+ def analyse_hierarchy(action)
+ r = action.range
+ # left_index is the index of the first child that isn't completely to the left of action
+ left_index = bsearch_child_index { |child| child.range.end_pos > r.begin_pos }
+ # right_index is the index of the first child that is completely on the right of action
+ start = left_index == 0 ? 0 : left_index - 1 # See "corner case" below for reason of -1
+ right_index = bsearch_child_index(start) { |child| child.range.begin_pos >= r.end_pos }
+ center = right_index - left_index
+ case center
+ when 0
+ # All children are disjoint from action, nothing else to do
+ when -1
+ # Corner case: if a child has empty range == action's range
+ # then it will appear to be both disjoint and to the left of action,
+ # as well as disjoint and to the right of action.
+ # Since ranges are equal, we return it as parent
+ left_index -= 1 # Fix indices, as otherwise this child would be
+ right_index += 1 # considered as a sibbling (both left and right!)
+ parent = @children[left_index]
+ else
+ overlap_left = @children[left_index].range.begin_pos <=> r.begin_pos
+ overlap_right = @children[right_index-1].range.end_pos <=> r.end_pos
+
+ # For one child to be the parent of action, we must have:
+ if center == 1 && overlap_left <= 0 && overlap_right >= 0
+ parent = @children[left_index]
+ else
+ # Otherwise consider all non disjoint elements (center) to be contained...
+ contained = @children[left_index...right_index]
+ fusible = check_fusible(action,
+ (contained.shift if overlap_left < 0), # ... but check first and last one
+ (contained.pop if overlap_right > 0) # ... for overlaps
+ )
+ end
+ end
+
+ {
+ parent: parent,
+ sibbling_left: @children[0...left_index],
+ sibbling_right: @children[right_index...@children.size],
+ fusible: fusible,
+ child: contained,
+ }
+ end
+
+ # @param [Array(Action | nil)] fusible
+ def check_fusible(action, *fusible)
+ fusible.compact!
+ return if fusible.empty?
+ fusible.each do |child|
+ kind = action.insertion? || child.insertion? ? :crossing_insertions : :crossing_deletions
+ @enforcer.call(kind) { {range: action.range, conflict: child.range} }
+ end
+ fusible
+ 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}",
+ ).combine_children(action.children)
+ 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/static_environment.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/static_environment.rb
new file mode 100644
index 000000000..f6b5406be
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/static_environment.rb
@@ -0,0 +1,69 @@
+# frozen_string_literal: true
+
+module Parser
+
+ class StaticEnvironment
+ FORWARD_ARGS = :FORWARD_ARGS
+ ANONYMOUS_BLOCKARG = :ANONYMOUS_BLOCKARG
+
+ 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
+
+ def declare_anonymous_blockarg
+ declare(ANONYMOUS_BLOCKARG)
+ end
+
+ def declared_anonymous_blockarg?
+ declared?(ANONYMOUS_BLOCKARG)
+ end
+
+ def empty?
+ @stack.empty?
+ end
+ end
+
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/syntax_error.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/syntax_error.rb
new file mode 100644
index 000000000..0ac867de7
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/syntax_error.rb
@@ -0,0 +1,21 @@
+# 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/tree_rewriter.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/tree_rewriter.rb
new file mode 100644
index 000000000..a84d882bc
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/tree_rewriter.rb
@@ -0,0 +1,133 @@
+# 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)', 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/variables_stack.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/variables_stack.rb
new file mode 100644
index 000000000..2e27bf42e
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/variables_stack.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+module Parser
+
+ class VariablesStack
+ def initialize
+ @stack = []
+ push
+ end
+
+ def empty?
+ @stack.empty?
+ 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/version.rb b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/version.rb
new file mode 100644
index 000000000..e436ba691
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/lib/parser/version.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+module Parser
+ VERSION = '3.1.2.0'
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/parser.gemspec b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/parser.gemspec
new file mode 100644
index 000000000..d86138ab7
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/parser-3.1.2.0/parser.gemspec
@@ -0,0 +1,43 @@
+# 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.metadata = {
+ 'bug_tracker_uri' => 'https://github.com/whitequark/parser/issues',
+ 'changelog_uri' => "https://github.com/whitequark/parser/blob/v#{spec.version}/CHANGELOG.md",
+ 'documentation_uri' => "https://www.rubydoc.info/gems/parser/#{spec.version}",
+ 'source_code_uri' => "https://github.com/whitequark/parser/tree/v#{spec.version}"
+ }
+
+ spec.files = Dir['bin/*', 'lib/**/*.rb', 'parser.gemspec', 'LICENSE.txt']
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
+ spec.require_paths = ['lib']
+
+ spec.required_ruby_version = '>= 2.0.0'
+
+ spec.add_dependency 'ast', '~> 2.4.1'
+
+ spec.add_development_dependency 'bundler', '>= 1.15', '< 3.0.0'
+ spec.add_development_dependency 'rake', '~> 13.0.1'
+ 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
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/FUNDING.yml b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/FUNDING.yml
new file mode 100644
index 000000000..085e1ac2f
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: "rubygems/public_suffix"
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with a single custom sponsorship URL
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/dependabot.yml b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/dependabot.yml
new file mode 100644
index 000000000..1dbbb9ac2
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/dependabot.yml
@@ -0,0 +1,8 @@
+version: 2
+updates:
+- package-ecosystem: bundler
+ directory: "/"
+ schedule:
+ interval: daily
+ time: "04:00"
+ open-pull-requests-limit: 10
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/workflows/release.yml b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/workflows/release.yml
new file mode 100644
index 000000000..e3862e3bd
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/workflows/release.yml
@@ -0,0 +1,16 @@
+name: release
+
+on:
+ push:
+ tags:
+ - v*.*.*
+jobs:
+ release:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Release Gem
+ uses: cadwallion/publish-rubygems-action@8f9e0538302643309e4e43bf48cd34173ca48cfc
+ env:
+ RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
+ RELEASE_COMMAND: rake release
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/workflows/tests.yml b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/workflows/tests.yml
new file mode 100644
index 000000000..a0f334abf
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.github/workflows/tests.yml
@@ -0,0 +1,28 @@
+name: Tests
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+
+jobs:
+ build:
+ strategy:
+ matrix:
+ ruby-version:
+ - "2.6"
+ - "2.7"
+ - "3.0"
+ - "3.1"
+ platform: [ubuntu-latest]
+ runs-on: ${{ matrix.platform }}
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up Ruby
+ uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: ${{ matrix.ruby-version }}
+ - name: Install dependencies
+ run: bundle install
+ - name: Run tests
+ run: bundle exec rake
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.gitignore b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.gitignore
new file mode 100644
index 000000000..85062928f
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.gitignore
@@ -0,0 +1,8 @@
+# Bundler
+/.bundle
+/Gemfile.lock
+/pkg/*
+
+# YARD
+/.yardoc
+/yardoc/
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.rubocop.yml b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.rubocop.yml
new file mode 100644
index 000000000..af922f52f
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.rubocop.yml
@@ -0,0 +1,36 @@
+inherit_from:
+ - .rubocop_opinionated.yml
+
+AllCops:
+ Exclude:
+ # Exclude .gemspec files because they are generally auto-generated
+ - '*.gemspec'
+ # Exclude vendored folders
+ - 'tmp/**/*'
+ - 'vendor/**/*'
+ # Exclude artifacts
+ - 'pkg/**/*'
+ # Other
+ - 'test/benchmarks/**/*'
+ - 'test/profilers/**/*'
+
+# I often use @_variable to avoid clashing.
+Naming/MemoizedInstanceVariableName:
+ Enabled: false
+
+Style/ClassAndModuleChildren:
+ Exclude:
+ - 'spec/**/*_spec.rb'
+ - 'test/**/*_test.rb'
+
+# Dear Rubocop, I don't want to use String#strip_heredoc
+Layout/HeredocIndentation:
+ Enabled: false
+
+Style/WordArray:
+ Enabled: false
+ MinSize: 3
+
+Style/SymbolArray:
+ Enabled: false
+ MinSize: 3
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.rubocop_opinionated.yml b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.rubocop_opinionated.yml
new file mode 100644
index 000000000..761e2c7db
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.rubocop_opinionated.yml
@@ -0,0 +1,163 @@
+AllCops:
+ Exclude:
+ # Exclude .gemspec files because they are generally auto-generated
+ - '*.gemspec'
+ # Exclude vendored folders
+ - 'tmp/**/*'
+ - 'vendor/**/*'
+ NewCops: enable
+
+# [codesmell]
+Layout/LineLength:
+ Enabled: false
+ Exclude:
+ - 'spec/**/*_spec.rb'
+ - 'test/**/*_test.rb'
+ Max: 100
+
+Lint/ConstantDefinitionInBlock:
+ Exclude:
+ - 'Rakefile'
+ - 'spec/**/*'
+ - 'test/**/*'
+
+# [codesmell]
+Metrics/AbcSize:
+ Enabled: false
+ Exclude:
+ - 'spec/**/*_spec.rb'
+ - 'test/**/*_test.rb'
+
+# [codesmell]
+Metrics/BlockLength:
+ Enabled: false
+
+# [codesmell]
+Metrics/CyclomaticComplexity:
+ Enabled: false
+ Exclude:
+ - 'spec/**/*_spec.rb'
+ - 'test/**/*_test.rb'
+
+# [codesmell]
+Metrics/ClassLength:
+ Enabled: false
+ Exclude:
+ - 'spec/**/*_spec.rb'
+ - 'test/**/*_test.rb'
+
+# [codesmell]
+Metrics/MethodLength:
+ Enabled: false
+ Exclude:
+ - 'spec/**/*_spec.rb'
+ - 'test/**/*_test.rb'
+ Max: 10
+
+# [codesmell]
+Metrics/ModuleLength:
+ Enabled: false
+ Exclude:
+ - 'spec/**/*_spec.rb'
+ - 'test/**/*_test.rb'
+
+# [codesmell]
+Metrics/ParameterLists:
+ Enabled: false
+ Max: 5
+
+# [codesmell]
+Metrics/PerceivedComplexity:
+ Enabled: false
+
+# Do not use "and" or "or" in conditionals, but for readability we can use it
+# to chain executions. Just beware of operator order.
+Style/AndOr:
+ EnforcedStyle: conditionals
+
+Style/Documentation:
+ Exclude:
+ - 'spec/**/*'
+ - 'test/**/*'
+
+# Double empty lines are useful to separate conceptually different methods
+# in the same class or module.
+Layout/EmptyLines:
+ Enabled: false
+
+# In most cases, a space is nice. Sometimes, it's not.
+# Just be consistent with the rest of the surrounding code.
+Layout/EmptyLinesAroundClassBody:
+ Enabled: false
+
+# In most cases, a space is nice. Sometimes, it's not.
+# Just be consistent with the rest of the surrounding code.
+Layout/EmptyLinesAroundModuleBody:
+ Enabled: false
+
+# This is quite buggy, as it doesn't recognize double lines.
+# Double empty lines are useful to separate conceptually different methods
+# in the same class or module.
+Layout/EmptyLineBetweenDefs:
+ Enabled: false
+
+# I personally don't care about the format style.
+# In most cases I like to use %, but not at the point I want to enforce it
+# as a convention in the entire code.
+Style/FormatString:
+ Enabled: false
+
+# Annotated tokens (like %s) are a good thing, but in most cases we don't need them.
+# %s is a simpler and straightforward version that works in almost all cases. So don't complain.
+Style/FormatStringToken:
+ Enabled: false
+
+# unless is not always cool.
+Style/NegatedIf:
+ Enabled: false
+
+# For years, %w() has been the de-facto standard. A lot of libraries are using ().
+# Switching to [] would be a nightmare.
+Style/PercentLiteralDelimiters:
+ Enabled: false
+
+# There are cases were the inline rescue is ok. We can either downgrade the severity,
+# or rely on the developer judgement on a case-by-case basis.
+Style/RescueModifier:
+ Enabled: false
+
+Style/SymbolArray:
+ EnforcedStyle: brackets
+
+# Sorry, but using trailing spaces helps readability.
+#
+# %w( foo bar )
+#
+# looks better to me than
+#
+# %w( foo bar )
+#
+Layout/SpaceInsidePercentLiteralDelimiters:
+ Enabled: false
+
+# Hate It or Love It, I prefer double quotes as this is more consistent
+# with several other programming languages and the output of puts and inspect.
+Style/StringLiterals:
+ EnforcedStyle: double_quotes
+
+# It's nice to be consistent. The trailing comma also allows easy reordering,
+# and doesn't cause a diff in Git when you add a line to the bottom.
+Style/TrailingCommaInArrayLiteral:
+ EnforcedStyleForMultiline: consistent_comma
+Style/TrailingCommaInHashLiteral:
+ EnforcedStyleForMultiline: consistent_comma
+
+Style/TrivialAccessors:
+ # IgnoreClassMethods because I want to be able to define class-level accessors
+ # that sets an instance variable on the metaclass, such as:
+ #
+ # def self.default=(value)
+ # @default = value
+ # end
+ #
+ IgnoreClassMethods: true
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.yardopts b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.yardopts
new file mode 100644
index 000000000..0a782de2b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/.yardopts
@@ -0,0 +1 @@
+--title 'Ruby Public Suffix API Documentation'
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/2.0-Upgrade.md b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/2.0-Upgrade.md
new file mode 100644
index 000000000..1a10bfb36
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/2.0-Upgrade.md
@@ -0,0 +1,52 @@
+# Welcome to PublicSuffix 2.0!
+
+PublicSuffix 2.0 contains a rewritten internal representation and comparison logic, that drastically increases the lookup performance. The new version also changes several internal and external API.
+
+This document documents the most relevant changes to help you upgrading from PublicSuffix 1.0 to 2.0.
+
+## What's New
+
+- The library is now 100% compliants with the official PublicSuffix tests. The major breaking change you may experience, is that if a domain passed as input doesn't match any rule, the rule `*` is assumed. You can override this behavior by passing a custom default rule with the `default_rule` option. The old behavior can be restored by passing `default_rule: nil`.
+- `PublicSuffix.domain` is a new method that parses the input and returns the domain (combination of second level domain + suffix). This is a convenient helper to parse a domain name, for example when you need to determine the cookie or SSL scope.
+- Added the ability to disable the use of private domains either at runtime, in addition to the ability to not load the private domains section when reading the list (`private_domains: false`). This feature also superseded the `private_domains` class-level attribute, that is no longer available.
+
+## Upgrade
+
+When upgrading, here's the most relevant changes to keep an eye on:
+
+- Several futile utility helpers were removed, such as `Domain#rule`, `Domain#is_a_domain?`, `Domain#is_a_subdomain?`, `Domain#valid?`. You can easily obtain the same result by having a custom method that reconstructs the logic, and/or calling `PublicSuffix.{domain|parse}(domain.to_s)`.
+- `PublicSuffix::List.private_domains` is no longer available. Instead, you now have two ways to enable/disable the private domains:
+
+ 1. At runtime, by using the `ignore_private` option
+
+ ```ruby
+ PublicSuffix.domain("something.blogspot.com", ignore_private: true)
+ ```
+
+ 1. Loading a filtered list:
+
+ ```ruby
+ # Disable support for private TLDs
+ PublicSuffix::List.default = PublicSuffix::List.parse(File.read(PublicSuffix::List::DEFAULT_LIST_PATH), private_domains: false)
+ # => "blogspot.com"
+ PublicSuffix.domain("something.blogspot.com")
+ # => "blogspot.com"
+ ```
+- Now that the library is 100% compliant with the official PublicSuffix algorithm, if a domain passed as input doesn't match any rule, the wildcard rule `*` is assumed. This means that unlisted TLDs will be considered valid by default, when they would have been invalid in 1.x. However, you can override this behavior to emulate the 1.x behavior if needed:
+
+ ```ruby
+ # 1.x:
+
+ PublicSuffix.valid?("google.commm")
+ # => false
+
+ # 2.x:
+
+ PublicSuffix.valid?("google.commm")
+ # => true
+
+ # Overriding 2.x behavior if needed:
+
+ PublicSuffix.valid?("google.commm", default_rule: nil)
+ # => false
+ ````
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/CHANGELOG.md b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/CHANGELOG.md
new file mode 100644
index 000000000..b6178f560
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/CHANGELOG.md
@@ -0,0 +1,417 @@
+# Changelog
+
+This project uses [Semantic Versioning 2.0.0](https://semver.org/).
+
+
+## 4.0.7
+
+### Fixes
+
+- Fixed YARD rake task (GH-179)
+
+### Changed
+
+- Updated definitions.
+
+
+## 4.0.6
+
+### Changed
+
+- Updated definitions.
+
+
+## 4.0.5
+
+### Changed
+
+- Updated definitions.
+
+
+## 4.0.4
+
+### Changed
+
+- Updated definitions.
+
+
+## 4.0.3
+
+### Fixed
+
+- Fixed 2.7 deprecations and warnings (GH-167). [Thanks @BrianHawley]
+
+
+## 4.0.2
+
+### Changed
+
+- Updated definitions.
+
+
+## 4.0.1
+
+### Changed
+
+- Updated definitions.
+
+
+## 4.0.0
+
+### Changed
+
+- Minimum Ruby version is 2.3
+
+
+## Release 3.1.1
+
+- CHANGED: Updated definitions.
+- CHANGED: Rolled back support for Ruby 2.3 (GH-161, GH-162)
+
+IMPORTANT: 3.x is the latest version compatible with Ruby 2.1 and Ruby 2.2.
+
+
+## Release 3.1.0
+
+- CHANGED: Updated definitions.
+- CHANGED: Minimum Ruby version is 2.3
+- CHANGED: Upgraded to Bundler 2.x
+
+
+## Release 3.0.3
+
+- CHANGED: Updated definitions.
+
+
+## Release 3.0.2
+
+- CHANGED: Updated definitions.
+
+
+## Release 3.0.1
+
+- CHANGED: Updated definitions.
+- CHANGED: Improve performance and avoid allocation (GH-146). [Thanks @robholland]
+
+
+## Release 3.0.0
+
+This new version includes a major redesign of the library internals, with the goal to drastically
+improve the lookup time while reducing storage space.
+
+For this reason, several public methods that are no longer applicable have been deprecated
+and/or removed. You can find more information at GH-133.
+
+- CHANGED: Updated definitions.
+- CHANGED: Dropped support for Ruby < 2.1
+- CHANGED: `PublicSuffix::List#rules` is now protected. You should not rely on it as the internal rule representation is subject to change to optimize performances.
+- CHANGED: Removed `PublicSuffix::List.clear`, it was an unnecessary accessor method. Use `PublicSuffix::List.default = nil` if you **really** need to reset the default list. You shouldn't.
+- CHANGED: `PublicSuffix::List#select` is now private. You should not use it, instead use `PublicSuffix::List#find`.
+- CHANGED: `PublicSuffix::List` no longer implements Enumerable. Instead, use `#each` to loop over, or get an Enumerator.
+- CHANGED: Redesigned internal list storage and lookup algorithm to achieve O(1) lookup time (see GH-133).
+
+
+## Release 2.0.5
+
+- CHANGED: Updated definitions.
+- CHANGED: Initialization performance improvements (GH-128). [Thanks @casperisfine]
+
+
+## Release 2.0.4
+
+- FIXED: Fix a bug that caused the GEM to be published with the wrong version number in the gemspec (GH-121).
+
+- CHANGED: Updated definitions.
+
+
+## Release 2.0.3
+
+- CHANGED: Updated definitions.
+
+
+## Release 2.0.2
+
+- CHANGED: Updated definitions.
+
+
+## Release 2.0.1
+
+- FIXED: Fix bug that prevented .valid? to reset the default rule
+
+
+## Release 2.0.0
+
+- NEW: Added PublicSuffix.domain # => sld.tld
+- NEW: Added the ability to disable the use of private domains either at runtime, in addition to the ability to not load the private domains section when reading the list (`private_domains: false`). This feature also superseded the `private_domains` class-level attribute, that is no longer available.
+
+- CHANGED: Considerable performance improvements (GH-92)
+- CHANGED: Updated definitions.
+- CHANGED: Removed deprecated PublicSuffix::InvalidDomain exception
+- CHANGED: If the suffix is now listed, then the prevaling rule is "*" as defined by the PSL algorithm (GH-91)
+- CHANGED: Input validation is performed only if you call `PublicSuffix.parse` or `PublicSuffix.list`
+- CHANGED: Input with leading dot is invalid per PSL acceptance tests
+- CHANGED: Removed `private_domains` class-level attribute. It is replaced by the `private_domains: false` option in the list parse method.
+- CHANGED: The default list now assumes you use UTF-8 for reading the input (GH-94),
+
+- REMOVED: Removed futile utility helpers such as `Domain#rule`, `Domain#is_a_domain?`, `Domain#is_a_subdomain?`, `Domain#valid?`. You can easily obtain the same result by having a custom method that reconstructs the logic, and/or calling `PublicSuffix.{domain|parse}(domain.to_s)`.
+
+
+## Release 1.5.3
+
+- FIXED: Don't duplicate rule indices when creating index (GH-77). [Thanks @ags]
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.5.2
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.5.1
+
+- FIXED: Ignore case for parsing and validating (GH-62)
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.5.0
+
+- CHANGED: Dropped support for Ruby < 2.0
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.4.6
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.4.5
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.4.4
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.4.3
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.4.2
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.4.1
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.4.0
+
+- CHANGED: Moved the definitions in the lib folder.
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.3.3
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.3.2
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.3.1
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.3.0
+
+- NEW: Ability to skip Private Domains (GH-28). [Thanks @rb2k]
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.2.1
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.2.0
+
+- NEW: Allow a custom List on `PublicSuffix.parse` (GH-26). [Thanks @itspriddle]
+
+- FIXED: PublicSuffix.parse and PublicSuffix.valid? crashes when input is nil (GH-20).
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.1.3
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.1.2
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.1.1
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.1.0
+
+- FIXED: #valid? and #parse consider URIs as valid domains (GH-15)
+
+- CHANGED: Updated definitions.
+
+- CHANGED: Removed deprecatd PublicSuffixService::RuleList.
+
+
+## Release 1.0.0
+
+- CHANGED: Updated definitions.
+
+
+## Release 1.0.0.rc1
+
+The library is now known as PublicSuffix.
+
+
+## Release 0.9.1
+
+- CHANGED: Renamed PublicSuffixService::RuleList to PublicSuffixService::List.
+
+- CHANGED: Renamed PublicSuffixService::List#list to PublicSuffixService::List#rules.
+
+- CHANGED: Renamed PublicSuffixService to PublicSuffix.
+
+- CHANGED: Updated definitions.
+
+
+## Release 0.9.0
+
+- CHANGED: Minimum Ruby version increased to Ruby 1.8.7.
+
+- CHANGED: rake/gempackagetask is deprecated. Use rubygems/package_task instead.
+
+
+## Release 0.8.4
+
+- FIXED: Reverted bugfix for issue #12 for Ruby 1.8.6.
+ This is the latest version compatible with Ruby 1.8.6.
+
+
+## Release 0.8.3
+
+- FIXED: Fixed ArgumentError: invalid byte sequence in US-ASCII with Ruby 1.9.2 (#12).
+
+- CHANGED: Updated definitions (#11).
+
+- CHANGED: Renamed definitions.txt to definitions.dat.
+
+
+## Release 0.8.2
+
+- NEW: Added support for rubygems-test.
+
+- CHANGED: Integrated Bundler.
+
+- CHANGED: Updated definitions.
+
+
+## Release 0.8.1
+
+- FIXED: The files in the release 0.8.0 have wrong permission 600 and can't be loaded (#10).
+
+
+## Release 0.8.0
+
+- CHANGED: Update public suffix list to d1a5599b49fa 2010-10-25 15:10 +0100 (#9)
+
+- NEW: Add support for Fully Qualified Domain Names (#7)
+
+
+## Release 0.7.0
+
+- CHANGED: Using YARD to document the code instead of RDoc.
+
+- FIXED: RuleList cache is not recreated when a new rule is appended to the list (#6)
+
+- FIXED: PublicSuffixService.valid? should return false if the domain is not defined or not allowed (#4, #5)
+
+
+## Release 0.6.0
+
+- NEW: PublicSuffixService.parse raises DomainNotAllowed when trying to parse a domain name
+ which exists, but is not allowed by the current definition list (#3)
+
+ PublicSuffixService.parse("nic.do")
+ # => PublicSuffixService::DomainNotAllowed
+
+- CHANGED: Renamed PublicSuffixService::InvalidDomain to PublicSuffixService::DomainInvalid
+
+
+## Release 0.5.2
+
+- CHANGED: Update public suffix list to 248ea690d671 2010-09-16 18:02 +0100
+
+
+## Release 0.5.1
+
+- CHANGED: Update public suffix list to 14dc66dd53c1 2010-09-15 17:09 +0100
+
+
+## Release 0.5.0
+
+- CHANGED: Improve documentation for Domain#domain and Domain#subdomain (#1).
+
+- CHANGED: Performance improvements (#2).
+
+
+## Release 0.4.0
+
+- CHANGED: Rename library from DomainName to PublicSuffixService to reduce the probability of name conflicts.
+
+
+## Release 0.3.1
+
+- Deprecated DomainName library.
+
+
+## Release 0.3.0
+
+- CHANGED: DomainName#domain and DomainName#subdomain are no longer alias of Domain#sld and Domain#tld.
+
+- CHANGED: Removed DomainName#labels and decoupled Rule from DomainName.
+
+- CHANGED: DomainName#valid? no longer instantiates new DomainName objects. This means less overhead.
+
+- CHANGED: Refactoring the entire DomainName API. Removed the internal on-the-fly parsing. Added a bunch of new methods to check and validate the DomainName.
+
+
+## Release 0.2.0
+
+- NEW: DomainName#valid?
+
+- NEW: DomainName#parse and DomainName#parse!
+
+- NEW: DomainName#valid_domain? and DomainName#valid_subdomain?
+
+- CHANGED: Make sure RuleList lookup is only performed once.
+
+
+## Release 0.1.0
+
+- Initial version
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/Gemfile b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/Gemfile
new file mode 100644
index 000000000..8c679696b
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/Gemfile
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gemspec
+
+gem "rake"
+
+gem "memory_profiler", require: false
+gem "minitest"
+gem "minitest-reporters"
+gem "mocha"
+gem "rubocop", "~>0.90", require: false
+gem "yard"
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/LICENSE.txt b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/LICENSE.txt
new file mode 100644
index 000000000..fc7507bae
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2009-2022 Simone Carletti
+
+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.
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/README.md b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/README.md
new file mode 100644
index 000000000..0747354fb
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/README.md
@@ -0,0 +1,217 @@
+# Public Suffix for Ruby
+
+PublicSuffix is a Ruby domain name parser based on the [Public Suffix List](https://publicsuffix.org/).
+
+[![Build Status](https://github.com/weppos/publicsuffix-ruby/actions/workflows/tests.yml/badge.svg)](https://github.com/weppos/publicsuffix-ruby/actions/workflows/tests.yml)
+[![Tidelift dependencies](https://tidelift.com/badges/package/rubygems/public_suffix)](https://tidelift.com/subscription/pkg/rubygems-public-suffix?utm_source=rubygems-public-suffix&utm_medium=referral&utm_campaign=enterprise)
+
+
+## Links
+
+- [Homepage](https://simonecarletti.com/code/publicsuffix-ruby)
+- [Repository](https://github.com/weppos/publicsuffix-ruby)
+- [API Documentation](https://rubydoc.info/gems/public_suffix)
+- [Introducing the Public Suffix List library for Ruby](https://simonecarletti.com/blog/2010/06/public-suffix-list-library-for-ruby/)
+
+
+## Requirements
+
+PublicSuffix requires **Ruby >= 2.3**. For an older versions of Ruby use a previous release.
+
+
+## Installation
+
+You can install the gem manually:
+
+```shell
+gem install public_suffix
+```
+
+Or use Bundler and define it as a dependency in your `Gemfile`:
+
+```ruby
+gem 'public_suffix'
+```
+
+If you are upgrading to 2.0, see [2.0-Upgrade.md](2.0-Upgrade.md).
+
+## Usage
+
+Extract the domain out from a name:
+
+```ruby
+PublicSuffix.domain("google.com")
+# => "google.com"
+PublicSuffix.domain("www.google.com")
+# => "google.com"
+PublicSuffix.domain("www.google.co.uk")
+# => "google.co.uk"
+```
+
+Parse a domain without subdomains:
+
+```ruby
+domain = PublicSuffix.parse("google.com")
+# => #
+domain.tld
+# => "com"
+domain.sld
+# => "google"
+domain.trd
+# => nil
+domain.domain
+# => "google.com"
+domain.subdomain
+# => nil
+```
+
+Parse a domain with subdomains:
+
+```ruby
+domain = PublicSuffix.parse("www.google.com")
+# => #
+domain.tld
+# => "com"
+domain.sld
+# => "google"
+domain.trd
+# => "www"
+domain.domain
+# => "google.com"
+domain.subdomain
+# => "www.google.com"
+```
+
+Simple validation example:
+
+```ruby
+PublicSuffix.valid?("google.com")
+# => true
+
+PublicSuffix.valid?("www.google.com")
+# => true
+
+# Explicitly forbidden, it is listed as a private domain
+PublicSuffix.valid?("blogspot.com")
+# => false
+
+# Unknown/not-listed TLD domains are valid by default
+PublicSuffix.valid?("example.tldnotlisted")
+# => true
+```
+
+Strict validation (without applying the default * rule):
+
+```ruby
+PublicSuffix.valid?("example.tldnotlisted", default_rule: nil)
+# => false
+```
+
+
+## Fully Qualified Domain Names
+
+This library automatically recognizes Fully Qualified Domain Names. A FQDN is a domain name that end with a trailing dot.
+
+```ruby
+# Parse a standard domain name
+PublicSuffix.domain("www.google.com")
+# => "google.com"
+
+# Parse a fully qualified domain name
+PublicSuffix.domain("www.google.com.")
+# => "google.com"
+```
+
+## Private domains
+
+This library has support for switching off support for private (non-ICANN).
+
+```ruby
+# Extract a domain including private domains (by default)
+PublicSuffix.domain("something.blogspot.com")
+# => "something.blogspot.com"
+
+# Extract a domain excluding private domains
+PublicSuffix.domain("something.blogspot.com", ignore_private: true)
+# => "blogspot.com"
+
+# It also works for #parse and #valid?
+PublicSuffix.parse("something.blogspot.com", ignore_private: true)
+PublicSuffix.valid?("something.blogspot.com", ignore_private: true)
+```
+
+If you don't care about private domains at all, it's more efficient to exclude them when the list is parsed:
+
+```ruby
+# Disable support for private TLDs
+PublicSuffix::List.default = PublicSuffix::List.parse(File.read(PublicSuffix::List::DEFAULT_LIST_PATH), private_domains: false)
+# => "blogspot.com"
+PublicSuffix.domain("something.blogspot.com")
+# => "blogspot.com"
+```
+
+
+## What is the Public Suffix List?
+
+The [Public Suffix List](https://publicsuffix.org) is a cross-vendor initiative to provide an accurate list of domain name suffixes.
+
+The Public Suffix List is an initiative of the Mozilla Project, but is maintained as a community resource. It is available for use in any software, but was originally created to meet the needs of browser manufacturers.
+
+A "public suffix" is one under which Internet users can directly register names. Some examples of public suffixes are ".com", ".co.uk" and "pvt.k12.wy.us". The Public Suffix List is a list of all known public suffixes.
+
+
+## Why the Public Suffix List is better than any available Regular Expression parser?
+
+Previously, browsers used an algorithm which basically only denied setting wide-ranging cookies for top-level domains with no dots (e.g. com or org). However, this did not work for top-level domains where only third-level registrations are allowed (e.g. co.uk). In these cases, websites could set a cookie for co.uk which will be passed onto every website registered under co.uk.
+
+Clearly, this was a security risk as it allowed websites other than the one setting the cookie to read it, and therefore potentially extract sensitive information.
+
+Since there is no algorithmic method of finding the highest level at which a domain may be registered for a particular top-level domain (the policies differ with each registry), the only method is to create a list of all top-level domains and the level at which domains can be registered. This is the aim of the effective TLD list.
+
+As well as being used to prevent cookies from being set where they shouldn't be, the list can also potentially be used for other applications where the registry controlled and privately controlled parts of a domain name need to be known, for example when grouping by top-level domains.
+
+Source: https://wiki.mozilla.org/Public_Suffix_List
+
+Not convinced yet? Check out [this real world example](https://stackoverflow.com/q/288810/123527).
+
+
+## Does PublicSuffix make requests to Public Suffix List website?
+
+No. PublicSuffix comes with a bundled list. It does not make any HTTP requests to parse or validate a domain.
+
+
+## Support
+
+Library documentation is auto-generated from the [README](https://github.com/weppos/publicsuffix-ruby/blob/master/README.md) and the source code, and it's available at https://rubydoc.info/gems/public_suffix.
+
+- The PublicSuffix bug tracker is here: https://github.com/weppos/publicsuffix-ruby/issues
+- The PublicSuffix code repository is here: https://github.com/weppos/publicsuffix-ruby. Contributions are welcome! Please include tests and/or feature coverage for every patch, and create a topic branch for every separate change you make.
+
+[Consider subscribing to Tidelift which provides Enterprise support for this project](https://tidelift.com/subscription/pkg/rubygems-public-suffix?utm_source=rubygems-public-suffix&utm_medium=referral&utm_campaign=readme) as part of the Tidelift Subscription. Tidelift subscriptions also help the maintainers by funding the project, which in turn allows us to ship releases, bugfixes, and security updates more often.
+
+
+## Security and Vulnerability Reporting
+
+Full information and description of our security policy please visit [`SECURITY.md`](SECURITY.md)
+
+
+## Changelog
+
+See the [CHANGELOG.md](CHANGELOG.md) file for details.
+
+
+## License
+
+Copyright (c) 2009-2022 Simone Carletti. This is Free Software distributed under the MIT license.
+
+The [Public Suffix List source](https://publicsuffix.org/list/) is subject to the terms of the Mozilla Public License, v. 2.0.
+
+## Definitions
+
+tld = Top level domain, this is in reference to the last segment of a domain, sometimes the part that is directly after the "dot" symbol. For example, `mozilla.org`, the `.org` portion is the tld.
+
+sld = Second level domain, a domain that is directly below a top-level domain. For example, in `https://www.mozilla.org/en-US/`, `mozilla` is the second-level domain of the .org tld.
+
+trd = Transit routing domain, or known as a subdomain. This is the part of the domain that is before the sld or root domain. For example, in `https://www.mozilla.org/en-US/`, `www` is the trd.
+
+FQDN = Fully Qualified Domain Names, are domain names that are written with the hostname and the domain name, and include the top-level domain, the format looks like `[hostname].[domain].[tld].` for ex. `[www].[mozilla].[org]`.
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/Rakefile b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/Rakefile
new file mode 100644
index 000000000..26a6c9941
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/Rakefile
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+require "bundler/gem_tasks"
+
+# By default, run tests and linter.
+task default: [:test, :rubocop]
+
+
+require "rake/testtask"
+
+Rake::TestTask.new do |t|
+ t.libs = %w( lib test )
+ t.pattern = "test/**/*_test.rb"
+ t.verbose = !ENV["VERBOSE"].nil?
+ t.warning = !ENV["WARNING"].nil?
+end
+
+require "rubocop/rake_task"
+
+RuboCop::RakeTask.new
+
+
+require "yard"
+require "yard/rake/yardoc_task"
+
+YARD::Rake::YardocTask.new(:yardoc) do |y|
+ y.options = ["--output-dir", "yardoc"]
+end
+
+CLOBBER.include "yardoc"
+
+
+task :benchmarks do
+ Dir["benchmarks/bm_*.rb"].each do |file|
+ sh "ruby #{file}"
+ end
+end
+task default: [:benchmarks] if ENV["BENCHMARKS"] == "1"
+
+
+desc "Downloads the Public Suffix List file from the repository and stores it locally."
+task :"update-list" do
+ require "net/http"
+
+ DEFINITION_URL = "https://raw.githubusercontent.com/publicsuffix/list/master/public_suffix_list.dat"
+
+ File.open("data/list.txt", "w+") do |f|
+ response = Net::HTTP.get_response(URI.parse(DEFINITION_URL))
+ response.body
+ f.write(response.body)
+ end
+end
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/SECURITY.md b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/SECURITY.md
new file mode 100644
index 000000000..f3291287a
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/SECURITY.md
@@ -0,0 +1,104 @@
+# Security Policy
+
+## Supported Versions
+
+Security updates are provided only for the current minor version.
+
+If you are using a previous minor version, we recommend to upgrade to the current minor version.
+This project uses [semantic versioning](https://semver.org/), therefore you can upgrade to a more recent minor version without incurring into breaking changes.
+
+Exceptionally, we may support previous minor versions upon request if there are significant reasons preventing to immediately switch the latest minor version.
+
+Older major versions are no longer supported.
+
+
+## Reporting a Vulnerability
+
+To make a report, please email weppos@weppos.net.
+
+Please consider encrypting your report with GPG using the key [0x420da82a989398df](https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x420da82a989398df).
+
+```
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+xsBNBE/QiI0BCACtBbjJnJIzaLb4NfjaljzT/+dvodst+wyDRE8Vwc6ujwboZjr2
+0QwXScNzObPazyvkSZVh3g6PveneeSD0dSw2XDqKbbtLMg/Ss12yqXJfjavH/zjk
+6Xq+nnbSnxBPzwFAAEaEFIc6H6BygJ7zHPP5WEY5QIMqifEAX//aBqHi4GXHJiHE
+237Zqufdry23jBYjY7wGXAa11VsU9Iwqh6LPB9/hc1KtzjAuvvm5ufeT/iVjxGQX
+te1OZZk6n8xSVYeLsn97PfgYs0yauhexwD9dG7FbRCB379JxPRn5akr391qXcVOG
+ZA3yBXUSPOL6D1+TS1S0su5zbw2AEp4+z3SpABEBAAHNIlNpbW9uZSBDYXJsZXR0
+aSA8d2VwcG9zQGdtYWlsLmNvbT7CwHcEEwEKACEFAlXH0UQCGy8FCwkIBwMFFQoJ
+CAsFFgIDAQACHgECF4AACgkQQg2oKpiTmN9BOQf/UHd+bmww71MkbS38KkowDu+0
+1VH35aL8sFcAMUSEA4I5oPWZoBtYYPGpALLxtrSNW+SCnmmeCQVfVmLedUVHwDZo
+TS4qiynpqnz+Cnq4KRC8VMIyaFoiT5Vg6MLtau8hJtqZn1Wv68g0nXuprsCuf9vs
+z7DDZ36z8em6OJQJQ/FQ4BGogzyYHa90cJnIM6BeLiRUUpFTl1tHLlw4JFUNi8sx
+6VQ1/nhcr3OyskAix5TytRnJ8uIn22m25GGdTF2WQPNfkWJQVT4ZDbCxT20acRp0
+l3x1DAk3Eel8gOKzgOboB3bkI5/l1XZvNL0YWGZeyfp8I7ZqpXg/m4qLDkYU2cLA
+egQTAQoAJAIbLwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAUCVf6KvAIZAQAKCRBC
+DagqmJOY34ABB/9WbNAh0l07UN1ePfVm6Brg2Yt8k6Q2lIRUG2xAeQj/+Kx/4lAL
+oY6F0jJ44kIDZqZdNA0QIqYzZRBV4iW+cQrsBUUyM+chiA3RuOsDG18sfvkyPvRy
+ecOVubHCN+nK2GKy1oHQkCpVFIeetr0ugB/j+xNDKJ3Oa5dGBKF29ZH5Pxg7cqwH
+cdkhBGMpPbBYq5pJtYGggqypELzFTG292StbtV837Eze+clWRTKtMBOHke/oKBCr
+YYic2fmipGC9XUiqvMEMAKYq5WWWXIlcSVSnBDdxq41tXjKK4XMVgoOboZCcNFvh
+0NxuDQATk1YruRZOS4SpBPXykEA1pK/zm3WmzSNTaW1vbmUgQ2FybGV0dGkgPHdl
+cHBvc0B3ZXBwb3MubmV0PsLAeQQTAQIAIwUCT9CIjQIbLwcLCQgHAwIBBhUIAgkK
+CwQWAgMBAh4BAheAAAoJEEINqCqYk5jfGWcH/Ax3EhAckGeCqNYE5BTx94bKB1LL
+vUjeUoImMtGGFxQu2jNOAjtpuyjihm9uHBZ+dxaxHHrhE11f+0sDcwvW8qtKEzOs
+GESr01VqTaVFS2JOEHhLphXseaLXJe32Osz0kHCZmrz1fCwv3b8QuWBifn8oVzcV
+vrE7lGC6pGwaiUvMsvA++RUquTlNVlh8uRrqcQCU8Ne9lSoDWHlUJes5s4FoCh3R
+oVBcKPsx3m/P9+GlEgTDqYP+WU3sfSfJYERH0r0NAYP96m2e7UQrqdgvMTVVDkPB
+UB9efZzgkL7u9IAqmLU2klSGdEZnJ8t1AsjEyHXMztC7ICUhRFCeXHdTNhHCwHwE
+EwEKACYCGy8HCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAUCVcfRaQIZAQAKCRBC
+DagqmJOY31y1B/41I/SsWwDqJP/Y3LzzatGmIv/gy+LkJBBTr/NV0NYzKV2XJ1BG
+ese2ZE4tKKdG4HDwF+IwFLBHcPZRv358IwwTRPnzeO23mxpTYAnRCdg/pcaYIJ9r
+OxIOP+R52YbgGrNKcezVA+7TY9za072P7Bk85jTM2FNfqevaf/YQ4GRcGLQ3JI8N
+tBUdvrOEETDpR0QFTr22Wv1C7UfPDsSf7ZUM7zJ38CmDji8JSlr6y75/LYSY50BB
+8EHb03QxyePe98A3WzvOoqamiCIe9bRzH5IqRAtJYDX8cK4PZmp43bQhrjdjawCc
+AU/OY9iz+zCw00+b6CNiRb59N+OwpNJh5iNNwsB5BBMBCgAjAhsvBwsJCAcDAgEG
+FQgCCQoLBBYCAwECHgECF4AFAlX+iq0ACgkQQg2oKpiTmN/z2gf/VbcQHgTlXFYa
+Sq/dE7S54uGFrdzHOV3IJyl+ByMwVoKn6zdpksRoyt7jPV3RonrUO7jEcrt7VKCU
+2KC7/MZMDoUsn9BXXTtUk+uTCNh8qllR0Fo/FvWM9RJKmcDMKwAJwcKIgbfUBJGx
+1N6pP2DUc+YCnEerRbnQ1DWJUM7BaOEN6bvPxuGblPst1l6S5VktFj3gZGYItHrs
+pit5pesILP8K6B6VCNP2WXXYvYQo7yyYcG8WBWXin8/SdNwU68lUbfhhQVIKv6LU
+h0wvgG97NsBPrFbij0K6O63FufnNr9WLMZhAzi0h6gNK2HKAyw9AZNKpPccwg+mX
+Huc/4CPRlM0uU2ltb25lIENhcmxldHRpIDxzaW1vbmUuY2FybGV0dGlAZG5zaW1w
+bGUuY29tPsLAdwQTAQoAIQUCVh4ipAIbLwULCQgHAwUVCgkICwUWAgMBAAIeAQIX
+gAAKCRBCDagqmJOY329iCACpOY5SV7hwOZ8VqmRfxRoHQFQe9Owr+hD3eL0AKZaJ
+V918dCPrrxbAmwwMAC8pS8J4CmrrTR27kxcUgVwcfyydFPrgST5pg+H7UTrBR045
+4Npw1+m99I2Pyyl3oaym4lKJFbp2c2DGODEzTg8kKfjk0cb8bd+MJrXqFyod1z5r
+0pfexwaLVt1Hz+ZsmFIPO1ISHYBPV8OkpL8Kgb8WtY6REntgNjfcmtHNi0VWQ7+N
+vgeYqdhscX8c9ROe26BiiiGXphRlAsCU/VLHOJkzoW3f9QLy4z01Xj/7OaD0JkHS
+HrES1ye3ZDxnjnTRdh4U8ntJ+L+xnePcFQA2t0eCbPwIzSZTaW1vbmUgQ2FybGV0
+dGkgPHNpbW9uZUBjYXJsZXR0aS5uYW1lPsLAdwQTAQoAIQUCVf7gmwIbLwULCQgH
+AwUVCgkICwUWAgMBAAIeAQIXgAAKCRBCDagqmJOY37L+B/45pWT3wgm43+kzHVOT
+j63m4zmRb53TGZToRSxz3acyuVSuqU9Tv010F0ZV9ccb0NDeN+88s9tEisuoO0Rz
+5vhC8AtwRUyR3ADE9pBtvvxT+4R9y8yYNTCIX45VPG9ZPp9+7i+XCdKtz30KIV7r
+smktd2FrK16r/KUN8+03iZSgzQ9lsTmXK5L7zH/f3Tqhbfvybr4+M71KGnSoP+iP
+vwfsoBb5rhijQLOykTb+VzdDpHQbupwxwm/3S4nsA4U6tonIywlJgBDSjgDjQj0i
+Ez+Db2Wt59y6LoksRQogvJqm0nuxFUWMZc47zdhsRnqmxUYTNpKaJPWc6pfxsQPK
+ZvTjzsBNBE/QiI0BCACsaNbG6kyKJBWL5jPhebsijk8PCfSHte1jNCA5l/NvaImZ
+6ORq9f8S9MWlYxmzyUkVJaWrv+9p5zmjwcaegjerj6ggjPDEXlZG41Z4YE1/R8pf
+wkSvrkLziBxZDB1aYplg8kgXkaIf2yi2FrMPSi04sjvQbBSCcIJeh6+vGK8tIJTn
+e0tQbEvRorTwBAPAFlpx/bdk1wZYu11vFKbckhKWou7f8XSdn9ng9cY5uK+xBlFU
+2ORgL1ygeIoY9uRvNZG2ncvCvxUPgOqbo31R8KPyvV4rNNvGBOfxQER9LbieBF2I
+5I1gpyboGWKcXu1eV7tOpjtW6LHt+6NHhE6L1Lw1ABEBAAHCwX4EGAECAAkFAk/Q
+iI0CGy4BKQkQQg2oKpiTmN/AXSAEGQECAAYFAk/QiI0ACgkQcBROh493BN9hdwf9
+GjiF1GcQN+3TZkXdr2WY0AlbcA/wBp6+ShnqcoU5XLuA0RY3+rWGuaSc2buLke6Y
+2MhMAYcgmPdG+WTBoW5dWQGXBZ1IHYVR8HLGaF+Vate1MofE1BNHXhnilIMMfH4G
+Tcr3Z3/FaSk9OdHlyiE/Jo7++8PQ+auHVyjtqry+/ysAnyr+lnCn+K4E0PQ1fYpP
+fiawKtfSqk9h6HjjMyx9Adrz+ljXh+NyVqYZUfRytjgO+v+dAQmMczT1EawLTdX+
+trx1tHR549pEey7in5QKsje3GLH4zq4mCdWBlivQxmmmlvR07DysLADMbcpjKK2g
+utfzygZHCU9hWGR3wbWZ7lXjB/0ZzutNaNYzSCkiC8PIWH1bG+TJO9pslHwP+aBJ
+NGAmcwyOH9Bub2CSXikQFZNUmVRwtl7mN4bVAHI8zbMd6xdlX22yDgQei54dPXDw
+UYsvGE4zmrD97he1EYcIOKMFHzlJNcWK+uR7lEq6mv7SFGnBr8qTYZRi1bySRgwd
+UORuDV12GKTen9WectKtepW0fgYSz+udbDKQyyRef+7xGtCErWRL7f1qr8xm60da
++gSwyD/WkPTY8SP2mdq4u+6m4dWS26kKoENwuL7jUktl/C/EG7NmUKURbXG8lmeu
+q59MIs/Fb3SgaO+zN2FZTYp6dyRJHbeEz55JdOu6F+6ihZYH
+=j6Xr
+-----END PGP PUBLIC KEY BLOCK-----
+```
+
+
+## Tracking Security Updates
+
+Information about security vulnerabilities are published in the [Security Advisories](https://github.com/weppos/publicsuffix-ruby/security/advisories) page.
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/bin/console b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/bin/console
new file mode 100755
index 000000000..c638bb43d
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/bin/console
@@ -0,0 +1,15 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+require "bundler/setup"
+require "public_suffix"
+
+# You can add fixtures and/or initialization code here to make experimenting
+# with your gem easier. You can also use a different console, if you like.
+
+# (If you use this, don't forget to add pry to your Gemfile!)
+# require "pry"
+# Pry.start
+
+require "irb"
+IRB.start
diff --git a/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/data/list.txt b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/data/list.txt
new file mode 100644
index 000000000..237e159cb
--- /dev/null
+++ b/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/data/list.txt
@@ -0,0 +1,14035 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+// Please pull this list from, and only from https://publicsuffix.org/list/public_suffix_list.dat,
+// rather than any other VCS sites. Pulling from any other URL is not guaranteed to be supported.
+
+// Instructions on pulling and using this list can be found at https://publicsuffix.org/list/.
+
+// ===BEGIN ICANN DOMAINS===
+
+// ac : http://nic.ac/rules.htm
+ac
+com.ac
+edu.ac
+gov.ac
+net.ac
+mil.ac
+org.ac
+
+// ad : https://en.wikipedia.org/wiki/.ad
+ad
+nom.ad
+
+// ae : https://tdra.gov.ae/en/aeda/ae-policies
+ae
+co.ae
+net.ae
+org.ae
+sch.ae
+ac.ae
+gov.ae
+mil.ae
+
+// aero : see https://www.information.aero/index.php?id=66
+aero
+accident-investigation.aero
+accident-prevention.aero
+aerobatic.aero
+aeroclub.aero
+aerodrome.aero
+agents.aero
+aircraft.aero
+airline.aero
+airport.aero
+air-surveillance.aero
+airtraffic.aero
+air-traffic-control.aero
+ambulance.aero
+amusement.aero
+association.aero
+author.aero
+ballooning.aero
+broker.aero
+caa.aero
+cargo.aero
+catering.aero
+certification.aero
+championship.aero
+charter.aero
+civilaviation.aero
+club.aero
+conference.aero
+consultant.aero
+consulting.aero
+control.aero
+council.aero
+crew.aero
+design.aero
+dgca.aero
+educator.aero
+emergency.aero
+engine.aero
+engineer.aero
+entertainment.aero
+equipment.aero
+exchange.aero
+express.aero
+federation.aero
+flight.aero
+fuel.aero
+gliding.aero
+government.aero
+groundhandling.aero
+group.aero
+hanggliding.aero
+homebuilt.aero
+insurance.aero
+journal.aero
+journalist.aero
+leasing.aero
+logistics.aero
+magazine.aero
+maintenance.aero
+media.aero
+microlight.aero
+modelling.aero
+navigation.aero
+parachuting.aero
+paragliding.aero
+passenger-association.aero
+pilot.aero
+press.aero
+production.aero
+recreation.aero
+repbody.aero
+res.aero
+research.aero
+rotorcraft.aero
+safety.aero
+scientist.aero
+services.aero
+show.aero
+skydiving.aero
+software.aero
+student.aero
+trader.aero
+trading.aero
+trainer.aero
+union.aero
+workinggroup.aero
+works.aero
+
+// af : http://www.nic.af/help.jsp
+af
+gov.af
+com.af
+org.af
+net.af
+edu.af
+
+// ag : http://www.nic.ag/prices.htm
+ag
+com.ag
+org.ag
+net.ag
+co.ag
+nom.ag
+
+// ai : http://nic.com.ai/
+ai
+off.ai
+com.ai
+net.ai
+org.ai
+
+// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31
+al
+com.al
+edu.al
+gov.al
+mil.al
+net.al
+org.al
+
+// am : https://www.amnic.net/policy/en/Policy_EN.pdf
+am
+co.am
+com.am
+commune.am
+net.am
+org.am
+
+// ao : https://en.wikipedia.org/wiki/.ao
+// http://www.dns.ao/REGISTR.DOC
+ao
+ed.ao
+gv.ao
+og.ao
+co.ao
+pb.ao
+it.ao
+
+// aq : https://en.wikipedia.org/wiki/.aq
+aq
+
+// ar : https://nic.ar/es/nic-argentina/normativa
+ar
+bet.ar
+com.ar
+coop.ar
+edu.ar
+gob.ar
+gov.ar
+int.ar
+mil.ar
+musica.ar
+mutual.ar
+net.ar
+org.ar
+senasa.ar
+tur.ar
+
+// arpa : https://en.wikipedia.org/wiki/.arpa
+// Confirmed by registry 2008-06-18
+arpa
+e164.arpa
+in-addr.arpa
+ip6.arpa
+iris.arpa
+uri.arpa
+urn.arpa
+
+// as : https://en.wikipedia.org/wiki/.as
+as
+gov.as
+
+// asia : https://en.wikipedia.org/wiki/.asia
+asia
+
+// at : https://en.wikipedia.org/wiki/.at
+// Confirmed by registry 2008-06-17
+at
+ac.at
+co.at
+gv.at
+or.at
+sth.ac.at
+
+// au : https://en.wikipedia.org/wiki/.au
+// http://www.auda.org.au/
+au
+// 2LDs
+com.au
+net.au
+org.au
+edu.au
+gov.au
+asn.au
+id.au
+// Historic 2LDs (closed to new registration, but sites still exist)
+info.au
+conf.au
+oz.au
+// CGDNs - http://www.cgdn.org.au/
+act.au
+nsw.au
+nt.au
+qld.au
+sa.au
+tas.au
+vic.au
+wa.au
+// 3LDs
+act.edu.au
+catholic.edu.au
+// eq.edu.au - Removed at the request of the Queensland Department of Education
+nsw.edu.au
+nt.edu.au
+qld.edu.au
+sa.edu.au
+tas.edu.au
+vic.edu.au
+wa.edu.au
+// act.gov.au Bug 984824 - Removed at request of Greg Tankard
+// nsw.gov.au Bug 547985 - Removed at request of
+// nt.gov.au Bug 940478 - Removed at request of Greg Connors
+qld.gov.au
+sa.gov.au
+tas.gov.au
+vic.gov.au
+wa.gov.au
+// 4LDs
+// education.tas.edu.au - Removed at the request of the Department of Education Tasmania
+schools.nsw.edu.au
+
+// aw : https://en.wikipedia.org/wiki/.aw
+aw
+com.aw
+
+// ax : https://en.wikipedia.org/wiki/.ax
+ax
+
+// az : https://en.wikipedia.org/wiki/.az
+az
+com.az
+net.az
+int.az
+gov.az
+org.az
+edu.az
+info.az
+pp.az
+mil.az
+name.az
+pro.az
+biz.az
+
+// ba : http://nic.ba/users_data/files/pravilnik_o_registraciji.pdf
+ba
+com.ba
+edu.ba
+gov.ba
+mil.ba
+net.ba
+org.ba
+
+// bb : https://en.wikipedia.org/wiki/.bb
+bb
+biz.bb
+co.bb
+com.bb
+edu.bb
+gov.bb
+info.bb
+net.bb
+org.bb
+store.bb
+tv.bb
+
+// bd : https://en.wikipedia.org/wiki/.bd
+*.bd
+
+// be : https://en.wikipedia.org/wiki/.be
+// Confirmed by registry 2008-06-08
+be
+ac.be
+
+// bf : https://en.wikipedia.org/wiki/.bf
+bf
+gov.bf
+
+// bg : https://en.wikipedia.org/wiki/.bg
+// https://www.register.bg/user/static/rules/en/index.html
+bg
+a.bg
+b.bg
+c.bg
+d.bg
+e.bg
+f.bg
+g.bg
+h.bg
+i.bg
+j.bg
+k.bg
+l.bg
+m.bg
+n.bg
+o.bg
+p.bg
+q.bg
+r.bg
+s.bg
+t.bg
+u.bg
+v.bg
+w.bg
+x.bg
+y.bg
+z.bg
+0.bg
+1.bg
+2.bg
+3.bg
+4.bg
+5.bg
+6.bg
+7.bg
+8.bg
+9.bg
+
+// bh : https://en.wikipedia.org/wiki/.bh
+bh
+com.bh
+edu.bh
+net.bh
+org.bh
+gov.bh
+
+// bi : https://en.wikipedia.org/wiki/.bi
+// http://whois.nic.bi/
+bi
+co.bi
+com.bi
+edu.bi
+or.bi
+org.bi
+
+// biz : https://en.wikipedia.org/wiki/.biz
+biz
+
+// bj : https://en.wikipedia.org/wiki/.bj
+bj
+asso.bj
+barreau.bj
+gouv.bj
+
+// bm : http://www.bermudanic.bm/dnr-text.txt
+bm
+com.bm
+edu.bm
+gov.bm
+net.bm
+org.bm
+
+// bn : http://www.bnnic.bn/faqs
+bn
+com.bn
+edu.bn
+gov.bn
+net.bn
+org.bn
+
+// bo : https://nic.bo/delegacion2015.php#h-1.10
+bo
+com.bo
+edu.bo
+gob.bo
+int.bo
+org.bo
+net.bo
+mil.bo
+tv.bo
+web.bo
+// Social Domains
+academia.bo
+agro.bo
+arte.bo
+blog.bo
+bolivia.bo
+ciencia.bo
+cooperativa.bo
+democracia.bo
+deporte.bo
+ecologia.bo
+economia.bo
+empresa.bo
+indigena.bo
+industria.bo
+info.bo
+medicina.bo
+movimiento.bo
+musica.bo
+natural.bo
+nombre.bo
+noticias.bo
+patria.bo
+politica.bo
+profesional.bo
+plurinacional.bo
+pueblo.bo
+revista.bo
+salud.bo
+tecnologia.bo
+tksat.bo
+transporte.bo
+wiki.bo
+
+// br : http://registro.br/dominio/categoria.html
+// Submitted by registry
+br
+9guacu.br
+abc.br
+adm.br
+adv.br
+agr.br
+aju.br
+am.br
+anani.br
+aparecida.br
+app.br
+arq.br
+art.br
+ato.br
+b.br
+barueri.br
+belem.br
+bhz.br
+bib.br
+bio.br
+blog.br
+bmd.br
+boavista.br
+bsb.br
+campinagrande.br
+campinas.br
+caxias.br
+cim.br
+cng.br
+cnt.br
+com.br
+contagem.br
+coop.br
+coz.br
+cri.br
+cuiaba.br
+curitiba.br
+def.br
+des.br
+det.br
+dev.br
+ecn.br
+eco.br
+edu.br
+emp.br
+enf.br
+eng.br
+esp.br
+etc.br
+eti.br
+far.br
+feira.br
+flog.br
+floripa.br
+fm.br
+fnd.br
+fortal.br
+fot.br
+foz.br
+fst.br
+g12.br
+geo.br
+ggf.br
+goiania.br
+gov.br
+// gov.br 26 states + df https://en.wikipedia.org/wiki/States_of_Brazil
+ac.gov.br
+al.gov.br
+am.gov.br
+ap.gov.br
+ba.gov.br
+ce.gov.br
+df.gov.br
+es.gov.br
+go.gov.br
+ma.gov.br
+mg.gov.br
+ms.gov.br
+mt.gov.br
+pa.gov.br
+pb.gov.br
+pe.gov.br
+pi.gov.br
+pr.gov.br
+rj.gov.br
+rn.gov.br
+ro.gov.br
+rr.gov.br
+rs.gov.br
+sc.gov.br
+se.gov.br
+sp.gov.br
+to.gov.br
+gru.br
+imb.br
+ind.br
+inf.br
+jab.br
+jampa.br
+jdf.br
+joinville.br
+jor.br
+jus.br
+leg.br
+lel.br
+log.br
+londrina.br
+macapa.br
+maceio.br
+manaus.br
+maringa.br
+mat.br
+med.br
+mil.br
+morena.br
+mp.br
+mus.br
+natal.br
+net.br
+niteroi.br
+*.nom.br
+not.br
+ntr.br
+odo.br
+ong.br
+org.br
+osasco.br
+palmas.br
+poa.br
+ppg.br
+pro.br
+psc.br
+psi.br
+pvh.br
+qsl.br
+radio.br
+rec.br
+recife.br
+rep.br
+ribeirao.br
+rio.br
+riobranco.br
+riopreto.br
+salvador.br
+sampa.br
+santamaria.br
+santoandre.br
+saobernardo.br
+saogonca.br
+seg.br
+sjc.br
+slg.br
+slz.br
+sorocaba.br
+srv.br
+taxi.br
+tc.br
+tec.br
+teo.br
+the.br
+tmp.br
+trd.br
+tur.br
+tv.br
+udi.br
+vet.br
+vix.br
+vlog.br
+wiki.br
+zlg.br
+
+// bs : http://www.nic.bs/rules.html
+bs
+com.bs
+net.bs
+org.bs
+edu.bs
+gov.bs
+
+// bt : https://en.wikipedia.org/wiki/.bt
+bt
+com.bt
+edu.bt
+gov.bt
+net.bt
+org.bt
+
+// bv : No registrations at this time.
+// Submitted by registry
+bv
+
+// bw : https://en.wikipedia.org/wiki/.bw
+// http://www.gobin.info/domainname/bw.doc
+// list of other 2nd level tlds ?
+bw
+co.bw
+org.bw
+
+// by : https://en.wikipedia.org/wiki/.by
+// http://tld.by/rules_2006_en.html
+// list of other 2nd level tlds ?
+by
+gov.by
+mil.by
+// Official information does not indicate that com.by is a reserved
+// second-level domain, but it's being used as one (see www.google.com.by and
+// www.yahoo.com.by, for example), so we list it here for safety's sake.
+com.by
+
+// http://hoster.by/
+of.by
+
+// bz : https://en.wikipedia.org/wiki/.bz
+// http://www.belizenic.bz/
+bz
+com.bz
+net.bz
+org.bz
+edu.bz
+gov.bz
+
+// ca : https://en.wikipedia.org/wiki/.ca
+ca
+// ca geographical names
+ab.ca
+bc.ca
+mb.ca
+nb.ca
+nf.ca
+nl.ca
+ns.ca
+nt.ca
+nu.ca
+on.ca
+pe.ca
+qc.ca
+sk.ca
+yk.ca
+// gc.ca: https://en.wikipedia.org/wiki/.gc.ca
+// see also: http://registry.gc.ca/en/SubdomainFAQ
+gc.ca
+
+// cat : https://en.wikipedia.org/wiki/.cat
+cat
+
+// cc : https://en.wikipedia.org/wiki/.cc
+cc
+
+// cd : https://en.wikipedia.org/wiki/.cd
+// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1
+cd
+gov.cd
+
+// cf : https://en.wikipedia.org/wiki/.cf
+cf
+
+// cg : https://en.wikipedia.org/wiki/.cg
+cg
+
+// ch : https://en.wikipedia.org/wiki/.ch
+ch
+
+// ci : https://en.wikipedia.org/wiki/.ci
+// http://www.nic.ci/index.php?page=charte
+ci
+org.ci
+or.ci
+com.ci
+co.ci
+edu.ci
+ed.ci
+ac.ci
+net.ci
+go.ci
+asso.ci
+aéroport.ci
+int.ci
+presse.ci
+md.ci
+gouv.ci
+
+// ck : https://en.wikipedia.org/wiki/.ck
+*.ck
+!www.ck
+
+// cl : https://www.nic.cl
+// Confirmed by .CL registry
+cl
+co.cl
+gob.cl
+gov.cl
+mil.cl
+
+// cm : https://en.wikipedia.org/wiki/.cm plus bug 981927
+cm
+co.cm
+com.cm
+gov.cm
+net.cm
+
+// cn : https://en.wikipedia.org/wiki/.cn
+// Submitted by registry
+cn
+ac.cn
+com.cn
+edu.cn
+gov.cn
+net.cn
+org.cn
+mil.cn
+公司.cn
+网络.cn
+網絡.cn
+// cn geographic names
+ah.cn
+bj.cn
+cq.cn
+fj.cn
+gd.cn
+gs.cn
+gz.cn
+gx.cn
+ha.cn
+hb.cn
+he.cn
+hi.cn
+hl.cn
+hn.cn
+jl.cn
+js.cn
+jx.cn
+ln.cn
+nm.cn
+nx.cn
+qh.cn
+sc.cn
+sd.cn
+sh.cn
+sn.cn
+sx.cn
+tj.cn
+xj.cn
+xz.cn
+yn.cn
+zj.cn
+hk.cn
+mo.cn
+tw.cn
+
+// co : https://en.wikipedia.org/wiki/.co
+// Submitted by registry
+co
+arts.co
+com.co
+edu.co
+firm.co
+gov.co
+info.co
+int.co
+mil.co
+net.co
+nom.co
+org.co
+rec.co
+web.co
+
+// com : https://en.wikipedia.org/wiki/.com
+com
+
+// coop : https://en.wikipedia.org/wiki/.coop
+coop
+
+// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do
+cr
+ac.cr
+co.cr
+ed.cr
+fi.cr
+go.cr
+or.cr
+sa.cr
+
+// cu : https://en.wikipedia.org/wiki/.cu
+cu
+com.cu
+edu.cu
+org.cu
+net.cu
+gov.cu
+inf.cu
+
+// cv : https://en.wikipedia.org/wiki/.cv
+// cv : http://www.dns.cv/tldcv_portal/do?com=DS;5446457100;111;+PAGE(4000018)+K-CAT-CODIGO(RDOM)+RCNT(100); <- registration rules
+cv
+com.cv
+edu.cv
+int.cv
+nome.cv
+org.cv
+
+// cw : http://www.una.cw/cw_registry/
+// Confirmed by registry 2013-03-26
+cw
+com.cw
+edu.cw
+net.cw
+org.cw
+
+// cx : https://en.wikipedia.org/wiki/.cx
+// list of other 2nd level tlds ?
+cx
+gov.cx
+
+// cy : http://www.nic.cy/
+// Submitted by registry Panayiotou Fotia
+// namespace policies URL https://www.nic.cy/portal//sites/default/files/symfonia_gia_eggrafi.pdf
+cy
+ac.cy
+biz.cy
+com.cy
+ekloges.cy
+gov.cy
+ltd.cy
+mil.cy
+net.cy
+org.cy
+press.cy
+pro.cy
+tm.cy
+
+// cz : https://en.wikipedia.org/wiki/.cz
+cz
+
+// de : https://en.wikipedia.org/wiki/.de
+// Confirmed by registry (with technical
+// reservations) 2008-07-01
+de
+
+// dj : https://en.wikipedia.org/wiki/.dj
+dj
+
+// dk : https://en.wikipedia.org/wiki/.dk
+// Confirmed by registry 2008-06-17
+dk
+
+// dm : https://en.wikipedia.org/wiki/.dm
+dm
+com.dm
+net.dm
+org.dm
+edu.dm
+gov.dm
+
+// do : https://en.wikipedia.org/wiki/.do
+do
+art.do
+com.do
+edu.do
+gob.do
+gov.do
+mil.do
+net.do
+org.do
+sld.do
+web.do
+
+// dz : http://www.nic.dz/images/pdf_nic/charte.pdf
+dz
+art.dz
+asso.dz
+com.dz
+edu.dz
+gov.dz
+org.dz
+net.dz
+pol.dz
+soc.dz
+tm.dz
+
+// ec : http://www.nic.ec/reg/paso1.asp
+// Submitted by registry
+ec
+com.ec
+info.ec
+net.ec
+fin.ec
+k12.ec
+med.ec
+pro.ec
+org.ec
+edu.ec
+gov.ec
+gob.ec
+mil.ec
+
+// edu : https://en.wikipedia.org/wiki/.edu
+edu
+
+// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B
+ee
+edu.ee
+gov.ee
+riik.ee
+lib.ee
+med.ee
+com.ee
+pri.ee
+aip.ee
+org.ee
+fie.ee
+
+// eg : https://en.wikipedia.org/wiki/.eg
+eg
+com.eg
+edu.eg
+eun.eg
+gov.eg
+mil.eg
+name.eg
+net.eg
+org.eg
+sci.eg
+
+// er : https://en.wikipedia.org/wiki/.er
+*.er
+
+// es : https://www.nic.es/site_ingles/ingles/dominios/index.html
+es
+com.es
+nom.es
+org.es
+gob.es
+edu.es
+
+// et : https://en.wikipedia.org/wiki/.et
+et
+com.et
+gov.et
+org.et
+edu.et
+biz.et
+name.et
+info.et
+net.et
+
+// eu : https://en.wikipedia.org/wiki/.eu
+eu
+
+// fi : https://en.wikipedia.org/wiki/.fi
+fi
+// aland.fi : https://en.wikipedia.org/wiki/.ax
+// This domain is being phased out in favor of .ax. As there are still many
+// domains under aland.fi, we still keep it on the list until aland.fi is
+// completely removed.
+// TODO: Check for updates (expected to be phased out around Q1/2009)
+aland.fi
+
+// fj : http://domains.fj/
+// Submitted by registry 2020-02-11
+fj
+ac.fj
+biz.fj
+com.fj
+gov.fj
+info.fj
+mil.fj
+name.fj
+net.fj
+org.fj
+pro.fj
+
+// fk : https://en.wikipedia.org/wiki/.fk
+*.fk
+
+// fm : https://en.wikipedia.org/wiki/.fm
+com.fm
+edu.fm
+net.fm
+org.fm
+fm
+
+// fo : https://en.wikipedia.org/wiki/.fo
+fo
+
+// fr : http://www.afnic.fr/
+// domaines descriptifs : https://www.afnic.fr/medias/documents/Cadre_legal/Afnic_Naming_Policy_12122016_VEN.pdf
+fr
+asso.fr
+com.fr
+gouv.fr
+nom.fr
+prd.fr
+tm.fr
+// domaines sectoriels : https://www.afnic.fr/en/products-and-services/the-fr-tld/sector-based-fr-domains-4.html
+aeroport.fr
+avocat.fr
+avoues.fr
+cci.fr
+chambagri.fr
+chirurgiens-dentistes.fr
+experts-comptables.fr
+geometre-expert.fr
+greta.fr
+huissier-justice.fr
+medecin.fr
+notaires.fr
+pharmacien.fr
+port.fr
+veterinaire.fr
+
+// ga : https://en.wikipedia.org/wiki/.ga
+ga
+
+// gb : This registry is effectively dormant
+// Submitted by registry
+gb
+
+// gd : https://en.wikipedia.org/wiki/.gd
+edu.gd
+gov.gd
+gd
+
+// ge : http://www.nic.net.ge/policy_en.pdf
+ge
+com.ge
+edu.ge
+gov.ge
+org.ge
+mil.ge
+net.ge
+pvt.ge
+
+// gf : https://en.wikipedia.org/wiki/.gf
+gf
+
+// gg : http://www.channelisles.net/register-domains/
+// Confirmed by registry 2013-11-28
+gg
+co.gg
+net.gg
+org.gg
+
+// gh : https://en.wikipedia.org/wiki/.gh
+// see also: http://www.nic.gh/reg_now.php
+// Although domains directly at second level are not possible at the moment,
+// they have been possible for some time and may come back.
+gh
+com.gh
+edu.gh
+gov.gh
+org.gh
+mil.gh
+
+// gi : http://www.nic.gi/rules.html
+gi
+com.gi
+ltd.gi
+gov.gi
+mod.gi
+edu.gi
+org.gi
+
+// gl : https://en.wikipedia.org/wiki/.gl
+// http://nic.gl
+gl
+co.gl
+com.gl
+edu.gl
+net.gl
+org.gl
+
+// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm
+gm
+
+// gn : http://psg.com/dns/gn/gn.txt
+// Submitted by registry
+gn
+ac.gn
+com.gn
+edu.gn
+gov.gn
+org.gn
+net.gn
+
+// gov : https://en.wikipedia.org/wiki/.gov
+gov
+
+// gp : http://www.nic.gp/index.php?lang=en
+gp
+com.gp
+net.gp
+mobi.gp
+edu.gp
+org.gp
+asso.gp
+
+// gq : https://en.wikipedia.org/wiki/.gq
+gq
+
+// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html
+// Submitted by registry
+gr
+com.gr
+edu.gr
+net.gr
+org.gr
+gov.gr
+
+// gs : https://en.wikipedia.org/wiki/.gs
+gs
+
+// gt : https://www.gt/sitio/registration_policy.php?lang=en
+gt
+com.gt
+edu.gt
+gob.gt
+ind.gt
+mil.gt
+net.gt
+org.gt
+
+// gu : http://gadao.gov.gu/register.html
+// University of Guam : https://www.uog.edu
+// Submitted by uognoc@triton.uog.edu
+gu
+com.gu
+edu.gu
+gov.gu
+guam.gu
+info.gu
+net.gu
+org.gu
+web.gu
+
+// gw : https://en.wikipedia.org/wiki/.gw
+// gw : https://nic.gw/regras/
+gw
+
+// gy : https://en.wikipedia.org/wiki/.gy
+// http://registry.gy/
+gy
+co.gy
+com.gy
+edu.gy
+gov.gy
+net.gy
+org.gy
+
+// hk : https://www.hkirc.hk
+// Submitted by registry
+hk
+com.hk
+edu.hk
+gov.hk
+idv.hk
+net.hk
+org.hk
+公司.hk
+教育.hk
+敎育.hk
+政府.hk
+個人.hk
+个人.hk
+箇人.hk
+網络.hk
+网络.hk
+组織.hk
+網絡.hk
+网絡.hk
+组织.hk
+組織.hk
+組织.hk
+
+// hm : https://en.wikipedia.org/wiki/.hm
+hm
+
+// hn : http://www.nic.hn/politicas/ps02,,05.html
+hn
+com.hn
+edu.hn
+org.hn
+net.hn
+mil.hn
+gob.hn
+
+// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf
+hr
+iz.hr
+from.hr
+name.hr
+com.hr
+
+// ht : http://www.nic.ht/info/charte.cfm
+ht
+com.ht
+shop.ht
+firm.ht
+info.ht
+adult.ht
+net.ht
+pro.ht
+org.ht
+med.ht
+art.ht
+coop.ht
+pol.ht
+asso.ht
+edu.ht
+rel.ht
+gouv.ht
+perso.ht
+
+// hu : http://www.domain.hu/domain/English/sld.html
+// Confirmed by registry 2008-06-12
+hu
+co.hu
+info.hu
+org.hu
+priv.hu
+sport.hu
+tm.hu
+2000.hu
+agrar.hu
+bolt.hu
+casino.hu
+city.hu
+erotica.hu
+erotika.hu
+film.hu
+forum.hu
+games.hu
+hotel.hu
+ingatlan.hu
+jogasz.hu
+konyvelo.hu
+lakas.hu
+media.hu
+news.hu
+reklam.hu
+sex.hu
+shop.hu
+suli.hu
+szex.hu
+tozsde.hu
+utazas.hu
+video.hu
+
+// id : https://pandi.id/en/domain/registration-requirements/
+id
+ac.id
+biz.id
+co.id
+desa.id
+go.id
+mil.id
+my.id
+net.id
+or.id
+ponpes.id
+sch.id
+web.id
+
+// ie : https://en.wikipedia.org/wiki/.ie
+ie
+gov.ie
+
+// il : http://www.isoc.org.il/domains/
+il
+ac.il
+co.il
+gov.il
+idf.il
+k12.il
+muni.il
+net.il
+org.il
+
+// im : https://www.nic.im/
+// Submitted by registry
+im
+ac.im
+co.im
+com.im
+ltd.co.im
+net.im
+org.im
+plc.co.im
+tt.im
+tv.im
+
+// in : https://en.wikipedia.org/wiki/.in
+// see also: https://registry.in/Policies
+// Please note, that nic.in is not an official eTLD, but used by most
+// government institutions.
+in
+co.in
+firm.in
+net.in
+org.in
+gen.in
+ind.in
+nic.in
+ac.in
+edu.in
+res.in
+gov.in
+mil.in
+
+// info : https://en.wikipedia.org/wiki/.info
+info
+
+// int : https://en.wikipedia.org/wiki/.int
+// Confirmed by registry 2008-06-18
+int
+eu.int
+
+// io : http://www.nic.io/rules.htm
+// list of other 2nd level tlds ?
+io
+com.io
+
+// iq : http://www.cmc.iq/english/iq/iqregister1.htm
+iq
+gov.iq
+edu.iq
+mil.iq
+com.iq
+org.iq
+net.iq
+
+// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules
+// Also see http://www.nic.ir/Internationalized_Domain_Names
+// Two .ir entries added at request of , 2010-04-16
+ir
+ac.ir
+co.ir
+gov.ir
+id.ir
+net.ir
+org.ir
+sch.ir
+// xn--mgba3a4f16a.ir (.ir, Persian YEH)
+ایران.ir
+// xn--mgba3a4fra.ir (.ir, Arabic YEH)
+ايران.ir
+
+// is : http://www.isnic.is/domain/rules.php
+// Confirmed by registry 2008-12-06
+is
+net.is
+com.is
+edu.is
+gov.is
+org.is
+int.is
+
+// it : https://en.wikipedia.org/wiki/.it
+it
+gov.it
+edu.it
+// Reserved geo-names (regions and provinces):
+// https://www.nic.it/sites/default/files/archivio/docs/Regulation_assignation_v7.1.pdf
+// Regions
+abr.it
+abruzzo.it
+aosta-valley.it
+aostavalley.it
+bas.it
+basilicata.it
+cal.it
+calabria.it
+cam.it
+campania.it
+emilia-romagna.it
+emiliaromagna.it
+emr.it
+friuli-v-giulia.it
+friuli-ve-giulia.it
+friuli-vegiulia.it
+friuli-venezia-giulia.it
+friuli-veneziagiulia.it
+friuli-vgiulia.it
+friuliv-giulia.it
+friulive-giulia.it
+friulivegiulia.it
+friulivenezia-giulia.it
+friuliveneziagiulia.it
+friulivgiulia.it
+fvg.it
+laz.it
+lazio.it
+lig.it
+liguria.it
+lom.it
+lombardia.it
+lombardy.it
+lucania.it
+mar.it
+marche.it
+mol.it
+molise.it
+piedmont.it
+piemonte.it
+pmn.it
+pug.it
+puglia.it
+sar.it
+sardegna.it
+sardinia.it
+sic.it
+sicilia.it
+sicily.it
+taa.it
+tos.it
+toscana.it
+trentin-sud-tirol.it
+trentin-süd-tirol.it
+trentin-sudtirol.it
+trentin-südtirol.it
+trentin-sued-tirol.it
+trentin-suedtirol.it
+trentino-a-adige.it
+trentino-aadige.it
+trentino-alto-adige.it
+trentino-altoadige.it
+trentino-s-tirol.it
+trentino-stirol.it
+trentino-sud-tirol.it
+trentino-süd-tirol.it
+trentino-sudtirol.it
+trentino-südtirol.it
+trentino-sued-tirol.it
+trentino-suedtirol.it
+trentino.it
+trentinoa-adige.it
+trentinoaadige.it
+trentinoalto-adige.it
+trentinoaltoadige.it
+trentinos-tirol.it
+trentinostirol.it
+trentinosud-tirol.it
+trentinosüd-tirol.it
+trentinosudtirol.it
+trentinosüdtirol.it
+trentinosued-tirol.it
+trentinosuedtirol.it
+trentinsud-tirol.it
+trentinsüd-tirol.it
+trentinsudtirol.it
+trentinsüdtirol.it
+trentinsued-tirol.it
+trentinsuedtirol.it
+tuscany.it
+umb.it
+umbria.it
+val-d-aosta.it
+val-daosta.it
+vald-aosta.it
+valdaosta.it
+valle-aosta.it
+valle-d-aosta.it
+valle-daosta.it
+valleaosta.it
+valled-aosta.it
+valledaosta.it
+vallee-aoste.it
+vallée-aoste.it
+vallee-d-aoste.it
+vallée-d-aoste.it
+valleeaoste.it
+valléeaoste.it
+valleedaoste.it
+valléedaoste.it
+vao.it
+vda.it
+ven.it
+veneto.it
+// Provinces
+ag.it
+agrigento.it
+al.it
+alessandria.it
+alto-adige.it
+altoadige.it
+an.it
+ancona.it
+andria-barletta-trani.it
+andria-trani-barletta.it
+andriabarlettatrani.it
+andriatranibarletta.it
+ao.it
+aosta.it
+aoste.it
+ap.it
+aq.it
+aquila.it
+ar.it
+arezzo.it
+ascoli-piceno.it
+ascolipiceno.it
+asti.it
+at.it
+av.it
+avellino.it
+ba.it
+balsan-sudtirol.it
+balsan-südtirol.it
+balsan-suedtirol.it
+balsan.it
+bari.it
+barletta-trani-andria.it
+barlettatraniandria.it
+belluno.it
+benevento.it
+bergamo.it
+bg.it
+bi.it
+biella.it
+bl.it
+bn.it
+bo.it
+bologna.it
+bolzano-altoadige.it
+bolzano.it
+bozen-sudtirol.it
+bozen-südtirol.it
+bozen-suedtirol.it
+bozen.it
+br.it
+brescia.it
+brindisi.it
+bs.it
+bt.it
+bulsan-sudtirol.it
+bulsan-südtirol.it
+bulsan-suedtirol.it
+bulsan.it
+bz.it
+ca.it
+cagliari.it
+caltanissetta.it
+campidano-medio.it
+campidanomedio.it
+campobasso.it
+carbonia-iglesias.it
+carboniaiglesias.it
+carrara-massa.it
+carraramassa.it
+caserta.it
+catania.it
+catanzaro.it
+cb.it
+ce.it
+cesena-forli.it
+cesena-forlì.it
+cesenaforli.it
+cesenaforlì.it
+ch.it
+chieti.it
+ci.it
+cl.it
+cn.it
+co.it
+como.it
+cosenza.it
+cr.it
+cremona.it
+crotone.it
+cs.it
+ct.it
+cuneo.it
+cz.it
+dell-ogliastra.it
+dellogliastra.it
+en.it
+enna.it
+fc.it
+fe.it
+fermo.it
+ferrara.it
+fg.it
+fi.it
+firenze.it
+florence.it
+fm.it
+foggia.it
+forli-cesena.it
+forlì-cesena.it
+forlicesena.it
+forlìcesena.it
+fr.it
+frosinone.it
+ge.it
+genoa.it
+genova.it
+go.it
+gorizia.it
+gr.it
+grosseto.it
+iglesias-carbonia.it
+iglesiascarbonia.it
+im.it
+imperia.it
+is.it
+isernia.it
+kr.it
+la-spezia.it
+laquila.it
+laspezia.it
+latina.it
+lc.it
+le.it
+lecce.it
+lecco.it
+li.it
+livorno.it
+lo.it
+lodi.it
+lt.it
+lu.it
+lucca.it
+macerata.it
+mantova.it
+massa-carrara.it
+massacarrara.it
+matera.it
+mb.it
+mc.it
+me.it
+medio-campidano.it
+mediocampidano.it
+messina.it
+mi.it
+milan.it
+milano.it
+mn.it
+mo.it
+modena.it
+monza-brianza.it
+monza-e-della-brianza.it
+monza.it
+monzabrianza.it
+monzaebrianza.it
+monzaedellabrianza.it
+ms.it
+mt.it
+na.it
+naples.it
+napoli.it
+no.it
+novara.it
+nu.it
+nuoro.it
+og.it
+ogliastra.it
+olbia-tempio.it
+olbiatempio.it
+or.it
+oristano.it
+ot.it
+pa.it
+padova.it
+padua.it
+palermo.it
+parma.it
+pavia.it
+pc.it
+pd.it
+pe.it
+perugia.it
+pesaro-urbino.it
+pesarourbino.it
+pescara.it
+pg.it
+pi.it
+piacenza.it
+pisa.it
+pistoia.it
+pn.it
+po.it
+pordenone.it
+potenza.it
+pr.it
+prato.it
+pt.it
+pu.it
+pv.it
+pz.it
+ra.it
+ragusa.it
+ravenna.it
+rc.it
+re.it
+reggio-calabria.it
+reggio-emilia.it
+reggiocalabria.it
+reggioemilia.it
+rg.it
+ri.it
+rieti.it
+rimini.it
+rm.it
+rn.it
+ro.it
+roma.it
+rome.it
+rovigo.it
+sa.it
+salerno.it
+sassari.it
+savona.it
+si.it
+siena.it
+siracusa.it
+so.it
+sondrio.it
+sp.it
+sr.it
+ss.it
+suedtirol.it
+südtirol.it
+sv.it
+ta.it
+taranto.it
+te.it
+tempio-olbia.it
+tempioolbia.it
+teramo.it
+terni.it
+tn.it
+to.it
+torino.it
+tp.it
+tr.it
+trani-andria-barletta.it
+trani-barletta-andria.it
+traniandriabarletta.it
+tranibarlettaandria.it
+trapani.it
+trento.it
+treviso.it
+trieste.it
+ts.it
+turin.it
+tv.it
+ud.it
+udine.it
+urbino-pesaro.it
+urbinopesaro.it
+va.it
+varese.it
+vb.it
+vc.it
+ve.it
+venezia.it
+venice.it
+verbania.it
+vercelli.it
+verona.it
+vi.it
+vibo-valentia.it
+vibovalentia.it
+vicenza.it
+viterbo.it
+vr.it
+vs.it
+vt.it
+vv.it
+
+// je : http://www.channelisles.net/register-domains/
+// Confirmed by registry 2013-11-28
+je
+co.je
+net.je
+org.je
+
+// jm : http://www.com.jm/register.html
+*.jm
+
+// jo : http://www.dns.jo/Registration_policy.aspx
+jo
+com.jo
+org.jo
+net.jo
+edu.jo
+sch.jo
+gov.jo
+mil.jo
+name.jo
+
+// jobs : https://en.wikipedia.org/wiki/.jobs
+jobs
+
+// jp : https://en.wikipedia.org/wiki/.jp
+// http://jprs.co.jp/en/jpdomain.html
+// Submitted by registry
+jp
+// jp organizational type names
+ac.jp
+ad.jp
+co.jp
+ed.jp
+go.jp
+gr.jp
+lg.jp
+ne.jp
+or.jp
+// jp prefecture type names
+aichi.jp
+akita.jp
+aomori.jp
+chiba.jp
+ehime.jp
+fukui.jp
+fukuoka.jp
+fukushima.jp
+gifu.jp
+gunma.jp
+hiroshima.jp
+hokkaido.jp
+hyogo.jp
+ibaraki.jp
+ishikawa.jp
+iwate.jp
+kagawa.jp
+kagoshima.jp
+kanagawa.jp
+kochi.jp
+kumamoto.jp
+kyoto.jp
+mie.jp
+miyagi.jp
+miyazaki.jp
+nagano.jp
+nagasaki.jp
+nara.jp
+niigata.jp
+oita.jp
+okayama.jp
+okinawa.jp
+osaka.jp
+saga.jp
+saitama.jp
+shiga.jp
+shimane.jp
+shizuoka.jp
+tochigi.jp
+tokushima.jp
+tokyo.jp
+tottori.jp
+toyama.jp
+wakayama.jp
+yamagata.jp
+yamaguchi.jp
+yamanashi.jp
+栃木.jp
+愛知.jp
+愛媛.jp
+兵庫.jp
+熊本.jp
+茨城.jp
+北海道.jp
+千葉.jp
+和歌山.jp
+長崎.jp
+長野.jp
+新潟.jp
+青森.jp
+静岡.jp
+東京.jp
+石川.jp
+埼玉.jp
+三重.jp
+京都.jp
+佐賀.jp
+大分.jp
+大阪.jp
+奈良.jp
+宮城.jp
+宮崎.jp
+富山.jp
+山口.jp
+山形.jp
+山梨.jp
+岩手.jp
+岐阜.jp
+岡山.jp
+島根.jp
+広島.jp
+徳島.jp
+沖縄.jp
+滋賀.jp
+神奈川.jp
+福井.jp
+福岡.jp
+福島.jp
+秋田.jp
+群馬.jp
+香川.jp
+高知.jp
+鳥取.jp
+鹿児島.jp
+// jp geographic type names
+// http://jprs.jp/doc/rule/saisoku-1.html
+*.kawasaki.jp
+*.kitakyushu.jp
+*.kobe.jp
+*.nagoya.jp
+*.sapporo.jp
+*.sendai.jp
+*.yokohama.jp
+!city.kawasaki.jp
+!city.kitakyushu.jp
+!city.kobe.jp
+!city.nagoya.jp
+!city.sapporo.jp
+!city.sendai.jp
+!city.yokohama.jp
+// 4th level registration
+aisai.aichi.jp
+ama.aichi.jp
+anjo.aichi.jp
+asuke.aichi.jp
+chiryu.aichi.jp
+chita.aichi.jp
+fuso.aichi.jp
+gamagori.aichi.jp
+handa.aichi.jp
+hazu.aichi.jp
+hekinan.aichi.jp
+higashiura.aichi.jp
+ichinomiya.aichi.jp
+inazawa.aichi.jp
+inuyama.aichi.jp
+isshiki.aichi.jp
+iwakura.aichi.jp
+kanie.aichi.jp
+kariya.aichi.jp
+kasugai.aichi.jp
+kira.aichi.jp
+kiyosu.aichi.jp
+komaki.aichi.jp
+konan.aichi.jp
+kota.aichi.jp
+mihama.aichi.jp
+miyoshi.aichi.jp
+nishio.aichi.jp
+nisshin.aichi.jp
+obu.aichi.jp
+oguchi.aichi.jp
+oharu.aichi.jp
+okazaki.aichi.jp
+owariasahi.aichi.jp
+seto.aichi.jp
+shikatsu.aichi.jp
+shinshiro.aichi.jp
+shitara.aichi.jp
+tahara.aichi.jp
+takahama.aichi.jp
+tobishima.aichi.jp
+toei.aichi.jp
+togo.aichi.jp
+tokai.aichi.jp
+tokoname.aichi.jp
+toyoake.aichi.jp
+toyohashi.aichi.jp
+toyokawa.aichi.jp
+toyone.aichi.jp
+toyota.aichi.jp
+tsushima.aichi.jp
+yatomi.aichi.jp
+akita.akita.jp
+daisen.akita.jp
+fujisato.akita.jp
+gojome.akita.jp
+hachirogata.akita.jp
+happou.akita.jp
+higashinaruse.akita.jp
+honjo.akita.jp
+honjyo.akita.jp
+ikawa.akita.jp
+kamikoani.akita.jp
+kamioka.akita.jp
+katagami.akita.jp
+kazuno.akita.jp
+kitaakita.akita.jp
+kosaka.akita.jp
+kyowa.akita.jp
+misato.akita.jp
+mitane.akita.jp
+moriyoshi.akita.jp
+nikaho.akita.jp
+noshiro.akita.jp
+odate.akita.jp
+oga.akita.jp
+ogata.akita.jp
+semboku.akita.jp
+yokote.akita.jp
+yurihonjo.akita.jp
+aomori.aomori.jp
+gonohe.aomori.jp
+hachinohe.aomori.jp
+hashikami.aomori.jp
+hiranai.aomori.jp
+hirosaki.aomori.jp
+itayanagi.aomori.jp
+kuroishi.aomori.jp
+misawa.aomori.jp
+mutsu.aomori.jp
+nakadomari.aomori.jp
+noheji.aomori.jp
+oirase.aomori.jp
+owani.aomori.jp
+rokunohe.aomori.jp
+sannohe.aomori.jp
+shichinohe.aomori.jp
+shingo.aomori.jp
+takko.aomori.jp
+towada.aomori.jp
+tsugaru.aomori.jp
+tsuruta.aomori.jp
+abiko.chiba.jp
+asahi.chiba.jp
+chonan.chiba.jp
+chosei.chiba.jp
+choshi.chiba.jp
+chuo.chiba.jp
+funabashi.chiba.jp
+futtsu.chiba.jp
+hanamigawa.chiba.jp
+ichihara.chiba.jp
+ichikawa.chiba.jp
+ichinomiya.chiba.jp
+inzai.chiba.jp
+isumi.chiba.jp
+kamagaya.chiba.jp
+kamogawa.chiba.jp
+kashiwa.chiba.jp
+katori.chiba.jp
+katsuura.chiba.jp
+kimitsu.chiba.jp
+kisarazu.chiba.jp
+kozaki.chiba.jp
+kujukuri.chiba.jp
+kyonan.chiba.jp
+matsudo.chiba.jp
+midori.chiba.jp
+mihama.chiba.jp
+minamiboso.chiba.jp
+mobara.chiba.jp
+mutsuzawa.chiba.jp
+nagara.chiba.jp
+nagareyama.chiba.jp
+narashino.chiba.jp
+narita.chiba.jp
+noda.chiba.jp
+oamishirasato.chiba.jp
+omigawa.chiba.jp
+onjuku.chiba.jp
+otaki.chiba.jp
+sakae.chiba.jp
+sakura.chiba.jp
+shimofusa.chiba.jp
+shirako.chiba.jp
+shiroi.chiba.jp
+shisui.chiba.jp
+sodegaura.chiba.jp
+sosa.chiba.jp
+tako.chiba.jp
+tateyama.chiba.jp
+togane.chiba.jp
+tohnosho.chiba.jp
+tomisato.chiba.jp
+urayasu.chiba.jp
+yachimata.chiba.jp
+yachiyo.chiba.jp
+yokaichiba.chiba.jp
+yokoshibahikari.chiba.jp
+yotsukaido.chiba.jp
+ainan.ehime.jp
+honai.ehime.jp
+ikata.ehime.jp
+imabari.ehime.jp
+iyo.ehime.jp
+kamijima.ehime.jp
+kihoku.ehime.jp
+kumakogen.ehime.jp
+masaki.ehime.jp
+matsuno.ehime.jp
+matsuyama.ehime.jp
+namikata.ehime.jp
+niihama.ehime.jp
+ozu.ehime.jp
+saijo.ehime.jp
+seiyo.ehime.jp
+shikokuchuo.ehime.jp
+tobe.ehime.jp
+toon.ehime.jp
+uchiko.ehime.jp
+uwajima.ehime.jp
+yawatahama.ehime.jp
+echizen.fukui.jp
+eiheiji.fukui.jp
+fukui.fukui.jp
+ikeda.fukui.jp
+katsuyama.fukui.jp
+mihama.fukui.jp
+minamiechizen.fukui.jp
+obama.fukui.jp
+ohi.fukui.jp
+ono.fukui.jp
+sabae.fukui.jp
+sakai.fukui.jp
+takahama.fukui.jp
+tsuruga.fukui.jp
+wakasa.fukui.jp
+ashiya.fukuoka.jp
+buzen.fukuoka.jp
+chikugo.fukuoka.jp
+chikuho.fukuoka.jp
+chikujo.fukuoka.jp
+chikushino.fukuoka.jp
+chikuzen.fukuoka.jp
+chuo.fukuoka.jp
+dazaifu.fukuoka.jp
+fukuchi.fukuoka.jp
+hakata.fukuoka.jp
+higashi.fukuoka.jp
+hirokawa.fukuoka.jp
+hisayama.fukuoka.jp
+iizuka.fukuoka.jp
+inatsuki.fukuoka.jp
+kaho.fukuoka.jp
+kasuga.fukuoka.jp
+kasuya.fukuoka.jp
+kawara.fukuoka.jp
+keisen.fukuoka.jp
+koga.fukuoka.jp
+kurate.fukuoka.jp
+kurogi.fukuoka.jp
+kurume.fukuoka.jp
+minami.fukuoka.jp
+miyako.fukuoka.jp
+miyama.fukuoka.jp
+miyawaka.fukuoka.jp
+mizumaki.fukuoka.jp
+munakata.fukuoka.jp
+nakagawa.fukuoka.jp
+nakama.fukuoka.jp
+nishi.fukuoka.jp
+nogata.fukuoka.jp
+ogori.fukuoka.jp
+okagaki.fukuoka.jp
+okawa.fukuoka.jp
+oki.fukuoka.jp
+omuta.fukuoka.jp
+onga.fukuoka.jp
+onojo.fukuoka.jp
+oto.fukuoka.jp
+saigawa.fukuoka.jp
+sasaguri.fukuoka.jp
+shingu.fukuoka.jp
+shinyoshitomi.fukuoka.jp
+shonai.fukuoka.jp
+soeda.fukuoka.jp
+sue.fukuoka.jp
+tachiarai.fukuoka.jp
+tagawa.fukuoka.jp
+takata.fukuoka.jp
+toho.fukuoka.jp
+toyotsu.fukuoka.jp
+tsuiki.fukuoka.jp
+ukiha.fukuoka.jp
+umi.fukuoka.jp
+usui.fukuoka.jp
+yamada.fukuoka.jp
+yame.fukuoka.jp
+yanagawa.fukuoka.jp
+yukuhashi.fukuoka.jp
+aizubange.fukushima.jp
+aizumisato.fukushima.jp
+aizuwakamatsu.fukushima.jp
+asakawa.fukushima.jp
+bandai.fukushima.jp
+date.fukushima.jp
+fukushima.fukushima.jp
+furudono.fukushima.jp
+futaba.fukushima.jp
+hanawa.fukushima.jp
+higashi.fukushima.jp
+hirata.fukushima.jp
+hirono.fukushima.jp
+iitate.fukushima.jp
+inawashiro.fukushima.jp
+ishikawa.fukushima.jp
+iwaki.fukushima.jp
+izumizaki.fukushima.jp
+kagamiishi.fukushima.jp
+kaneyama.fukushima.jp
+kawamata.fukushima.jp
+kitakata.fukushima.jp
+kitashiobara.fukushima.jp
+koori.fukushima.jp
+koriyama.fukushima.jp
+kunimi.fukushima.jp
+miharu.fukushima.jp
+mishima.fukushima.jp
+namie.fukushima.jp
+nango.fukushima.jp
+nishiaizu.fukushima.jp
+nishigo.fukushima.jp
+okuma.fukushima.jp
+omotego.fukushima.jp
+ono.fukushima.jp
+otama.fukushima.jp
+samegawa.fukushima.jp
+shimogo.fukushima.jp
+shirakawa.fukushima.jp
+showa.fukushima.jp
+soma.fukushima.jp
+sukagawa.fukushima.jp
+taishin.fukushima.jp
+tamakawa.fukushima.jp
+tanagura.fukushima.jp
+tenei.fukushima.jp
+yabuki.fukushima.jp
+yamato.fukushima.jp
+yamatsuri.fukushima.jp
+yanaizu.fukushima.jp
+yugawa.fukushima.jp
+anpachi.gifu.jp
+ena.gifu.jp
+gifu.gifu.jp
+ginan.gifu.jp
+godo.gifu.jp
+gujo.gifu.jp
+hashima.gifu.jp
+hichiso.gifu.jp
+hida.gifu.jp
+higashishirakawa.gifu.jp
+ibigawa.gifu.jp
+ikeda.gifu.jp
+kakamigahara.gifu.jp
+kani.gifu.jp
+kasahara.gifu.jp
+kasamatsu.gifu.jp
+kawaue.gifu.jp
+kitagata.gifu.jp
+mino.gifu.jp
+minokamo.gifu.jp
+mitake.gifu.jp
+mizunami.gifu.jp
+motosu.gifu.jp
+nakatsugawa.gifu.jp
+ogaki.gifu.jp
+sakahogi.gifu.jp
+seki.gifu.jp
+sekigahara.gifu.jp
+shirakawa.gifu.jp
+tajimi.gifu.jp
+takayama.gifu.jp
+tarui.gifu.jp
+toki.gifu.jp
+tomika.gifu.jp
+wanouchi.gifu.jp
+yamagata.gifu.jp
+yaotsu.gifu.jp
+yoro.gifu.jp
+annaka.gunma.jp
+chiyoda.gunma.jp
+fujioka.gunma.jp
+higashiagatsuma.gunma.jp
+isesaki.gunma.jp
+itakura.gunma.jp
+kanna.gunma.jp
+kanra.gunma.jp
+katashina.gunma.jp
+kawaba.gunma.jp
+kiryu.gunma.jp
+kusatsu.gunma.jp
+maebashi.gunma.jp
+meiwa.gunma.jp
+midori.gunma.jp
+minakami.gunma.jp
+naganohara.gunma.jp
+nakanojo.gunma.jp
+nanmoku.gunma.jp
+numata.gunma.jp
+oizumi.gunma.jp
+ora.gunma.jp
+ota.gunma.jp
+shibukawa.gunma.jp
+shimonita.gunma.jp
+shinto.gunma.jp
+showa.gunma.jp
+takasaki.gunma.jp
+takayama.gunma.jp
+tamamura.gunma.jp
+tatebayashi.gunma.jp
+tomioka.gunma.jp
+tsukiyono.gunma.jp
+tsumagoi.gunma.jp
+ueno.gunma.jp
+yoshioka.gunma.jp
+asaminami.hiroshima.jp
+daiwa.hiroshima.jp
+etajima.hiroshima.jp
+fuchu.hiroshima.jp
+fukuyama.hiroshima.jp
+hatsukaichi.hiroshima.jp
+higashihiroshima.hiroshima.jp
+hongo.hiroshima.jp
+jinsekikogen.hiroshima.jp
+kaita.hiroshima.jp
+kui.hiroshima.jp
+kumano.hiroshima.jp
+kure.hiroshima.jp
+mihara.hiroshima.jp
+miyoshi.hiroshima.jp
+naka.hiroshima.jp
+onomichi.hiroshima.jp
+osakikamijima.hiroshima.jp
+otake.hiroshima.jp
+saka.hiroshima.jp
+sera.hiroshima.jp
+seranishi.hiroshima.jp
+shinichi.hiroshima.jp
+shobara.hiroshima.jp
+takehara.hiroshima.jp
+abashiri.hokkaido.jp
+abira.hokkaido.jp
+aibetsu.hokkaido.jp
+akabira.hokkaido.jp
+akkeshi.hokkaido.jp
+asahikawa.hokkaido.jp
+ashibetsu.hokkaido.jp
+ashoro.hokkaido.jp
+assabu.hokkaido.jp
+atsuma.hokkaido.jp
+bibai.hokkaido.jp
+biei.hokkaido.jp
+bifuka.hokkaido.jp
+bihoro.hokkaido.jp
+biratori.hokkaido.jp
+chippubetsu.hokkaido.jp
+chitose.hokkaido.jp
+date.hokkaido.jp
+ebetsu.hokkaido.jp
+embetsu.hokkaido.jp
+eniwa.hokkaido.jp
+erimo.hokkaido.jp
+esan.hokkaido.jp
+esashi.hokkaido.jp
+fukagawa.hokkaido.jp
+fukushima.hokkaido.jp
+furano.hokkaido.jp
+furubira.hokkaido.jp
+haboro.hokkaido.jp
+hakodate.hokkaido.jp
+hamatonbetsu.hokkaido.jp
+hidaka.hokkaido.jp
+higashikagura.hokkaido.jp
+higashikawa.hokkaido.jp
+hiroo.hokkaido.jp
+hokuryu.hokkaido.jp
+hokuto.hokkaido.jp
+honbetsu.hokkaido.jp
+horokanai.hokkaido.jp
+horonobe.hokkaido.jp
+ikeda.hokkaido.jp
+imakane.hokkaido.jp
+ishikari.hokkaido.jp
+iwamizawa.hokkaido.jp
+iwanai.hokkaido.jp
+kamifurano.hokkaido.jp
+kamikawa.hokkaido.jp
+kamishihoro.hokkaido.jp
+kamisunagawa.hokkaido.jp
+kamoenai.hokkaido.jp
+kayabe.hokkaido.jp
+kembuchi.hokkaido.jp
+kikonai.hokkaido.jp
+kimobetsu.hokkaido.jp
+kitahiroshima.hokkaido.jp
+kitami.hokkaido.jp
+kiyosato.hokkaido.jp
+koshimizu.hokkaido.jp
+kunneppu.hokkaido.jp
+kuriyama.hokkaido.jp
+kuromatsunai.hokkaido.jp
+kushiro.hokkaido.jp
+kutchan.hokkaido.jp
+kyowa.hokkaido.jp
+mashike.hokkaido.jp
+matsumae.hokkaido.jp
+mikasa.hokkaido.jp
+minamifurano.hokkaido.jp
+mombetsu.hokkaido.jp
+moseushi.hokkaido.jp
+mukawa.hokkaido.jp
+muroran.hokkaido.jp
+naie.hokkaido.jp
+nakagawa.hokkaido.jp
+nakasatsunai.hokkaido.jp
+nakatombetsu.hokkaido.jp
+nanae.hokkaido.jp
+nanporo.hokkaido.jp
+nayoro.hokkaido.jp
+nemuro.hokkaido.jp
+niikappu.hokkaido.jp
+niki.hokkaido.jp
+nishiokoppe.hokkaido.jp
+noboribetsu.hokkaido.jp
+numata.hokkaido.jp
+obihiro.hokkaido.jp
+obira.hokkaido.jp
+oketo.hokkaido.jp
+okoppe.hokkaido.jp
+otaru.hokkaido.jp
+otobe.hokkaido.jp
+otofuke.hokkaido.jp
+otoineppu.hokkaido.jp
+oumu.hokkaido.jp
+ozora.hokkaido.jp
+pippu.hokkaido.jp
+rankoshi.hokkaido.jp
+rebun.hokkaido.jp
+rikubetsu.hokkaido.jp
+rishiri.hokkaido.jp
+rishirifuji.hokkaido.jp
+saroma.hokkaido.jp
+sarufutsu.hokkaido.jp
+shakotan.hokkaido.jp
+shari.hokkaido.jp
+shibecha.hokkaido.jp
+shibetsu.hokkaido.jp
+shikabe.hokkaido.jp
+shikaoi.hokkaido.jp
+shimamaki.hokkaido.jp
+shimizu.hokkaido.jp
+shimokawa.hokkaido.jp
+shinshinotsu.hokkaido.jp
+shintoku.hokkaido.jp
+shiranuka.hokkaido.jp
+shiraoi.hokkaido.jp
+shiriuchi.hokkaido.jp
+sobetsu.hokkaido.jp
+sunagawa.hokkaido.jp
+taiki.hokkaido.jp
+takasu.hokkaido.jp
+takikawa.hokkaido.jp
+takinoue.hokkaido.jp
+teshikaga.hokkaido.jp
+tobetsu.hokkaido.jp
+tohma.hokkaido.jp
+tomakomai.hokkaido.jp
+tomari.hokkaido.jp
+toya.hokkaido.jp
+toyako.hokkaido.jp
+toyotomi.hokkaido.jp
+toyoura.hokkaido.jp
+tsubetsu.hokkaido.jp
+tsukigata.hokkaido.jp
+urakawa.hokkaido.jp
+urausu.hokkaido.jp
+uryu.hokkaido.jp
+utashinai.hokkaido.jp
+wakkanai.hokkaido.jp
+wassamu.hokkaido.jp
+yakumo.hokkaido.jp
+yoichi.hokkaido.jp
+aioi.hyogo.jp
+akashi.hyogo.jp
+ako.hyogo.jp
+amagasaki.hyogo.jp
+aogaki.hyogo.jp
+asago.hyogo.jp
+ashiya.hyogo.jp
+awaji.hyogo.jp
+fukusaki.hyogo.jp
+goshiki.hyogo.jp
+harima.hyogo.jp
+himeji.hyogo.jp
+ichikawa.hyogo.jp
+inagawa.hyogo.jp
+itami.hyogo.jp
+kakogawa.hyogo.jp
+kamigori.hyogo.jp
+kamikawa.hyogo.jp
+kasai.hyogo.jp
+kasuga.hyogo.jp
+kawanishi.hyogo.jp
+miki.hyogo.jp
+minamiawaji.hyogo.jp
+nishinomiya.hyogo.jp
+nishiwaki.hyogo.jp
+ono.hyogo.jp
+sanda.hyogo.jp
+sannan.hyogo.jp
+sasayama.hyogo.jp
+sayo.hyogo.jp
+shingu.hyogo.jp
+shinonsen.hyogo.jp
+shiso.hyogo.jp
+sumoto.hyogo.jp
+taishi.hyogo.jp
+taka.hyogo.jp
+takarazuka.hyogo.jp
+takasago.hyogo.jp
+takino.hyogo.jp
+tamba.hyogo.jp
+tatsuno.hyogo.jp
+toyooka.hyogo.jp
+yabu.hyogo.jp
+yashiro.hyogo.jp
+yoka.hyogo.jp
+yokawa.hyogo.jp
+ami.ibaraki.jp
+asahi.ibaraki.jp
+bando.ibaraki.jp
+chikusei.ibaraki.jp
+daigo.ibaraki.jp
+fujishiro.ibaraki.jp
+hitachi.ibaraki.jp
+hitachinaka.ibaraki.jp
+hitachiomiya.ibaraki.jp
+hitachiota.ibaraki.jp
+ibaraki.ibaraki.jp
+ina.ibaraki.jp
+inashiki.ibaraki.jp
+itako.ibaraki.jp
+iwama.ibaraki.jp
+joso.ibaraki.jp
+kamisu.ibaraki.jp
+kasama.ibaraki.jp
+kashima.ibaraki.jp
+kasumigaura.ibaraki.jp
+koga.ibaraki.jp
+miho.ibaraki.jp
+mito.ibaraki.jp
+moriya.ibaraki.jp
+naka.ibaraki.jp
+namegata.ibaraki.jp
+oarai.ibaraki.jp
+ogawa.ibaraki.jp
+omitama.ibaraki.jp
+ryugasaki.ibaraki.jp
+sakai.ibaraki.jp
+sakuragawa.ibaraki.jp
+shimodate.ibaraki.jp
+shimotsuma.ibaraki.jp
+shirosato.ibaraki.jp
+sowa.ibaraki.jp
+suifu.ibaraki.jp
+takahagi.ibaraki.jp
+tamatsukuri.ibaraki.jp
+tokai.ibaraki.jp
+tomobe.ibaraki.jp
+tone.ibaraki.jp
+toride.ibaraki.jp
+tsuchiura.ibaraki.jp
+tsukuba.ibaraki.jp
+uchihara.ibaraki.jp
+ushiku.ibaraki.jp
+yachiyo.ibaraki.jp
+yamagata.ibaraki.jp
+yawara.ibaraki.jp
+yuki.ibaraki.jp
+anamizu.ishikawa.jp
+hakui.ishikawa.jp
+hakusan.ishikawa.jp
+kaga.ishikawa.jp
+kahoku.ishikawa.jp
+kanazawa.ishikawa.jp
+kawakita.ishikawa.jp
+komatsu.ishikawa.jp
+nakanoto.ishikawa.jp
+nanao.ishikawa.jp
+nomi.ishikawa.jp
+nonoichi.ishikawa.jp
+noto.ishikawa.jp
+shika.ishikawa.jp
+suzu.ishikawa.jp
+tsubata.ishikawa.jp
+tsurugi.ishikawa.jp
+uchinada.ishikawa.jp
+wajima.ishikawa.jp
+fudai.iwate.jp
+fujisawa.iwate.jp
+hanamaki.iwate.jp
+hiraizumi.iwate.jp
+hirono.iwate.jp
+ichinohe.iwate.jp
+ichinoseki.iwate.jp
+iwaizumi.iwate.jp
+iwate.iwate.jp
+joboji.iwate.jp
+kamaishi.iwate.jp
+kanegasaki.iwate.jp
+karumai.iwate.jp
+kawai.iwate.jp
+kitakami.iwate.jp
+kuji.iwate.jp
+kunohe.iwate.jp
+kuzumaki.iwate.jp
+miyako.iwate.jp
+mizusawa.iwate.jp
+morioka.iwate.jp
+ninohe.iwate.jp
+noda.iwate.jp
+ofunato.iwate.jp
+oshu.iwate.jp
+otsuchi.iwate.jp
+rikuzentakata.iwate.jp
+shiwa.iwate.jp
+shizukuishi.iwate.jp
+sumita.iwate.jp
+tanohata.iwate.jp
+tono.iwate.jp
+yahaba.iwate.jp
+yamada.iwate.jp
+ayagawa.kagawa.jp
+higashikagawa.kagawa.jp
+kanonji.kagawa.jp
+kotohira.kagawa.jp
+manno.kagawa.jp
+marugame.kagawa.jp
+mitoyo.kagawa.jp
+naoshima.kagawa.jp
+sanuki.kagawa.jp
+tadotsu.kagawa.jp
+takamatsu.kagawa.jp
+tonosho.kagawa.jp
+uchinomi.kagawa.jp
+utazu.kagawa.jp
+zentsuji.kagawa.jp
+akune.kagoshima.jp
+amami.kagoshima.jp
+hioki.kagoshima.jp
+isa.kagoshima.jp
+isen.kagoshima.jp
+izumi.kagoshima.jp
+kagoshima.kagoshima.jp
+kanoya.kagoshima.jp
+kawanabe.kagoshima.jp
+kinko.kagoshima.jp
+kouyama.kagoshima.jp
+makurazaki.kagoshima.jp
+matsumoto.kagoshima.jp
+minamitane.kagoshima.jp
+nakatane.kagoshima.jp
+nishinoomote.kagoshima.jp
+satsumasendai.kagoshima.jp
+soo.kagoshima.jp
+tarumizu.kagoshima.jp
+yusui.kagoshima.jp
+aikawa.kanagawa.jp
+atsugi.kanagawa.jp
+ayase.kanagawa.jp
+chigasaki.kanagawa.jp
+ebina.kanagawa.jp
+fujisawa.kanagawa.jp
+hadano.kanagawa.jp
+hakone.kanagawa.jp
+hiratsuka.kanagawa.jp
+isehara.kanagawa.jp
+kaisei.kanagawa.jp
+kamakura.kanagawa.jp
+kiyokawa.kanagawa.jp
+matsuda.kanagawa.jp
+minamiashigara.kanagawa.jp
+miura.kanagawa.jp
+nakai.kanagawa.jp
+ninomiya.kanagawa.jp
+odawara.kanagawa.jp
+oi.kanagawa.jp
+oiso.kanagawa.jp
+sagamihara.kanagawa.jp
+samukawa.kanagawa.jp
+tsukui.kanagawa.jp
+yamakita.kanagawa.jp
+yamato.kanagawa.jp
+yokosuka.kanagawa.jp
+yugawara.kanagawa.jp
+zama.kanagawa.jp
+zushi.kanagawa.jp
+aki.kochi.jp
+geisei.kochi.jp
+hidaka.kochi.jp
+higashitsuno.kochi.jp
+ino.kochi.jp
+kagami.kochi.jp
+kami.kochi.jp
+kitagawa.kochi.jp
+kochi.kochi.jp
+mihara.kochi.jp
+motoyama.kochi.jp
+muroto.kochi.jp
+nahari.kochi.jp
+nakamura.kochi.jp
+nankoku.kochi.jp
+nishitosa.kochi.jp
+niyodogawa.kochi.jp
+ochi.kochi.jp
+okawa.kochi.jp
+otoyo.kochi.jp
+otsuki.kochi.jp
+sakawa.kochi.jp
+sukumo.kochi.jp
+susaki.kochi.jp
+tosa.kochi.jp
+tosashimizu.kochi.jp
+toyo.kochi.jp
+tsuno.kochi.jp
+umaji.kochi.jp
+yasuda.kochi.jp
+yusuhara.kochi.jp
+amakusa.kumamoto.jp
+arao.kumamoto.jp
+aso.kumamoto.jp
+choyo.kumamoto.jp
+gyokuto.kumamoto.jp
+kamiamakusa.kumamoto.jp
+kikuchi.kumamoto.jp
+kumamoto.kumamoto.jp
+mashiki.kumamoto.jp
+mifune.kumamoto.jp
+minamata.kumamoto.jp
+minamioguni.kumamoto.jp
+nagasu.kumamoto.jp
+nishihara.kumamoto.jp
+oguni.kumamoto.jp
+ozu.kumamoto.jp
+sumoto.kumamoto.jp
+takamori.kumamoto.jp
+uki.kumamoto.jp
+uto.kumamoto.jp
+yamaga.kumamoto.jp
+yamato.kumamoto.jp
+yatsushiro.kumamoto.jp
+ayabe.kyoto.jp
+fukuchiyama.kyoto.jp
+higashiyama.kyoto.jp
+ide.kyoto.jp
+ine.kyoto.jp
+joyo.kyoto.jp
+kameoka.kyoto.jp
+kamo.kyoto.jp
+kita.kyoto.jp
+kizu.kyoto.jp
+kumiyama.kyoto.jp
+kyotamba.kyoto.jp
+kyotanabe.kyoto.jp
+kyotango.kyoto.jp
+maizuru.kyoto.jp
+minami.kyoto.jp
+minamiyamashiro.kyoto.jp
+miyazu.kyoto.jp
+muko.kyoto.jp
+nagaokakyo.kyoto.jp
+nakagyo.kyoto.jp
+nantan.kyoto.jp
+oyamazaki.kyoto.jp
+sakyo.kyoto.jp
+seika.kyoto.jp
+tanabe.kyoto.jp
+uji.kyoto.jp
+ujitawara.kyoto.jp
+wazuka.kyoto.jp
+yamashina.kyoto.jp
+yawata.kyoto.jp
+asahi.mie.jp
+inabe.mie.jp
+ise.mie.jp
+kameyama.mie.jp
+kawagoe.mie.jp
+kiho.mie.jp
+kisosaki.mie.jp
+kiwa.mie.jp
+komono.mie.jp
+kumano.mie.jp
+kuwana.mie.jp
+matsusaka.mie.jp
+meiwa.mie.jp
+mihama.mie.jp
+minamiise.mie.jp
+misugi.mie.jp
+miyama.mie.jp
+nabari.mie.jp
+shima.mie.jp
+suzuka.mie.jp
+tado.mie.jp
+taiki.mie.jp
+taki.mie.jp
+tamaki.mie.jp
+toba.mie.jp
+tsu.mie.jp
+udono.mie.jp
+ureshino.mie.jp
+watarai.mie.jp
+yokkaichi.mie.jp
+furukawa.miyagi.jp
+higashimatsushima.miyagi.jp
+ishinomaki.miyagi.jp
+iwanuma.miyagi.jp
+kakuda.miyagi.jp
+kami.miyagi.jp
+kawasaki.miyagi.jp
+marumori.miyagi.jp
+matsushima.miyagi.jp
+minamisanriku.miyagi.jp
+misato.miyagi.jp
+murata.miyagi.jp
+natori.miyagi.jp
+ogawara.miyagi.jp
+ohira.miyagi.jp
+onagawa.miyagi.jp
+osaki.miyagi.jp
+rifu.miyagi.jp
+semine.miyagi.jp
+shibata.miyagi.jp
+shichikashuku.miyagi.jp
+shikama.miyagi.jp
+shiogama.miyagi.jp
+shiroishi.miyagi.jp
+tagajo.miyagi.jp
+taiwa.miyagi.jp
+tome.miyagi.jp
+tomiya.miyagi.jp
+wakuya.miyagi.jp
+watari.miyagi.jp
+yamamoto.miyagi.jp
+zao.miyagi.jp
+aya.miyazaki.jp
+ebino.miyazaki.jp
+gokase.miyazaki.jp
+hyuga.miyazaki.jp
+kadogawa.miyazaki.jp
+kawaminami.miyazaki.jp
+kijo.miyazaki.jp
+kitagawa.miyazaki.jp
+kitakata.miyazaki.jp
+kitaura.miyazaki.jp
+kobayashi.miyazaki.jp
+kunitomi.miyazaki.jp
+kushima.miyazaki.jp
+mimata.miyazaki.jp
+miyakonojo.miyazaki.jp
+miyazaki.miyazaki.jp
+morotsuka.miyazaki.jp
+nichinan.miyazaki.jp
+nishimera.miyazaki.jp
+nobeoka.miyazaki.jp
+saito.miyazaki.jp
+shiiba.miyazaki.jp
+shintomi.miyazaki.jp
+takaharu.miyazaki.jp
+takanabe.miyazaki.jp
+takazaki.miyazaki.jp
+tsuno.miyazaki.jp
+achi.nagano.jp
+agematsu.nagano.jp
+anan.nagano.jp
+aoki.nagano.jp
+asahi.nagano.jp
+azumino.nagano.jp
+chikuhoku.nagano.jp
+chikuma.nagano.jp
+chino.nagano.jp
+fujimi.nagano.jp
+hakuba.nagano.jp
+hara.nagano.jp
+hiraya.nagano.jp
+iida.nagano.jp
+iijima.nagano.jp
+iiyama.nagano.jp
+iizuna.nagano.jp
+ikeda.nagano.jp
+ikusaka.nagano.jp
+ina.nagano.jp
+karuizawa.nagano.jp
+kawakami.nagano.jp
+kiso.nagano.jp
+kisofukushima.nagano.jp
+kitaaiki.nagano.jp
+komagane.nagano.jp
+komoro.nagano.jp
+matsukawa.nagano.jp
+matsumoto.nagano.jp
+miasa.nagano.jp
+minamiaiki.nagano.jp
+minamimaki.nagano.jp
+minamiminowa.nagano.jp
+minowa.nagano.jp
+miyada.nagano.jp
+miyota.nagano.jp
+mochizuki.nagano.jp
+nagano.nagano.jp
+nagawa.nagano.jp
+nagiso.nagano.jp
+nakagawa.nagano.jp
+nakano.nagano.jp
+nozawaonsen.nagano.jp
+obuse.nagano.jp
+ogawa.nagano.jp
+okaya.nagano.jp
+omachi.nagano.jp
+omi.nagano.jp
+ookuwa.nagano.jp
+ooshika.nagano.jp
+otaki.nagano.jp
+otari.nagano.jp
+sakae.nagano.jp
+sakaki.nagano.jp
+saku.nagano.jp
+sakuho.nagano.jp
+shimosuwa.nagano.jp
+shinanomachi.nagano.jp
+shiojiri.nagano.jp
+suwa.nagano.jp
+suzaka.nagano.jp
+takagi.nagano.jp
+takamori.nagano.jp
+takayama.nagano.jp
+tateshina.nagano.jp
+tatsuno.nagano.jp
+togakushi.nagano.jp
+togura.nagano.jp
+tomi.nagano.jp
+ueda.nagano.jp
+wada.nagano.jp
+yamagata.nagano.jp
+yamanouchi.nagano.jp
+yasaka.nagano.jp
+yasuoka.nagano.jp
+chijiwa.nagasaki.jp
+futsu.nagasaki.jp
+goto.nagasaki.jp
+hasami.nagasaki.jp
+hirado.nagasaki.jp
+iki.nagasaki.jp
+isahaya.nagasaki.jp
+kawatana.nagasaki.jp
+kuchinotsu.nagasaki.jp
+matsuura.nagasaki.jp
+nagasaki.nagasaki.jp
+obama.nagasaki.jp
+omura.nagasaki.jp
+oseto.nagasaki.jp
+saikai.nagasaki.jp
+sasebo.nagasaki.jp
+seihi.nagasaki.jp
+shimabara.nagasaki.jp
+shinkamigoto.nagasaki.jp
+togitsu.nagasaki.jp
+tsushima.nagasaki.jp
+unzen.nagasaki.jp
+ando.nara.jp
+gose.nara.jp
+heguri.nara.jp
+higashiyoshino.nara.jp
+ikaruga.nara.jp
+ikoma.nara.jp
+kamikitayama.nara.jp
+kanmaki.nara.jp
+kashiba.nara.jp
+kashihara.nara.jp
+katsuragi.nara.jp
+kawai.nara.jp
+kawakami.nara.jp
+kawanishi.nara.jp
+koryo.nara.jp
+kurotaki.nara.jp
+mitsue.nara.jp
+miyake.nara.jp
+nara.nara.jp
+nosegawa.nara.jp
+oji.nara.jp
+ouda.nara.jp
+oyodo.nara.jp
+sakurai.nara.jp
+sango.nara.jp
+shimoichi.nara.jp
+shimokitayama.nara.jp
+shinjo.nara.jp
+soni.nara.jp
+takatori.nara.jp
+tawaramoto.nara.jp
+tenkawa.nara.jp
+tenri.nara.jp
+uda.nara.jp
+yamatokoriyama.nara.jp
+yamatotakada.nara.jp
+yamazoe.nara.jp
+yoshino.nara.jp
+aga.niigata.jp
+agano.niigata.jp
+gosen.niigata.jp
+itoigawa.niigata.jp
+izumozaki.niigata.jp
+joetsu.niigata.jp
+kamo.niigata.jp
+kariwa.niigata.jp
+kashiwazaki.niigata.jp
+minamiuonuma.niigata.jp
+mitsuke.niigata.jp
+muika.niigata.jp
+murakami.niigata.jp
+myoko.niigata.jp
+nagaoka.niigata.jp
+niigata.niigata.jp
+ojiya.niigata.jp
+omi.niigata.jp
+sado.niigata.jp
+sanjo.niigata.jp
+seiro.niigata.jp
+seirou.niigata.jp
+sekikawa.niigata.jp
+shibata.niigata.jp
+tagami.niigata.jp
+tainai.niigata.jp
+tochio.niigata.jp
+tokamachi.niigata.jp
+tsubame.niigata.jp
+tsunan.niigata.jp
+uonuma.niigata.jp
+yahiko.niigata.jp
+yoita.niigata.jp
+yuzawa.niigata.jp
+beppu.oita.jp
+bungoono.oita.jp
+bungotakada.oita.jp
+hasama.oita.jp
+hiji.oita.jp
+himeshima.oita.jp
+hita.oita.jp
+kamitsue.oita.jp
+kokonoe.oita.jp
+kuju.oita.jp
+kunisaki.oita.jp
+kusu.oita.jp
+oita.oita.jp
+saiki.oita.jp
+taketa.oita.jp
+tsukumi.oita.jp
+usa.oita.jp
+usuki.oita.jp
+yufu.oita.jp
+akaiwa.okayama.jp
+asakuchi.okayama.jp
+bizen.okayama.jp
+hayashima.okayama.jp
+ibara.okayama.jp
+kagamino.okayama.jp
+kasaoka.okayama.jp
+kibichuo.okayama.jp
+kumenan.okayama.jp
+kurashiki.okayama.jp
+maniwa.okayama.jp
+misaki.okayama.jp
+nagi.okayama.jp
+niimi.okayama.jp
+nishiawakura.okayama.jp
+okayama.okayama.jp
+satosho.okayama.jp
+setouchi.okayama.jp
+shinjo.okayama.jp
+shoo.okayama.jp
+soja.okayama.jp
+takahashi.okayama.jp
+tamano.okayama.jp
+tsuyama.okayama.jp
+wake.okayama.jp
+yakage.okayama.jp
+aguni.okinawa.jp
+ginowan.okinawa.jp
+ginoza.okinawa.jp
+gushikami.okinawa.jp
+haebaru.okinawa.jp
+higashi.okinawa.jp
+hirara.okinawa.jp
+iheya.okinawa.jp
+ishigaki.okinawa.jp
+ishikawa.okinawa.jp
+itoman.okinawa.jp
+izena.okinawa.jp
+kadena.okinawa.jp
+kin.okinawa.jp
+kitadaito.okinawa.jp
+kitanakagusuku.okinawa.jp
+kumejima.okinawa.jp
+kunigami.okinawa.jp
+minamidaito.okinawa.jp
+motobu.okinawa.jp
+nago.okinawa.jp
+naha.okinawa.jp
+nakagusuku.okinawa.jp
+nakijin.okinawa.jp
+nanjo.okinawa.jp
+nishihara.okinawa.jp
+ogimi.okinawa.jp
+okinawa.okinawa.jp
+onna.okinawa.jp
+shimoji.okinawa.jp
+taketomi.okinawa.jp
+tarama.okinawa.jp
+tokashiki.okinawa.jp
+tomigusuku.okinawa.jp
+tonaki.okinawa.jp
+urasoe.okinawa.jp
+uruma.okinawa.jp
+yaese.okinawa.jp
+yomitan.okinawa.jp
+yonabaru.okinawa.jp
+yonaguni.okinawa.jp
+zamami.okinawa.jp
+abeno.osaka.jp
+chihayaakasaka.osaka.jp
+chuo.osaka.jp
+daito.osaka.jp
+fujiidera.osaka.jp
+habikino.osaka.jp
+hannan.osaka.jp
+higashiosaka.osaka.jp
+higashisumiyoshi.osaka.jp
+higashiyodogawa.osaka.jp
+hirakata.osaka.jp
+ibaraki.osaka.jp
+ikeda.osaka.jp
+izumi.osaka.jp
+izumiotsu.osaka.jp
+izumisano.osaka.jp
+kadoma.osaka.jp
+kaizuka.osaka.jp
+kanan.osaka.jp
+kashiwara.osaka.jp
+katano.osaka.jp
+kawachinagano.osaka.jp
+kishiwada.osaka.jp
+kita.osaka.jp
+kumatori.osaka.jp
+matsubara.osaka.jp
+minato.osaka.jp
+minoh.osaka.jp
+misaki.osaka.jp
+moriguchi.osaka.jp
+neyagawa.osaka.jp
+nishi.osaka.jp
+nose.osaka.jp
+osakasayama.osaka.jp
+sakai.osaka.jp
+sayama.osaka.jp
+sennan.osaka.jp
+settsu.osaka.jp
+shijonawate.osaka.jp
+shimamoto.osaka.jp
+suita.osaka.jp
+tadaoka.osaka.jp
+taishi.osaka.jp
+tajiri.osaka.jp
+takaishi.osaka.jp
+takatsuki.osaka.jp
+tondabayashi.osaka.jp
+toyonaka.osaka.jp
+toyono.osaka.jp
+yao.osaka.jp
+ariake.saga.jp
+arita.saga.jp
+fukudomi.saga.jp
+genkai.saga.jp
+hamatama.saga.jp
+hizen.saga.jp
+imari.saga.jp
+kamimine.saga.jp
+kanzaki.saga.jp
+karatsu.saga.jp
+kashima.saga.jp
+kitagata.saga.jp
+kitahata.saga.jp
+kiyama.saga.jp
+kouhoku.saga.jp
+kyuragi.saga.jp
+nishiarita.saga.jp
+ogi.saga.jp
+omachi.saga.jp
+ouchi.saga.jp
+saga.saga.jp
+shiroishi.saga.jp
+taku.saga.jp
+tara.saga.jp
+tosu.saga.jp
+yoshinogari.saga.jp
+arakawa.saitama.jp
+asaka.saitama.jp
+chichibu.saitama.jp
+fujimi.saitama.jp
+fujimino.saitama.jp
+fukaya.saitama.jp
+hanno.saitama.jp
+hanyu.saitama.jp
+hasuda.saitama.jp
+hatogaya.saitama.jp
+hatoyama.saitama.jp
+hidaka.saitama.jp
+higashichichibu.saitama.jp
+higashimatsuyama.saitama.jp
+honjo.saitama.jp
+ina.saitama.jp
+iruma.saitama.jp
+iwatsuki.saitama.jp
+kamiizumi.saitama.jp
+kamikawa.saitama.jp
+kamisato.saitama.jp
+kasukabe.saitama.jp
+kawagoe.saitama.jp
+kawaguchi.saitama.jp
+kawajima.saitama.jp
+kazo.saitama.jp
+kitamoto.saitama.jp
+koshigaya.saitama.jp
+kounosu.saitama.jp
+kuki.saitama.jp
+kumagaya.saitama.jp
+matsubushi.saitama.jp
+minano.saitama.jp
+misato.saitama.jp
+miyashiro.saitama.jp
+miyoshi.saitama.jp
+moroyama.saitama.jp
+nagatoro.saitama.jp
+namegawa.saitama.jp
+niiza.saitama.jp
+ogano.saitama.jp
+ogawa.saitama.jp
+ogose.saitama.jp
+okegawa.saitama.jp
+omiya.saitama.jp
+otaki.saitama.jp
+ranzan.saitama.jp
+ryokami.saitama.jp
+saitama.saitama.jp
+sakado.saitama.jp
+satte.saitama.jp
+sayama.saitama.jp
+shiki.saitama.jp
+shiraoka.saitama.jp
+soka.saitama.jp
+sugito.saitama.jp
+toda.saitama.jp
+tokigawa.saitama.jp
+tokorozawa.saitama.jp
+tsurugashima.saitama.jp
+urawa.saitama.jp
+warabi.saitama.jp
+yashio.saitama.jp
+yokoze.saitama.jp
+yono.saitama.jp
+yorii.saitama.jp
+yoshida.saitama.jp
+yoshikawa.saitama.jp
+yoshimi.saitama.jp
+aisho.shiga.jp
+gamo.shiga.jp
+higashiomi.shiga.jp
+hikone.shiga.jp
+koka.shiga.jp
+konan.shiga.jp
+kosei.shiga.jp
+koto.shiga.jp
+kusatsu.shiga.jp
+maibara.shiga.jp
+moriyama.shiga.jp
+nagahama.shiga.jp
+nishiazai.shiga.jp
+notogawa.shiga.jp
+omihachiman.shiga.jp
+otsu.shiga.jp
+ritto.shiga.jp
+ryuoh.shiga.jp
+takashima.shiga.jp
+takatsuki.shiga.jp
+torahime.shiga.jp
+toyosato.shiga.jp
+yasu.shiga.jp
+akagi.shimane.jp
+ama.shimane.jp
+gotsu.shimane.jp
+hamada.shimane.jp
+higashiizumo.shimane.jp
+hikawa.shimane.jp
+hikimi.shimane.jp
+izumo.shimane.jp
+kakinoki.shimane.jp
+masuda.shimane.jp
+matsue.shimane.jp
+misato.shimane.jp
+nishinoshima.shimane.jp
+ohda.shimane.jp
+okinoshima.shimane.jp
+okuizumo.shimane.jp
+shimane.shimane.jp
+tamayu.shimane.jp
+tsuwano.shimane.jp
+unnan.shimane.jp
+yakumo.shimane.jp
+yasugi.shimane.jp
+yatsuka.shimane.jp
+arai.shizuoka.jp
+atami.shizuoka.jp
+fuji.shizuoka.jp
+fujieda.shizuoka.jp
+fujikawa.shizuoka.jp
+fujinomiya.shizuoka.jp
+fukuroi.shizuoka.jp
+gotemba.shizuoka.jp
+haibara.shizuoka.jp
+hamamatsu.shizuoka.jp
+higashiizu.shizuoka.jp
+ito.shizuoka.jp
+iwata.shizuoka.jp
+izu.shizuoka.jp
+izunokuni.shizuoka.jp
+kakegawa.shizuoka.jp
+kannami.shizuoka.jp
+kawanehon.shizuoka.jp
+kawazu.shizuoka.jp
+kikugawa.shizuoka.jp
+kosai.shizuoka.jp
+makinohara.shizuoka.jp
+matsuzaki.shizuoka.jp
+minamiizu.shizuoka.jp
+mishima.shizuoka.jp
+morimachi.shizuoka.jp
+nishiizu.shizuoka.jp
+numazu.shizuoka.jp
+omaezaki.shizuoka.jp
+shimada.shizuoka.jp
+shimizu.shizuoka.jp
+shimoda.shizuoka.jp
+shizuoka.shizuoka.jp
+susono.shizuoka.jp
+yaizu.shizuoka.jp
+yoshida.shizuoka.jp
+ashikaga.tochigi.jp
+bato.tochigi.jp
+haga.tochigi.jp
+ichikai.tochigi.jp
+iwafune.tochigi.jp
+kaminokawa.tochigi.jp
+kanuma.tochigi.jp
+karasuyama.tochigi.jp
+kuroiso.tochigi.jp
+mashiko.tochigi.jp
+mibu.tochigi.jp
+moka.tochigi.jp
+motegi.tochigi.jp
+nasu.tochigi.jp
+nasushiobara.tochigi.jp
+nikko.tochigi.jp
+nishikata.tochigi.jp
+nogi.tochigi.jp
+ohira.tochigi.jp
+ohtawara.tochigi.jp
+oyama.tochigi.jp
+sakura.tochigi.jp
+sano.tochigi.jp
+shimotsuke.tochigi.jp
+shioya.tochigi.jp
+takanezawa.tochigi.jp
+tochigi.tochigi.jp
+tsuga.tochigi.jp
+ujiie.tochigi.jp
+utsunomiya.tochigi.jp
+yaita.tochigi.jp
+aizumi.tokushima.jp
+anan.tokushima.jp
+ichiba.tokushima.jp
+itano.tokushima.jp
+kainan.tokushima.jp
+komatsushima.tokushima.jp
+matsushige.tokushima.jp
+mima.tokushima.jp
+minami.tokushima.jp
+miyoshi.tokushima.jp
+mugi.tokushima.jp
+nakagawa.tokushima.jp
+naruto.tokushima.jp
+sanagochi.tokushima.jp
+shishikui.tokushima.jp
+tokushima.tokushima.jp
+wajiki.tokushima.jp
+adachi.tokyo.jp
+akiruno.tokyo.jp
+akishima.tokyo.jp
+aogashima.tokyo.jp
+arakawa.tokyo.jp
+bunkyo.tokyo.jp
+chiyoda.tokyo.jp
+chofu.tokyo.jp
+chuo.tokyo.jp
+edogawa.tokyo.jp
+fuchu.tokyo.jp
+fussa.tokyo.jp
+hachijo.tokyo.jp
+hachioji.tokyo.jp
+hamura.tokyo.jp
+higashikurume.tokyo.jp
+higashimurayama.tokyo.jp
+higashiyamato.tokyo.jp
+hino.tokyo.jp
+hinode.tokyo.jp
+hinohara.tokyo.jp
+inagi.tokyo.jp
+itabashi.tokyo.jp
+katsushika.tokyo.jp
+kita.tokyo.jp
+kiyose.tokyo.jp
+kodaira.tokyo.jp
+koganei.tokyo.jp
+kokubunji.tokyo.jp
+komae.tokyo.jp
+koto.tokyo.jp
+kouzushima.tokyo.jp
+kunitachi.tokyo.jp
+machida.tokyo.jp
+meguro.tokyo.jp
+minato.tokyo.jp
+mitaka.tokyo.jp
+mizuho.tokyo.jp
+musashimurayama.tokyo.jp
+musashino.tokyo.jp
+nakano.tokyo.jp
+nerima.tokyo.jp
+ogasawara.tokyo.jp
+okutama.tokyo.jp
+ome.tokyo.jp
+oshima.tokyo.jp
+ota.tokyo.jp
+setagaya.tokyo.jp
+shibuya.tokyo.jp
+shinagawa.tokyo.jp
+shinjuku.tokyo.jp
+suginami.tokyo.jp
+sumida.tokyo.jp
+tachikawa.tokyo.jp
+taito.tokyo.jp
+tama.tokyo.jp
+toshima.tokyo.jp
+chizu.tottori.jp
+hino.tottori.jp
+kawahara.tottori.jp
+koge.tottori.jp
+kotoura.tottori.jp
+misasa.tottori.jp
+nanbu.tottori.jp
+nichinan.tottori.jp
+sakaiminato.tottori.jp
+tottori.tottori.jp
+wakasa.tottori.jp
+yazu.tottori.jp
+yonago.tottori.jp
+asahi.toyama.jp
+fuchu.toyama.jp
+fukumitsu.toyama.jp
+funahashi.toyama.jp
+himi.toyama.jp
+imizu.toyama.jp
+inami.toyama.jp
+johana.toyama.jp
+kamiichi.toyama.jp
+kurobe.toyama.jp
+nakaniikawa.toyama.jp
+namerikawa.toyama.jp
+nanto.toyama.jp
+nyuzen.toyama.jp
+oyabe.toyama.jp
+taira.toyama.jp
+takaoka.toyama.jp
+tateyama.toyama.jp
+toga.toyama.jp
+tonami.toyama.jp
+toyama.toyama.jp
+unazuki.toyama.jp
+uozu.toyama.jp
+yamada.toyama.jp
+arida.wakayama.jp
+aridagawa.wakayama.jp
+gobo.wakayama.jp
+hashimoto.wakayama.jp
+hidaka.wakayama.jp
+hirogawa.wakayama.jp
+inami.wakayama.jp
+iwade.wakayama.jp
+kainan.wakayama.jp
+kamitonda.wakayama.jp
+katsuragi.wakayama.jp
+kimino.wakayama.jp
+kinokawa.wakayama.jp
+kitayama.wakayama.jp
+koya.wakayama.jp
+koza.wakayama.jp
+kozagawa.wakayama.jp
+kudoyama.wakayama.jp
+kushimoto.wakayama.jp
+mihama.wakayama.jp
+misato.wakayama.jp
+nachikatsuura.wakayama.jp
+shingu.wakayama.jp
+shirahama.wakayama.jp
+taiji.wakayama.jp
+tanabe.wakayama.jp
+wakayama.wakayama.jp
+yuasa.wakayama.jp
+yura.wakayama.jp
+asahi.yamagata.jp
+funagata.yamagata.jp
+higashine.yamagata.jp
+iide.yamagata.jp
+kahoku.yamagata.jp
+kaminoyama.yamagata.jp
+kaneyama.yamagata.jp
+kawanishi.yamagata.jp
+mamurogawa.yamagata.jp
+mikawa.yamagata.jp
+murayama.yamagata.jp
+nagai.yamagata.jp
+nakayama.yamagata.jp
+nanyo.yamagata.jp
+nishikawa.yamagata.jp
+obanazawa.yamagata.jp
+oe.yamagata.jp
+oguni.yamagata.jp
+ohkura.yamagata.jp
+oishida.yamagata.jp
+sagae.yamagata.jp
+sakata.yamagata.jp
+sakegawa.yamagata.jp
+shinjo.yamagata.jp
+shirataka.yamagata.jp
+shonai.yamagata.jp
+takahata.yamagata.jp
+tendo.yamagata.jp
+tozawa.yamagata.jp
+tsuruoka.yamagata.jp
+yamagata.yamagata.jp
+yamanobe.yamagata.jp
+yonezawa.yamagata.jp
+yuza.yamagata.jp
+abu.yamaguchi.jp
+hagi.yamaguchi.jp
+hikari.yamaguchi.jp
+hofu.yamaguchi.jp
+iwakuni.yamaguchi.jp
+kudamatsu.yamaguchi.jp
+mitou.yamaguchi.jp
+nagato.yamaguchi.jp
+oshima.yamaguchi.jp
+shimonoseki.yamaguchi.jp
+shunan.yamaguchi.jp
+tabuse.yamaguchi.jp
+tokuyama.yamaguchi.jp
+toyota.yamaguchi.jp
+ube.yamaguchi.jp
+yuu.yamaguchi.jp
+chuo.yamanashi.jp
+doshi.yamanashi.jp
+fuefuki.yamanashi.jp
+fujikawa.yamanashi.jp
+fujikawaguchiko.yamanashi.jp
+fujiyoshida.yamanashi.jp
+hayakawa.yamanashi.jp
+hokuto.yamanashi.jp
+ichikawamisato.yamanashi.jp
+kai.yamanashi.jp
+kofu.yamanashi.jp
+koshu.yamanashi.jp
+kosuge.yamanashi.jp
+minami-alps.yamanashi.jp
+minobu.yamanashi.jp
+nakamichi.yamanashi.jp
+nanbu.yamanashi.jp
+narusawa.yamanashi.jp
+nirasaki.yamanashi.jp
+nishikatsura.yamanashi.jp
+oshino.yamanashi.jp
+otsuki.yamanashi.jp
+showa.yamanashi.jp
+tabayama.yamanashi.jp
+tsuru.yamanashi.jp
+uenohara.yamanashi.jp
+yamanakako.yamanashi.jp
+yamanashi.yamanashi.jp
+
+// ke : http://www.kenic.or.ke/index.php/en/ke-domains/ke-domains
+ke
+ac.ke
+co.ke
+go.ke
+info.ke
+me.ke
+mobi.ke
+ne.ke
+or.ke
+sc.ke
+
+// kg : http://www.domain.kg/dmn_n.html
+kg
+org.kg
+net.kg
+com.kg
+edu.kg
+gov.kg
+mil.kg
+
+// kh : http://www.mptc.gov.kh/dns_registration.htm
+*.kh
+
+// ki : http://www.ki/dns/index.html
+ki
+edu.ki
+biz.ki
+net.ki
+org.ki
+gov.ki
+info.ki
+com.ki
+
+// km : https://en.wikipedia.org/wiki/.km
+// http://www.domaine.km/documents/charte.doc
+km
+org.km
+nom.km
+gov.km
+prd.km
+tm.km
+edu.km
+mil.km
+ass.km
+com.km
+// These are only mentioned as proposed suggestions at domaine.km, but
+// https://en.wikipedia.org/wiki/.km says they're available for registration:
+coop.km
+asso.km
+presse.km
+medecin.km
+notaires.km
+pharmaciens.km
+veterinaire.km
+gouv.km
+
+// kn : https://en.wikipedia.org/wiki/.kn
+// http://www.dot.kn/domainRules.html
+kn
+net.kn
+org.kn
+edu.kn
+gov.kn
+
+// kp : http://www.kcce.kp/en_index.php
+kp
+com.kp
+edu.kp
+gov.kp
+org.kp
+rep.kp
+tra.kp
+
+// kr : https://en.wikipedia.org/wiki/.kr
+// see also: http://domain.nida.or.kr/eng/registration.jsp
+kr
+ac.kr
+co.kr
+es.kr
+go.kr
+hs.kr
+kg.kr
+mil.kr
+ms.kr
+ne.kr
+or.kr
+pe.kr
+re.kr
+sc.kr
+// kr geographical names
+busan.kr
+chungbuk.kr
+chungnam.kr
+daegu.kr
+daejeon.kr
+gangwon.kr
+gwangju.kr
+gyeongbuk.kr
+gyeonggi.kr
+gyeongnam.kr
+incheon.kr
+jeju.kr
+jeonbuk.kr
+jeonnam.kr
+seoul.kr
+ulsan.kr
+
+// kw : https://www.nic.kw/policies/
+// Confirmed by registry
+kw
+com.kw
+edu.kw
+emb.kw
+gov.kw
+ind.kw
+net.kw
+org.kw
+
+// ky : http://www.icta.ky/da_ky_reg_dom.php
+// Confirmed by registry 2008-06-17
+ky
+com.ky
+edu.ky
+net.ky
+org.ky
+
+// kz : https://en.wikipedia.org/wiki/.kz
+// see also: http://www.nic.kz/rules/index.jsp
+kz
+org.kz
+edu.kz
+net.kz
+gov.kz
+mil.kz
+com.kz
+
+// la : https://en.wikipedia.org/wiki/.la
+// Submitted by registry
+la
+int.la
+net.la
+info.la
+edu.la
+gov.la
+per.la
+com.la
+org.la
+
+// lb : https://en.wikipedia.org/wiki/.lb
+// Submitted by registry
+lb
+com.lb
+edu.lb
+gov.lb
+net.lb
+org.lb
+
+// lc : https://en.wikipedia.org/wiki/.lc
+// see also: http://www.nic.lc/rules.htm
+lc
+com.lc
+net.lc
+co.lc
+org.lc
+edu.lc
+gov.lc
+
+// li : https://en.wikipedia.org/wiki/.li
+li
+
+// lk : https://www.nic.lk/index.php/domain-registration/lk-domain-naming-structure
+lk
+gov.lk
+sch.lk
+net.lk
+int.lk
+com.lk
+org.lk
+edu.lk
+ngo.lk
+soc.lk
+web.lk
+ltd.lk
+assn.lk
+grp.lk
+hotel.lk
+ac.lk
+
+// lr : http://psg.com/dns/lr/lr.txt
+// Submitted by registry
+lr
+com.lr
+edu.lr
+gov.lr
+org.lr
+net.lr
+
+// ls : http://www.nic.ls/
+// Confirmed by registry
+ls
+ac.ls
+biz.ls
+co.ls
+edu.ls
+gov.ls
+info.ls
+net.ls
+org.ls
+sc.ls
+
+// lt : https://en.wikipedia.org/wiki/.lt
+lt
+// gov.lt : http://www.gov.lt/index_en.php
+gov.lt
+
+// lu : http://www.dns.lu/en/
+lu
+
+// lv : http://www.nic.lv/DNS/En/generic.php
+lv
+com.lv
+edu.lv
+gov.lv
+org.lv
+mil.lv
+id.lv
+net.lv
+asn.lv
+conf.lv
+
+// ly : http://www.nic.ly/regulations.php
+ly
+com.ly
+net.ly
+gov.ly
+plc.ly
+edu.ly
+sch.ly
+med.ly
+org.ly
+id.ly
+
+// ma : https://en.wikipedia.org/wiki/.ma
+// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf
+ma
+co.ma
+net.ma
+gov.ma
+org.ma
+ac.ma
+press.ma
+
+// mc : http://www.nic.mc/
+mc
+tm.mc
+asso.mc
+
+// md : https://en.wikipedia.org/wiki/.md
+md
+
+// me : https://en.wikipedia.org/wiki/.me
+me
+co.me
+net.me
+org.me
+edu.me
+ac.me
+gov.me
+its.me
+priv.me
+
+// mg : http://nic.mg/nicmg/?page_id=39
+mg
+org.mg
+nom.mg
+gov.mg
+prd.mg
+tm.mg
+edu.mg
+mil.mg
+com.mg
+co.mg
+
+// mh : https://en.wikipedia.org/wiki/.mh
+mh
+
+// mil : https://en.wikipedia.org/wiki/.mil
+mil
+
+// mk : https://en.wikipedia.org/wiki/.mk
+// see also: http://dns.marnet.net.mk/postapka.php
+mk
+com.mk
+org.mk
+net.mk
+edu.mk
+gov.mk
+inf.mk
+name.mk
+
+// ml : http://www.gobin.info/domainname/ml-template.doc
+// see also: https://en.wikipedia.org/wiki/.ml
+ml
+com.ml
+edu.ml
+gouv.ml
+gov.ml
+net.ml
+org.ml
+presse.ml
+
+// mm : https://en.wikipedia.org/wiki/.mm
+*.mm
+
+// mn : https://en.wikipedia.org/wiki/.mn
+mn
+gov.mn
+edu.mn
+org.mn
+
+// mo : http://www.monic.net.mo/
+mo
+com.mo
+net.mo
+org.mo
+edu.mo
+gov.mo
+
+// mobi : https://en.wikipedia.org/wiki/.mobi
+mobi
+
+// mp : http://www.dot.mp/
+// Confirmed by registry 2008-06-17
+mp
+
+// mq : https://en.wikipedia.org/wiki/.mq
+mq
+
+// mr : https://en.wikipedia.org/wiki/.mr
+mr
+gov.mr
+
+// ms : http://www.nic.ms/pdf/MS_Domain_Name_Rules.pdf
+ms
+com.ms
+edu.ms
+gov.ms
+net.ms
+org.ms
+
+// mt : https://www.nic.org.mt/go/policy
+// Submitted by registry
+mt
+com.mt
+edu.mt
+net.mt
+org.mt
+
+// mu : https://en.wikipedia.org/wiki/.mu
+mu
+com.mu
+net.mu
+org.mu
+gov.mu
+ac.mu
+co.mu
+or.mu
+
+// museum : http://about.museum/naming/
+// http://index.museum/
+museum
+academy.museum
+agriculture.museum
+air.museum
+airguard.museum
+alabama.museum
+alaska.museum
+amber.museum
+ambulance.museum
+american.museum
+americana.museum
+americanantiques.museum
+americanart.museum
+amsterdam.museum
+and.museum
+annefrank.museum
+anthro.museum
+anthropology.museum
+antiques.museum
+aquarium.museum
+arboretum.museum
+archaeological.museum
+archaeology.museum
+architecture.museum
+art.museum
+artanddesign.museum
+artcenter.museum
+artdeco.museum
+arteducation.museum
+artgallery.museum
+arts.museum
+artsandcrafts.museum
+asmatart.museum
+assassination.museum
+assisi.museum
+association.museum
+astronomy.museum
+atlanta.museum
+austin.museum
+australia.museum
+automotive.museum
+aviation.museum
+axis.museum
+badajoz.museum
+baghdad.museum
+bahn.museum
+bale.museum
+baltimore.museum
+barcelona.museum
+baseball.museum
+basel.museum
+baths.museum
+bauern.museum
+beauxarts.museum
+beeldengeluid.museum
+bellevue.museum
+bergbau.museum
+berkeley.museum
+berlin.museum
+bern.museum
+bible.museum
+bilbao.museum
+bill.museum
+birdart.museum
+birthplace.museum
+bonn.museum
+boston.museum
+botanical.museum
+botanicalgarden.museum
+botanicgarden.museum
+botany.museum
+brandywinevalley.museum
+brasil.museum
+bristol.museum
+british.museum
+britishcolumbia.museum
+broadcast.museum
+brunel.museum
+brussel.museum
+brussels.museum
+bruxelles.museum
+building.museum
+burghof.museum
+bus.museum
+bushey.museum
+cadaques.museum
+california.museum
+cambridge.museum
+can.museum
+canada.museum
+capebreton.museum
+carrier.museum
+cartoonart.museum
+casadelamoneda.museum
+castle.museum
+castres.museum
+celtic.museum
+center.museum
+chattanooga.museum
+cheltenham.museum
+chesapeakebay.museum
+chicago.museum
+children.museum
+childrens.museum
+childrensgarden.museum
+chiropractic.museum
+chocolate.museum
+christiansburg.museum
+cincinnati.museum
+cinema.museum
+circus.museum
+civilisation.museum
+civilization.museum
+civilwar.museum
+clinton.museum
+clock.museum
+coal.museum
+coastaldefence.museum
+cody.museum
+coldwar.museum
+collection.museum
+colonialwilliamsburg.museum
+coloradoplateau.museum
+columbia.museum
+columbus.museum
+communication.museum
+communications.museum
+community.museum
+computer.museum
+computerhistory.museum
+comunicações.museum
+contemporary.museum
+contemporaryart.museum
+convent.museum
+copenhagen.museum
+corporation.museum
+correios-e-telecomunicações.museum
+corvette.museum
+costume.museum
+countryestate.museum
+county.museum
+crafts.museum
+cranbrook.museum
+creation.museum
+cultural.museum
+culturalcenter.museum
+culture.museum
+cyber.museum
+cymru.museum
+dali.museum
+dallas.museum
+database.museum
+ddr.museum
+decorativearts.museum
+delaware.museum
+delmenhorst.museum
+denmark.museum
+depot.museum
+design.museum
+detroit.museum
+dinosaur.museum
+discovery.museum
+dolls.museum
+donostia.museum
+durham.museum
+eastafrica.museum
+eastcoast.museum
+education.museum
+educational.museum
+egyptian.museum
+eisenbahn.museum
+elburg.museum
+elvendrell.museum
+embroidery.museum
+encyclopedic.museum
+england.museum
+entomology.museum
+environment.museum
+environmentalconservation.museum
+epilepsy.museum
+essex.museum
+estate.museum
+ethnology.museum
+exeter.museum
+exhibition.museum
+family.museum
+farm.museum
+farmequipment.museum
+farmers.museum
+farmstead.museum
+field.museum
+figueres.museum
+filatelia.museum
+film.museum
+fineart.museum
+finearts.museum
+finland.museum
+flanders.museum
+florida.museum
+force.museum
+fortmissoula.museum
+fortworth.museum
+foundation.museum
+francaise.museum
+frankfurt.museum
+franziskaner.museum
+freemasonry.museum
+freiburg.museum
+fribourg.museum
+frog.museum
+fundacio.museum
+furniture.museum
+gallery.museum
+garden.museum
+gateway.museum
+geelvinck.museum
+gemological.museum
+geology.museum
+georgia.museum
+giessen.museum
+glas.museum
+glass.museum
+gorge.museum
+grandrapids.museum
+graz.museum
+guernsey.museum
+halloffame.museum
+hamburg.museum
+handson.museum
+harvestcelebration.museum
+hawaii.museum
+health.museum
+heimatunduhren.museum
+hellas.museum
+helsinki.museum
+hembygdsforbund.museum
+heritage.museum
+histoire.museum
+historical.museum
+historicalsociety.museum
+historichouses.museum
+historisch.museum
+historisches.museum
+history.museum
+historyofscience.museum
+horology.museum
+house.museum
+humanities.museum
+illustration.museum
+imageandsound.museum
+indian.museum
+indiana.museum
+indianapolis.museum
+indianmarket.museum
+intelligence.museum
+interactive.museum
+iraq.museum
+iron.museum
+isleofman.museum
+jamison.museum
+jefferson.museum
+jerusalem.museum
+jewelry.museum
+jewish.museum
+jewishart.museum
+jfk.museum
+journalism.museum
+judaica.museum
+judygarland.museum
+juedisches.museum
+juif.museum
+karate.museum
+karikatur.museum
+kids.museum
+koebenhavn.museum
+koeln.museum
+kunst.museum
+kunstsammlung.museum
+kunstunddesign.museum
+labor.museum
+labour.museum
+lajolla.museum
+lancashire.museum
+landes.museum
+lans.museum
+läns.museum
+larsson.museum
+lewismiller.museum
+lincoln.museum
+linz.museum
+living.museum
+livinghistory.museum
+localhistory.museum
+london.museum
+losangeles.museum
+louvre.museum
+loyalist.museum
+lucerne.museum
+luxembourg.museum
+luzern.museum
+mad.museum
+madrid.museum
+mallorca.museum
+manchester.museum
+mansion.museum
+mansions.museum
+manx.museum
+marburg.museum
+maritime.museum
+maritimo.museum
+maryland.museum
+marylhurst.museum
+media.museum
+medical.museum
+medizinhistorisches.museum
+meeres.museum
+memorial.museum
+mesaverde.museum
+michigan.museum
+midatlantic.museum
+military.museum
+mill.museum
+miners.museum
+mining.museum
+minnesota.museum
+missile.museum
+missoula.museum
+modern.museum
+moma.museum
+money.museum
+monmouth.museum
+monticello.museum
+montreal.museum
+moscow.museum
+motorcycle.museum
+muenchen.museum
+muenster.museum
+mulhouse.museum
+muncie.museum
+museet.museum
+museumcenter.museum
+museumvereniging.museum
+music.museum
+national.museum
+nationalfirearms.museum
+nationalheritage.museum
+nativeamerican.museum
+naturalhistory.museum
+naturalhistorymuseum.museum
+naturalsciences.museum
+nature.museum
+naturhistorisches.museum
+natuurwetenschappen.museum
+naumburg.museum
+naval.museum
+nebraska.museum
+neues.museum
+newhampshire.museum
+newjersey.museum
+newmexico.museum
+newport.museum
+newspaper.museum
+newyork.museum
+niepce.museum
+norfolk.museum
+north.museum
+nrw.museum
+nyc.museum
+nyny.museum
+oceanographic.museum
+oceanographique.museum
+omaha.museum
+online.museum
+ontario.museum
+openair.museum
+oregon.museum
+oregontrail.museum
+otago.museum
+oxford.museum
+pacific.museum
+paderborn.museum
+palace.museum
+paleo.museum
+palmsprings.museum
+panama.museum
+paris.museum
+pasadena.museum
+pharmacy.museum
+philadelphia.museum
+philadelphiaarea.museum
+philately.museum
+phoenix.museum
+photography.museum
+pilots.museum
+pittsburgh.museum
+planetarium.museum
+plantation.museum
+plants.museum
+plaza.museum
+portal.museum
+portland.museum
+portlligat.museum
+posts-and-telecommunications.museum
+preservation.museum
+presidio.museum
+press.museum
+project.museum
+public.museum
+pubol.museum
+quebec.museum
+railroad.museum
+railway.museum
+research.museum
+resistance.museum
+riodejaneiro.museum
+rochester.museum
+rockart.museum
+roma.museum
+russia.museum
+saintlouis.museum
+salem.museum
+salvadordali.museum
+salzburg.museum
+sandiego.museum
+sanfrancisco.museum
+santabarbara.museum
+santacruz.museum
+santafe.museum
+saskatchewan.museum
+satx.museum
+savannahga.museum
+schlesisches.museum
+schoenbrunn.museum
+schokoladen.museum
+school.museum
+schweiz.museum
+science.museum
+scienceandhistory.museum
+scienceandindustry.museum
+sciencecenter.museum
+sciencecenters.museum
+science-fiction.museum
+sciencehistory.museum
+sciences.museum
+sciencesnaturelles.museum
+scotland.museum
+seaport.museum
+settlement.museum
+settlers.museum
+shell.museum
+sherbrooke.museum
+sibenik.museum
+silk.museum
+ski.museum
+skole.museum
+society.museum
+sologne.museum
+soundandvision.museum
+southcarolina.museum
+southwest.museum
+space.museum
+spy.museum
+square.museum
+stadt.museum
+stalbans.museum
+starnberg.museum
+state.museum
+stateofdelaware.museum
+station.museum
+steam.museum
+steiermark.museum
+stjohn.museum
+stockholm.museum
+stpetersburg.museum
+stuttgart.museum
+suisse.museum
+surgeonshall.museum
+surrey.museum
+svizzera.museum
+sweden.museum
+sydney.museum
+tank.museum
+tcm.museum
+technology.museum
+telekommunikation.museum
+television.museum
+texas.museum
+textile.museum
+theater.museum
+time.museum
+timekeeping.museum
+topology.museum
+torino.museum
+touch.museum
+town.museum
+transport.museum
+tree.museum
+trolley.museum
+trust.museum
+trustee.museum
+uhren.museum
+ulm.museum
+undersea.museum
+university.museum
+usa.museum
+usantiques.museum
+usarts.museum
+uscountryestate.museum
+usculture.museum
+usdecorativearts.museum
+usgarden.museum
+ushistory.museum
+ushuaia.museum
+uslivinghistory.museum
+utah.museum
+uvic.museum
+valley.museum
+vantaa.museum
+versailles.museum
+viking.museum
+village.museum
+virginia.museum
+virtual.museum
+virtuel.museum
+vlaanderen.museum
+volkenkunde.museum
+wales.museum
+wallonie.museum
+war.museum
+washingtondc.museum
+watchandclock.museum
+watch-and-clock.museum
+western.museum
+westfalen.museum
+whaling.museum
+wildlife.museum
+williamsburg.museum
+windmill.museum
+workshop.museum
+york.museum
+yorkshire.museum
+yosemite.museum
+youth.museum
+zoological.museum
+zoology.museum
+ירושלים.museum
+иком.museum
+
+// mv : https://en.wikipedia.org/wiki/.mv
+// "mv" included because, contra Wikipedia, google.mv exists.
+mv
+aero.mv
+biz.mv
+com.mv
+coop.mv
+edu.mv
+gov.mv
+info.mv
+int.mv
+mil.mv
+museum.mv
+name.mv
+net.mv
+org.mv
+pro.mv
+
+// mw : http://www.registrar.mw/
+mw
+ac.mw
+biz.mw
+co.mw
+com.mw
+coop.mw
+edu.mw
+gov.mw
+int.mw
+museum.mw
+net.mw
+org.mw
+
+// mx : http://www.nic.mx/
+// Submitted by registry
+mx
+com.mx
+org.mx
+gob.mx
+edu.mx
+net.mx
+
+// my : http://www.mynic.my/
+// Available strings: https://mynic.my/resources/domains/buying-a-domain/
+my
+biz.my
+com.my
+edu.my
+gov.my
+mil.my
+name.my
+net.my
+org.my
+
+// mz : http://www.uem.mz/
+// Submitted by registry
+mz
+ac.mz
+adv.mz
+co.mz
+edu.mz
+gov.mz
+mil.mz
+net.mz
+org.mz
+
+// na : http://www.na-nic.com.na/
+// http://www.info.na/domain/
+na
+info.na
+pro.na
+name.na
+school.na
+or.na
+dr.na
+us.na
+mx.na
+ca.na
+in.na
+cc.na
+tv.na
+ws.na
+mobi.na
+co.na
+com.na
+org.na
+
+// name : has 2nd-level tlds, but there's no list of them
+name
+
+// nc : http://www.cctld.nc/
+nc
+asso.nc
+nom.nc
+
+// ne : https://en.wikipedia.org/wiki/.ne
+ne
+
+// net : https://en.wikipedia.org/wiki/.net
+net
+
+// nf : https://en.wikipedia.org/wiki/.nf
+nf
+com.nf
+net.nf
+per.nf
+rec.nf
+web.nf
+arts.nf
+firm.nf
+info.nf
+other.nf
+store.nf
+
+// ng : http://www.nira.org.ng/index.php/join-us/register-ng-domain/189-nira-slds
+ng
+com.ng
+edu.ng
+gov.ng
+i.ng
+mil.ng
+mobi.ng
+name.ng
+net.ng
+org.ng
+sch.ng
+
+// ni : http://www.nic.ni/
+ni
+ac.ni
+biz.ni
+co.ni
+com.ni
+edu.ni
+gob.ni
+in.ni
+info.ni
+int.ni
+mil.ni
+net.ni
+nom.ni
+org.ni
+web.ni
+
+// nl : https://en.wikipedia.org/wiki/.nl
+// https://www.sidn.nl/
+// ccTLD for the Netherlands
+nl
+
+// no : https://www.norid.no/en/om-domenenavn/regelverk-for-no/
+// Norid geographical second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-b/
+// Norid category second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-c/
+// Norid category second-level domains managed by parties other than Norid : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-d/
+// RSS feed: https://teknisk.norid.no/en/feed/
+no
+// Norid category second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-c/
+fhs.no
+vgs.no
+fylkesbibl.no
+folkebibl.no
+museum.no
+idrett.no
+priv.no
+// Norid category second-level domains managed by parties other than Norid : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-d/
+mil.no
+stat.no
+dep.no
+kommune.no
+herad.no
+// Norid geographical second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-b/
+// counties
+aa.no
+ah.no
+bu.no
+fm.no
+hl.no
+hm.no
+jan-mayen.no
+mr.no
+nl.no
+nt.no
+of.no
+ol.no
+oslo.no
+rl.no
+sf.no
+st.no
+svalbard.no
+tm.no
+tr.no
+va.no
+vf.no
+// primary and lower secondary schools per county
+gs.aa.no
+gs.ah.no
+gs.bu.no
+gs.fm.no
+gs.hl.no
+gs.hm.no
+gs.jan-mayen.no
+gs.mr.no
+gs.nl.no
+gs.nt.no
+gs.of.no
+gs.ol.no
+gs.oslo.no
+gs.rl.no
+gs.sf.no
+gs.st.no
+gs.svalbard.no
+gs.tm.no
+gs.tr.no
+gs.va.no
+gs.vf.no
+// cities
+akrehamn.no
+åkrehamn.no
+algard.no
+ålgård.no
+arna.no
+brumunddal.no
+bryne.no
+bronnoysund.no
+brønnøysund.no
+drobak.no
+drøbak.no
+egersund.no
+fetsund.no
+floro.no
+florø.no
+fredrikstad.no
+hokksund.no
+honefoss.no
+hønefoss.no
+jessheim.no
+jorpeland.no
+jørpeland.no
+kirkenes.no
+kopervik.no
+krokstadelva.no
+langevag.no
+langevåg.no
+leirvik.no
+mjondalen.no
+mjøndalen.no
+mo-i-rana.no
+mosjoen.no
+mosjøen.no
+nesoddtangen.no
+orkanger.no
+osoyro.no
+osøyro.no
+raholt.no
+råholt.no
+sandnessjoen.no
+sandnessjøen.no
+skedsmokorset.no
+slattum.no
+spjelkavik.no
+stathelle.no
+stavern.no
+stjordalshalsen.no
+stjørdalshalsen.no
+tananger.no
+tranby.no
+vossevangen.no
+// communities
+afjord.no
+åfjord.no
+agdenes.no
+al.no
+ål.no
+alesund.no
+ålesund.no
+alstahaug.no
+alta.no
+áltá.no
+alaheadju.no
+álaheadju.no
+alvdal.no
+amli.no
+åmli.no
+amot.no
+åmot.no
+andebu.no
+andoy.no
+andøy.no
+andasuolo.no
+ardal.no
+årdal.no
+aremark.no
+arendal.no
+ås.no
+aseral.no
+åseral.no
+asker.no
+askim.no
+askvoll.no
+askoy.no
+askøy.no
+asnes.no
+åsnes.no
+audnedaln.no
+aukra.no
+aure.no
+aurland.no
+aurskog-holand.no
+aurskog-høland.no
+austevoll.no
+austrheim.no
+averoy.no
+averøy.no
+balestrand.no
+ballangen.no
+balat.no
+bálát.no
+balsfjord.no
+bahccavuotna.no
+báhccavuotna.no
+bamble.no
+bardu.no
+beardu.no
+beiarn.no
+bajddar.no
+bájddar.no
+baidar.no
+báidár.no
+berg.no
+bergen.no
+berlevag.no
+berlevåg.no
+bearalvahki.no
+bearalváhki.no
+bindal.no
+birkenes.no
+bjarkoy.no
+bjarkøy.no
+bjerkreim.no
+bjugn.no
+bodo.no
+bodø.no
+badaddja.no
+bådåddjå.no
+budejju.no
+bokn.no
+bremanger.no
+bronnoy.no
+brønnøy.no
+bygland.no
+bykle.no
+barum.no
+bærum.no
+bo.telemark.no
+bø.telemark.no
+bo.nordland.no
+bø.nordland.no
+bievat.no
+bievát.no
+bomlo.no
+bømlo.no
+batsfjord.no
+båtsfjord.no
+bahcavuotna.no
+báhcavuotna.no
+dovre.no
+drammen.no
+drangedal.no
+dyroy.no
+dyrøy.no
+donna.no
+dønna.no
+eid.no
+eidfjord.no
+eidsberg.no
+eidskog.no
+eidsvoll.no
+eigersund.no
+elverum.no
+enebakk.no
+engerdal.no
+etne.no
+etnedal.no
+evenes.no
+evenassi.no
+evenášši.no
+evje-og-hornnes.no
+farsund.no
+fauske.no
+fuossko.no
+fuoisku.no
+fedje.no
+fet.no
+finnoy.no
+finnøy.no
+fitjar.no
+fjaler.no
+fjell.no
+flakstad.no
+flatanger.no
+flekkefjord.no
+flesberg.no
+flora.no
+fla.no
+flå.no
+folldal.no
+forsand.no
+fosnes.no
+frei.no
+frogn.no
+froland.no
+frosta.no
+frana.no
+fræna.no
+froya.no
+frøya.no
+fusa.no
+fyresdal.no
+forde.no
+førde.no
+gamvik.no
+gangaviika.no
+gáŋgaviika.no
+gaular.no
+gausdal.no
+gildeskal.no
+gildeskål.no
+giske.no
+gjemnes.no
+gjerdrum.no
+gjerstad.no
+gjesdal.no
+gjovik.no
+gjøvik.no
+gloppen.no
+gol.no
+gran.no
+grane.no
+granvin.no
+gratangen.no
+grimstad.no
+grong.no
+kraanghke.no
+kråanghke.no
+grue.no
+gulen.no
+hadsel.no
+halden.no
+halsa.no
+hamar.no
+hamaroy.no
+habmer.no
+hábmer.no
+hapmir.no
+hápmir.no
+hammerfest.no
+hammarfeasta.no
+hámmárfeasta.no
+haram.no
+hareid.no
+harstad.no
+hasvik.no
+aknoluokta.no
+ákŋoluokta.no
+hattfjelldal.no
+aarborte.no
+haugesund.no
+hemne.no
+hemnes.no
+hemsedal.no
+heroy.more-og-romsdal.no
+herøy.møre-og-romsdal.no
+heroy.nordland.no
+herøy.nordland.no
+hitra.no
+hjartdal.no
+hjelmeland.no
+hobol.no
+hobøl.no
+hof.no
+hol.no
+hole.no
+holmestrand.no
+holtalen.no
+holtålen.no
+hornindal.no
+horten.no
+hurdal.no
+hurum.no
+hvaler.no
+hyllestad.no
+hagebostad.no
+hægebostad.no
+hoyanger.no
+høyanger.no
+hoylandet.no
+høylandet.no
+ha.no
+hå.no
+ibestad.no
+inderoy.no
+inderøy.no
+iveland.no
+jevnaker.no
+jondal.no
+jolster.no
+jølster.no
+karasjok.no
+karasjohka.no
+kárášjohka.no
+karlsoy.no
+galsa.no
+gálsá.no
+karmoy.no
+karmøy.no
+kautokeino.no
+guovdageaidnu.no
+klepp.no
+klabu.no
+klæbu.no
+kongsberg.no
+kongsvinger.no
+kragero.no
+kragerø.no
+kristiansand.no
+kristiansund.no
+krodsherad.no
+krødsherad.no
+kvalsund.no
+rahkkeravju.no
+ráhkkerávju.no
+kvam.no
+kvinesdal.no
+kvinnherad.no
+kviteseid.no
+kvitsoy.no
+kvitsøy.no
+kvafjord.no
+kvæfjord.no
+giehtavuoatna.no
+kvanangen.no
+kvænangen.no
+navuotna.no
+návuotna.no
+kafjord.no
+kåfjord.no
+gaivuotna.no
+gáivuotna.no
+larvik.no
+lavangen.no
+lavagis.no
+loabat.no
+loabát.no
+lebesby.no
+davvesiida.no
+leikanger.no
+leirfjord.no
+leka.no
+leksvik.no
+lenvik.no
+leangaviika.no
+leaŋgaviika.no
+lesja.no
+levanger.no
+lier.no
+lierne.no
+lillehammer.no
+lillesand.no
+lindesnes.no
+lindas.no
+lindås.no
+lom.no
+loppa.no
+lahppi.no
+láhppi.no
+lund.no
+lunner.no
+luroy.no
+lurøy.no
+luster.no
+lyngdal.no
+lyngen.no
+ivgu.no
+lardal.no
+lerdal.no
+lærdal.no
+lodingen.no
+lødingen.no
+lorenskog.no
+lørenskog.no
+loten.no
+løten.no
+malvik.no
+masoy.no
+måsøy.no
+muosat.no
+muosát.no
+mandal.no
+marker.no
+marnardal.no
+masfjorden.no
+meland.no
+meldal.no
+melhus.no
+meloy.no
+meløy.no
+meraker.no
+meråker.no
+moareke.no
+moåreke.no
+midsund.no
+midtre-gauldal.no
+modalen.no
+modum.no
+molde.no
+moskenes.no
+moss.no
+mosvik.no
+malselv.no
+målselv.no
+malatvuopmi.no
+málatvuopmi.no
+namdalseid.no
+aejrie.no
+namsos.no
+namsskogan.no
+naamesjevuemie.no
+nååmesjevuemie.no
+laakesvuemie.no
+nannestad.no
+narvik.no
+narviika.no
+naustdal.no
+nedre-eiker.no
+nes.akershus.no
+nes.buskerud.no
+nesna.no
+nesodden.no
+nesseby.no
+unjarga.no
+unjárga.no
+nesset.no
+nissedal.no
+nittedal.no
+nord-aurdal.no
+nord-fron.no
+nord-odal.no
+norddal.no
+nordkapp.no
+davvenjarga.no
+davvenjárga.no
+nordre-land.no
+nordreisa.no
+raisa.no
+ráisa.no
+nore-og-uvdal.no
+notodden.no
+naroy.no
+nærøy.no
+notteroy.no
+nøtterøy.no
+odda.no
+oksnes.no
+øksnes.no
+oppdal.no
+oppegard.no
+oppegård.no
+orkdal.no
+orland.no
+ørland.no
+orskog.no
+ørskog.no
+orsta.no
+ørsta.no
+os.hedmark.no
+os.hordaland.no
+osen.no
+osteroy.no
+osterøy.no
+ostre-toten.no
+østre-toten.no
+overhalla.no
+ovre-eiker.no
+øvre-eiker.no
+oyer.no
+øyer.no
+oygarden.no
+øygarden.no
+oystre-slidre.no
+øystre-slidre.no
+porsanger.no
+porsangu.no
+porsáŋgu.no
+porsgrunn.no
+radoy.no
+radøy.no
+rakkestad.no
+rana.no
+ruovat.no
+randaberg.no
+rauma.no
+rendalen.no
+rennebu.no
+rennesoy.no
+rennesøy.no
+rindal.no
+ringebu.no
+ringerike.no
+ringsaker.no
+rissa.no
+risor.no
+risør.no
+roan.no
+rollag.no
+rygge.no
+ralingen.no
+rælingen.no
+rodoy.no
+rødøy.no
+romskog.no
+rømskog.no
+roros.no
+røros.no
+rost.no
+røst.no
+royken.no
+røyken.no
+royrvik.no
+røyrvik.no
+rade.no
+råde.no
+salangen.no
+siellak.no
+saltdal.no
+salat.no
+sálát.no
+sálat.no
+samnanger.no
+sande.more-og-romsdal.no
+sande.møre-og-romsdal.no
+sande.vestfold.no
+sandefjord.no
+sandnes.no
+sandoy.no
+sandøy.no
+sarpsborg.no
+sauda.no
+sauherad.no
+sel.no
+selbu.no
+selje.no
+seljord.no
+sigdal.no
+siljan.no
+sirdal.no
+skaun.no
+skedsmo.no
+ski.no
+skien.no
+skiptvet.no
+skjervoy.no
+skjervøy.no
+skierva.no
+skiervá.no
+skjak.no
+skjåk.no
+skodje.no
+skanland.no
+skånland.no
+skanit.no
+skánit.no
+smola.no
+smøla.no
+snillfjord.no
+snasa.no
+snåsa.no
+snoasa.no
+snaase.no
+snåase.no
+sogndal.no
+sokndal.no
+sola.no
+solund.no
+songdalen.no
+sortland.no
+spydeberg.no
+stange.no
+stavanger.no
+steigen.no
+steinkjer.no
+stjordal.no
+stjørdal.no
+stokke.no
+stor-elvdal.no
+stord.no
+stordal.no
+storfjord.no
+omasvuotna.no
+strand.no
+stranda.no
+stryn.no
+sula.no
+suldal.no
+sund.no
+sunndal.no
+surnadal.no
+sveio.no
+svelvik.no
+sykkylven.no
+sogne.no
+søgne.no
+somna.no
+sømna.no
+sondre-land.no
+søndre-land.no
+sor-aurdal.no
+sør-aurdal.no
+sor-fron.no
+sør-fron.no
+sor-odal.no
+sør-odal.no
+sor-varanger.no
+sør-varanger.no
+matta-varjjat.no
+mátta-várjjat.no
+sorfold.no
+sørfold.no
+sorreisa.no
+sørreisa.no
+sorum.no
+sørum.no
+tana.no
+deatnu.no
+time.no
+tingvoll.no
+tinn.no
+tjeldsund.no
+dielddanuorri.no
+tjome.no
+tjøme.no
+tokke.no
+tolga.no
+torsken.no
+tranoy.no
+tranøy.no
+tromso.no
+tromsø.no
+tromsa.no
+romsa.no
+trondheim.no
+troandin.no
+trysil.no
+trana.no
+træna.no
+trogstad.no
+trøgstad.no
+tvedestrand.no
+tydal.no
+tynset.no
+tysfjord.no
+divtasvuodna.no
+divttasvuotna.no
+tysnes.no
+tysvar.no
+tysvær.no
+tonsberg.no
+tønsberg.no
+ullensaker.no
+ullensvang.no
+ulvik.no
+utsira.no
+vadso.no
+vadsø.no
+cahcesuolo.no
+čáhcesuolo.no
+vaksdal.no
+valle.no
+vang.no
+vanylven.no
+vardo.no
+vardø.no
+varggat.no
+várggát.no
+vefsn.no
+vaapste.no
+vega.no
+vegarshei.no
+vegårshei.no
+vennesla.no
+verdal.no
+verran.no
+vestby.no
+vestnes.no
+vestre-slidre.no
+vestre-toten.no
+vestvagoy.no
+vestvågøy.no
+vevelstad.no
+vik.no
+vikna.no
+vindafjord.no
+volda.no
+voss.no
+varoy.no
+værøy.no
+vagan.no
+vågan.no
+voagat.no
+vagsoy.no
+vågsøy.no
+vaga.no
+vågå.no
+valer.ostfold.no
+våler.østfold.no
+valer.hedmark.no
+våler.hedmark.no
+
+// np : http://www.mos.com.np/register.html
+*.np
+
+// nr : http://cenpac.net.nr/dns/index.html
+// Submitted by registry
+nr
+biz.nr
+info.nr
+gov.nr
+edu.nr
+org.nr
+net.nr
+com.nr
+
+// nu : https://en.wikipedia.org/wiki/.nu
+nu
+
+// nz : https://en.wikipedia.org/wiki/.nz
+// Submitted by registry
+nz
+ac.nz
+co.nz
+cri.nz
+geek.nz
+gen.nz
+govt.nz
+health.nz
+iwi.nz
+kiwi.nz
+maori.nz
+mil.nz
+māori.nz
+net.nz
+org.nz
+parliament.nz
+school.nz
+
+// om : https://en.wikipedia.org/wiki/.om
+om
+co.om
+com.om
+edu.om
+gov.om
+med.om
+museum.om
+net.om
+org.om
+pro.om
+
+// onion : https://tools.ietf.org/html/rfc7686
+onion
+
+// org : https://en.wikipedia.org/wiki/.org
+org
+
+// pa : http://www.nic.pa/
+// Some additional second level "domains" resolve directly as hostnames, such as
+// pannet.pa, so we add a rule for "pa".
+pa
+ac.pa
+gob.pa
+com.pa
+org.pa
+sld.pa
+edu.pa
+net.pa
+ing.pa
+abo.pa
+med.pa
+nom.pa
+
+// pe : https://www.nic.pe/InformeFinalComision.pdf
+pe
+edu.pe
+gob.pe
+nom.pe
+mil.pe
+org.pe
+com.pe
+net.pe
+
+// pf : http://www.gobin.info/domainname/formulaire-pf.pdf
+pf
+com.pf
+org.pf
+edu.pf
+
+// pg : https://en.wikipedia.org/wiki/.pg
+*.pg
+
+// ph : http://www.domains.ph/FAQ2.asp
+// Submitted by registry
+ph
+com.ph
+net.ph
+org.ph
+gov.ph
+edu.ph
+ngo.ph
+mil.ph
+i.ph
+
+// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK
+pk
+com.pk
+net.pk
+edu.pk
+org.pk
+fam.pk
+biz.pk
+web.pk
+gov.pk
+gob.pk
+gok.pk
+gon.pk
+gop.pk
+gos.pk
+info.pk
+
+// pl http://www.dns.pl/english/index.html
+// Submitted by registry
+pl
+com.pl
+net.pl
+org.pl
+// pl functional domains (http://www.dns.pl/english/index.html)
+aid.pl
+agro.pl
+atm.pl
+auto.pl
+biz.pl
+edu.pl
+gmina.pl
+gsm.pl
+info.pl
+mail.pl
+miasta.pl
+media.pl
+mil.pl
+nieruchomosci.pl
+nom.pl
+pc.pl
+powiat.pl
+priv.pl
+realestate.pl
+rel.pl
+sex.pl
+shop.pl
+sklep.pl
+sos.pl
+szkola.pl
+targi.pl
+tm.pl
+tourism.pl
+travel.pl
+turystyka.pl
+// Government domains
+gov.pl
+ap.gov.pl
+ic.gov.pl
+is.gov.pl
+us.gov.pl
+kmpsp.gov.pl
+kppsp.gov.pl
+kwpsp.gov.pl
+psp.gov.pl
+wskr.gov.pl
+kwp.gov.pl
+mw.gov.pl
+ug.gov.pl
+um.gov.pl
+umig.gov.pl
+ugim.gov.pl
+upow.gov.pl
+uw.gov.pl
+starostwo.gov.pl
+pa.gov.pl
+po.gov.pl
+psse.gov.pl
+pup.gov.pl
+rzgw.gov.pl
+sa.gov.pl
+so.gov.pl
+sr.gov.pl
+wsa.gov.pl
+sko.gov.pl
+uzs.gov.pl
+wiih.gov.pl
+winb.gov.pl
+pinb.gov.pl
+wios.gov.pl
+witd.gov.pl
+wzmiuw.gov.pl
+piw.gov.pl
+wiw.gov.pl
+griw.gov.pl
+wif.gov.pl
+oum.gov.pl
+sdn.gov.pl
+zp.gov.pl
+uppo.gov.pl
+mup.gov.pl
+wuoz.gov.pl
+konsulat.gov.pl
+oirm.gov.pl
+// pl regional domains (http://www.dns.pl/english/index.html)
+augustow.pl
+babia-gora.pl
+bedzin.pl
+beskidy.pl
+bialowieza.pl
+bialystok.pl
+bielawa.pl
+bieszczady.pl
+boleslawiec.pl
+bydgoszcz.pl
+bytom.pl
+cieszyn.pl
+czeladz.pl
+czest.pl
+dlugoleka.pl
+elblag.pl
+elk.pl
+glogow.pl
+gniezno.pl
+gorlice.pl
+grajewo.pl
+ilawa.pl
+jaworzno.pl
+jelenia-gora.pl
+jgora.pl
+kalisz.pl
+kazimierz-dolny.pl
+karpacz.pl
+kartuzy.pl
+kaszuby.pl
+katowice.pl
+kepno.pl
+ketrzyn.pl
+klodzko.pl
+kobierzyce.pl
+kolobrzeg.pl
+konin.pl
+konskowola.pl
+kutno.pl
+lapy.pl
+lebork.pl
+legnica.pl
+lezajsk.pl
+limanowa.pl
+lomza.pl
+lowicz.pl
+lubin.pl
+lukow.pl
+malbork.pl
+malopolska.pl
+mazowsze.pl
+mazury.pl
+mielec.pl
+mielno.pl
+mragowo.pl
+naklo.pl
+nowaruda.pl
+nysa.pl
+olawa.pl
+olecko.pl
+olkusz.pl
+olsztyn.pl
+opoczno.pl
+opole.pl
+ostroda.pl
+ostroleka.pl
+ostrowiec.pl
+ostrowwlkp.pl
+pila.pl
+pisz.pl
+podhale.pl
+podlasie.pl
+polkowice.pl
+pomorze.pl
+pomorskie.pl
+prochowice.pl
+pruszkow.pl
+przeworsk.pl
+pulawy.pl
+radom.pl
+rawa-maz.pl
+rybnik.pl
+rzeszow.pl
+sanok.pl
+sejny.pl
+slask.pl
+slupsk.pl
+sosnowiec.pl
+stalowa-wola.pl
+skoczow.pl
+starachowice.pl
+stargard.pl
+suwalki.pl
+swidnica.pl
+swiebodzin.pl
+swinoujscie.pl
+szczecin.pl
+szczytno.pl
+tarnobrzeg.pl
+tgory.pl
+turek.pl
+tychy.pl
+ustka.pl
+walbrzych.pl
+warmia.pl
+warszawa.pl
+waw.pl
+wegrow.pl
+wielun.pl
+wlocl.pl
+wloclawek.pl
+wodzislaw.pl
+wolomin.pl
+wroclaw.pl
+zachpomor.pl
+zagan.pl
+zarow.pl
+zgora.pl
+zgorzelec.pl
+
+// pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf
+pm
+
+// pn : http://www.government.pn/PnRegistry/policies.htm
+pn
+gov.pn
+co.pn
+org.pn
+edu.pn
+net.pn
+
+// post : https://en.wikipedia.org/wiki/.post
+post
+
+// pr : http://www.nic.pr/index.asp?f=1
+pr
+com.pr
+net.pr
+org.pr
+gov.pr
+edu.pr
+isla.pr
+pro.pr
+biz.pr
+info.pr
+name.pr
+// these aren't mentioned on nic.pr, but on https://en.wikipedia.org/wiki/.pr
+est.pr
+prof.pr
+ac.pr
+
+// pro : http://registry.pro/get-pro
+pro
+aaa.pro
+aca.pro
+acct.pro
+avocat.pro
+bar.pro
+cpa.pro
+eng.pro
+jur.pro
+law.pro
+med.pro
+recht.pro
+
+// ps : https://en.wikipedia.org/wiki/.ps
+// http://www.nic.ps/registration/policy.html#reg
+ps
+edu.ps
+gov.ps
+sec.ps
+plo.ps
+com.ps
+org.ps
+net.ps
+
+// pt : https://www.dns.pt/en/domain/pt-terms-and-conditions-registration-rules/
+pt
+net.pt
+gov.pt
+org.pt
+edu.pt
+int.pt
+publ.pt
+com.pt
+nome.pt
+
+// pw : https://en.wikipedia.org/wiki/.pw
+pw
+co.pw
+ne.pw
+or.pw
+ed.pw
+go.pw
+belau.pw
+
+// py : http://www.nic.py/pautas.html#seccion_9
+// Submitted by registry
+py
+com.py
+coop.py
+edu.py
+gov.py
+mil.py
+net.py
+org.py
+
+// qa : http://domains.qa/en/
+qa
+com.qa
+edu.qa
+gov.qa
+mil.qa
+name.qa
+net.qa
+org.qa
+sch.qa
+
+// re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs
+re
+asso.re
+com.re
+nom.re
+
+// ro : http://www.rotld.ro/
+ro
+arts.ro
+com.ro
+firm.ro
+info.ro
+nom.ro
+nt.ro
+org.ro
+rec.ro
+store.ro
+tm.ro
+www.ro
+
+// rs : https://www.rnids.rs/en/domains/national-domains
+rs
+ac.rs
+co.rs
+edu.rs
+gov.rs
+in.rs
+org.rs
+
+// ru : https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf
+// Submitted by George Georgievsky
+ru
+
+// rw : https://www.ricta.org.rw/sites/default/files/resources/registry_registrar_contract_0.pdf
+rw
+ac.rw
+co.rw
+coop.rw
+gov.rw
+mil.rw
+net.rw
+org.rw
+
+// sa : http://www.nic.net.sa/
+sa
+com.sa
+net.sa
+org.sa
+gov.sa
+med.sa
+pub.sa
+edu.sa
+sch.sa
+
+// sb : http://www.sbnic.net.sb/
+// Submitted by registry
+sb
+com.sb
+edu.sb
+gov.sb
+net.sb
+org.sb
+
+// sc : http://www.nic.sc/
+sc
+com.sc
+gov.sc
+net.sc
+org.sc
+edu.sc
+
+// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm
+// Submitted by registry
+sd
+com.sd
+net.sd
+org.sd
+edu.sd
+med.sd
+tv.sd
+gov.sd
+info.sd
+
+// se : https://en.wikipedia.org/wiki/.se
+// Submitted by registry
+se
+a.se
+ac.se
+b.se
+bd.se
+brand.se
+c.se
+d.se
+e.se
+f.se
+fh.se
+fhsk.se
+fhv.se
+g.se
+h.se
+i.se
+k.se
+komforb.se
+kommunalforbund.se
+komvux.se
+l.se
+lanbib.se
+m.se
+n.se
+naturbruksgymn.se
+o.se
+org.se
+p.se
+parti.se
+pp.se
+press.se
+r.se
+s.se
+t.se
+tm.se
+u.se
+w.se
+x.se
+y.se
+z.se
+
+// sg : http://www.nic.net.sg/page/registration-policies-procedures-and-guidelines
+sg
+com.sg
+net.sg
+org.sg
+gov.sg
+edu.sg
+per.sg
+
+// sh : http://nic.sh/rules.htm
+sh
+com.sh
+net.sh
+gov.sh
+org.sh
+mil.sh
+
+// si : https://en.wikipedia.org/wiki/.si
+si
+
+// sj : No registrations at this time.
+// Submitted by registry
+sj
+
+// sk : https://en.wikipedia.org/wiki/.sk
+// list of 2nd level domains ?
+sk
+
+// sl : http://www.nic.sl
+// Submitted by registry
+sl
+com.sl
+net.sl
+edu.sl
+gov.sl
+org.sl
+
+// sm : https://en.wikipedia.org/wiki/.sm
+sm
+
+// sn : https://en.wikipedia.org/wiki/.sn
+sn
+art.sn
+com.sn
+edu.sn
+gouv.sn
+org.sn
+perso.sn
+univ.sn
+
+// so : http://sonic.so/policies/
+so
+com.so
+edu.so
+gov.so
+me.so
+net.so
+org.so
+
+// sr : https://en.wikipedia.org/wiki/.sr
+sr
+
+// ss : https://registry.nic.ss/
+// Submitted by registry
+ss
+biz.ss
+com.ss
+edu.ss
+gov.ss
+me.ss
+net.ss
+org.ss
+sch.ss
+
+// st : http://www.nic.st/html/policyrules/
+st
+co.st
+com.st
+consulado.st
+edu.st
+embaixada.st
+mil.st
+net.st
+org.st
+principe.st
+saotome.st
+store.st
+
+// su : https://en.wikipedia.org/wiki/.su
+su
+
+// sv : http://www.svnet.org.sv/niveldos.pdf
+sv
+com.sv
+edu.sv
+gob.sv
+org.sv
+red.sv
+
+// sx : https://en.wikipedia.org/wiki/.sx
+// Submitted by registry
+sx
+gov.sx
+
+// sy : https://en.wikipedia.org/wiki/.sy
+// see also: http://www.gobin.info/domainname/sy.doc
+sy
+edu.sy
+gov.sy
+net.sy
+mil.sy
+com.sy
+org.sy
+
+// sz : https://en.wikipedia.org/wiki/.sz
+// http://www.sispa.org.sz/
+sz
+co.sz
+ac.sz
+org.sz
+
+// tc : https://en.wikipedia.org/wiki/.tc
+tc
+
+// td : https://en.wikipedia.org/wiki/.td
+td
+
+// tel: https://en.wikipedia.org/wiki/.tel
+// http://www.telnic.org/
+tel
+
+// tf : https://en.wikipedia.org/wiki/.tf
+tf
+
+// tg : https://en.wikipedia.org/wiki/.tg
+// http://www.nic.tg/
+tg
+
+// th : https://en.wikipedia.org/wiki/.th
+// Submitted by registry
+th
+ac.th
+co.th
+go.th
+in.th
+mi.th
+net.th
+or.th
+
+// tj : http://www.nic.tj/policy.html
+tj
+ac.tj
+biz.tj
+co.tj
+com.tj
+edu.tj
+go.tj
+gov.tj
+int.tj
+mil.tj
+name.tj
+net.tj
+nic.tj
+org.tj
+test.tj
+web.tj
+
+// tk : https://en.wikipedia.org/wiki/.tk
+tk
+
+// tl : https://en.wikipedia.org/wiki/.tl
+tl
+gov.tl
+
+// tm : http://www.nic.tm/local.html
+tm
+com.tm
+co.tm
+org.tm
+net.tm
+nom.tm
+gov.tm
+mil.tm
+edu.tm
+
+// tn : http://www.registre.tn/fr/
+// https://whois.ati.tn/
+tn
+com.tn
+ens.tn
+fin.tn
+gov.tn
+ind.tn
+info.tn
+intl.tn
+mincom.tn
+nat.tn
+net.tn
+org.tn
+perso.tn
+tourism.tn
+
+// to : https://en.wikipedia.org/wiki/.to
+// Submitted by registry
+to
+com.to
+gov.to
+net.to
+org.to
+edu.to
+mil.to
+
+// tr : https://nic.tr/
+// https://nic.tr/forms/eng/policies.pdf
+// https://nic.tr/index.php?USRACTN=PRICELST
+tr
+av.tr
+bbs.tr
+bel.tr
+biz.tr
+com.tr
+dr.tr
+edu.tr
+gen.tr
+gov.tr
+info.tr
+mil.tr
+k12.tr
+kep.tr
+name.tr
+net.tr
+org.tr
+pol.tr
+tel.tr
+tsk.tr
+tv.tr
+web.tr
+// Used by Northern Cyprus
+nc.tr
+// Used by government agencies of Northern Cyprus
+gov.nc.tr
+
+// tt : http://www.nic.tt/
+tt
+co.tt
+com.tt
+org.tt
+net.tt
+biz.tt
+info.tt
+pro.tt
+int.tt
+coop.tt
+jobs.tt
+mobi.tt
+travel.tt
+museum.tt
+aero.tt
+name.tt
+gov.tt
+edu.tt
+
+// tv : https://en.wikipedia.org/wiki/.tv
+// Not listing any 2LDs as reserved since none seem to exist in practice,
+// Wikipedia notwithstanding.
+tv
+
+// tw : https://en.wikipedia.org/wiki/.tw
+tw
+edu.tw
+gov.tw
+mil.tw
+com.tw
+net.tw
+org.tw
+idv.tw
+game.tw
+ebiz.tw
+club.tw
+網路.tw
+組織.tw
+商業.tw
+
+// tz : http://www.tznic.or.tz/index.php/domains
+// Submitted by registry
+tz
+ac.tz
+co.tz
+go.tz
+hotel.tz
+info.tz
+me.tz
+mil.tz
+mobi.tz
+ne.tz
+or.tz
+sc.tz
+tv.tz
+
+// ua : https://hostmaster.ua/policy/?ua
+// Submitted by registry
+ua
+// ua 2LD
+com.ua
+edu.ua
+gov.ua
+in.ua
+net.ua
+org.ua
+// ua geographic names
+// https://hostmaster.ua/2ld/
+cherkassy.ua
+cherkasy.ua
+chernigov.ua
+chernihiv.ua
+chernivtsi.ua
+chernovtsy.ua
+ck.ua
+cn.ua
+cr.ua
+crimea.ua
+cv.ua
+dn.ua
+dnepropetrovsk.ua
+dnipropetrovsk.ua
+donetsk.ua
+dp.ua
+if.ua
+ivano-frankivsk.ua
+kh.ua
+kharkiv.ua
+kharkov.ua
+kherson.ua
+khmelnitskiy.ua
+khmelnytskyi.ua
+kiev.ua
+kirovograd.ua
+km.ua
+kr.ua
+krym.ua
+ks.ua
+kv.ua
+kyiv.ua
+lg.ua
+lt.ua
+lugansk.ua
+lutsk.ua
+lv.ua
+lviv.ua
+mk.ua
+mykolaiv.ua
+nikolaev.ua
+od.ua
+odesa.ua
+odessa.ua
+pl.ua
+poltava.ua
+rivne.ua
+rovno.ua
+rv.ua
+sb.ua
+sebastopol.ua
+sevastopol.ua
+sm.ua
+sumy.ua
+te.ua
+ternopil.ua
+uz.ua
+uzhgorod.ua
+vinnica.ua
+vinnytsia.ua
+vn.ua
+volyn.ua
+yalta.ua
+zaporizhzhe.ua
+zaporizhzhia.ua
+zhitomir.ua
+zhytomyr.ua
+zp.ua
+zt.ua
+
+// ug : https://www.registry.co.ug/
+ug
+co.ug
+or.ug
+ac.ug
+sc.ug
+go.ug
+ne.ug
+com.ug
+org.ug
+
+// uk : https://en.wikipedia.org/wiki/.uk
+// Submitted by registry
+uk
+ac.uk
+co.uk
+gov.uk
+ltd.uk
+me.uk
+net.uk
+nhs.uk
+org.uk
+plc.uk
+police.uk
+*.sch.uk
+
+// us : https://en.wikipedia.org/wiki/.us
+us
+dni.us
+fed.us
+isa.us
+kids.us
+nsn.us
+// us geographic names
+ak.us
+al.us
+ar.us
+as.us
+az.us
+ca.us
+co.us
+ct.us
+dc.us
+de.us
+fl.us
+ga.us
+gu.us
+hi.us
+ia.us
+id.us
+il.us
+in.us
+ks.us
+ky.us
+la.us
+ma.us
+md.us
+me.us
+mi.us
+mn.us
+mo.us
+ms.us
+mt.us
+nc.us
+nd.us
+ne.us
+nh.us
+nj.us
+nm.us
+nv.us
+ny.us
+oh.us
+ok.us
+or.us
+pa.us
+pr.us
+ri.us
+sc.us
+sd.us
+tn.us
+tx.us
+ut.us
+vi.us
+vt.us
+va.us
+wa.us
+wi.us
+wv.us
+wy.us
+// The registrar notes several more specific domains available in each state,
+// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat
+// haphazard; in some states these domains resolve as addresses, while in others
+// only subdomains are available, or even nothing at all. We include the
+// most common ones where it's clear that different sites are different
+// entities.
+k12.ak.us
+k12.al.us
+k12.ar.us
+k12.as.us
+k12.az.us
+k12.ca.us
+k12.co.us
+k12.ct.us
+k12.dc.us
+k12.de.us
+k12.fl.us
+k12.ga.us
+k12.gu.us
+// k12.hi.us Bug 614565 - Hawaii has a state-wide DOE login
+k12.ia.us
+k12.id.us
+k12.il.us
+k12.in.us
+k12.ks.us
+k12.ky.us
+k12.la.us
+k12.ma.us
+k12.md.us
+k12.me.us
+k12.mi.us
+k12.mn.us
+k12.mo.us
+k12.ms.us
+k12.mt.us
+k12.nc.us
+// k12.nd.us Bug 1028347 - Removed at request of Travis Rosso
+k12.ne.us
+k12.nh.us
+k12.nj.us
+k12.nm.us
+k12.nv.us
+k12.ny.us
+k12.oh.us
+k12.ok.us
+k12.or.us
+k12.pa.us
+k12.pr.us
+// k12.ri.us Removed at request of Kim Cournoyer
+k12.sc.us
+// k12.sd.us Bug 934131 - Removed at request of James Booze
+k12.tn.us
+k12.tx.us
+k12.ut.us
+k12.vi.us
+k12.vt.us
+k12.va.us
+k12.wa.us
+k12.wi.us
+// k12.wv.us Bug 947705 - Removed at request of Verne Britton
+k12.wy.us
+cc.ak.us
+cc.al.us
+cc.ar.us
+cc.as.us
+cc.az.us
+cc.ca.us
+cc.co.us
+cc.ct.us
+cc.dc.us
+cc.de.us
+cc.fl.us
+cc.ga.us
+cc.gu.us
+cc.hi.us
+cc.ia.us
+cc.id.us
+cc.il.us
+cc.in.us
+cc.ks.us
+cc.ky.us
+cc.la.us
+cc.ma.us
+cc.md.us
+cc.me.us
+cc.mi.us
+cc.mn.us
+cc.mo.us
+cc.ms.us
+cc.mt.us
+cc.nc.us
+cc.nd.us
+cc.ne.us
+cc.nh.us
+cc.nj.us
+cc.nm.us
+cc.nv.us
+cc.ny.us
+cc.oh.us
+cc.ok.us
+cc.or.us
+cc.pa.us
+cc.pr.us
+cc.ri.us
+cc.sc.us
+cc.sd.us
+cc.tn.us
+cc.tx.us
+cc.ut.us
+cc.vi.us
+cc.vt.us
+cc.va.us
+cc.wa.us
+cc.wi.us
+cc.wv.us
+cc.wy.us
+lib.ak.us
+lib.al.us
+lib.ar.us
+lib.as.us
+lib.az.us
+lib.ca.us
+lib.co.us
+lib.ct.us
+lib.dc.us
+// lib.de.us Issue #243 - Moved to Private section at request of Ed Moore
+lib.fl.us
+lib.ga.us
+lib.gu.us
+lib.hi.us
+lib.ia.us
+lib.id.us
+lib.il.us
+lib.in.us
+lib.ks.us
+lib.ky.us
+lib.la.us
+lib.ma.us
+lib.md.us
+lib.me.us
+lib.mi.us
+lib.mn.us
+lib.mo.us
+lib.ms.us
+lib.mt.us
+lib.nc.us
+lib.nd.us
+lib.ne.us
+lib.nh.us
+lib.nj.us
+lib.nm.us
+lib.nv.us
+lib.ny.us
+lib.oh.us
+lib.ok.us
+lib.or.us
+lib.pa.us
+lib.pr.us
+lib.ri.us
+lib.sc.us
+lib.sd.us
+lib.tn.us
+lib.tx.us
+lib.ut.us
+lib.vi.us
+lib.vt.us
+lib.va.us
+lib.wa.us
+lib.wi.us
+// lib.wv.us Bug 941670 - Removed at request of Larry W Arnold
+lib.wy.us
+// k12.ma.us contains school districts in Massachusetts. The 4LDs are
+// managed independently except for private (PVT), charter (CHTR) and
+// parochial (PAROCH) schools. Those are delegated directly to the
+// 5LD operators.
+pvt.k12.ma.us
+chtr.k12.ma.us
+paroch.k12.ma.us
+// Merit Network, Inc. maintains the registry for =~ /(k12|cc|lib).mi.us/ and the following
+// see also: http://domreg.merit.edu
+// see also: whois -h whois.domreg.merit.edu help
+ann-arbor.mi.us
+cog.mi.us
+dst.mi.us
+eaton.mi.us
+gen.mi.us
+mus.mi.us
+tec.mi.us
+washtenaw.mi.us
+
+// uy : http://www.nic.org.uy/
+uy
+com.uy
+edu.uy
+gub.uy
+mil.uy
+net.uy
+org.uy
+
+// uz : http://www.reg.uz/
+uz
+co.uz
+com.uz
+net.uz
+org.uz
+
+// va : https://en.wikipedia.org/wiki/.va
+va
+
+// vc : https://en.wikipedia.org/wiki/.vc
+// Submitted by registry
+vc
+com.vc
+net.vc
+org.vc
+gov.vc
+mil.vc
+edu.vc
+
+// ve : https://registro.nic.ve/
+// Submitted by registry nic@nic.ve and nicve@conatel.gob.ve
+ve
+arts.ve
+bib.ve
+co.ve
+com.ve
+e12.ve
+edu.ve
+firm.ve
+gob.ve
+gov.ve
+info.ve
+int.ve
+mil.ve
+net.ve
+nom.ve
+org.ve
+rar.ve
+rec.ve
+store.ve
+tec.ve
+web.ve
+
+// vg : https://en.wikipedia.org/wiki/.vg
+vg
+
+// vi : http://www.nic.vi/newdomainform.htm
+// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other
+// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they
+// are available for registration (which they do not seem to be).
+vi
+co.vi
+com.vi
+k12.vi
+net.vi
+org.vi
+
+// vn : https://www.dot.vn/vnnic/vnnic/domainregistration.jsp
+vn
+com.vn
+net.vn
+org.vn
+edu.vn
+gov.vn
+int.vn
+ac.vn
+biz.vn
+info.vn
+name.vn
+pro.vn
+health.vn
+
+// vu : https://en.wikipedia.org/wiki/.vu
+// http://www.vunic.vu/
+vu
+com.vu
+edu.vu
+net.vu
+org.vu
+
+// wf : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf
+wf
+
+// ws : https://en.wikipedia.org/wiki/.ws
+// http://samoanic.ws/index.dhtml
+ws
+com.ws
+net.ws
+org.ws
+gov.ws
+edu.ws
+
+// yt : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf
+yt
+
+// IDN ccTLDs
+// When submitting patches, please maintain a sort by ISO 3166 ccTLD, then
+// U-label, and follow this format:
+// // A-Label ("", [, variant info]) :
+// // [sponsoring org]
+// U-Label
+
+// xn--mgbaam7a8h ("Emerat", Arabic) : AE
+// http://nic.ae/english/arabicdomain/rules.jsp
+امارات
+
+// xn--y9a3aq ("hye", Armenian) : AM
+// ISOC AM (operated by .am Registry)
+հայ
+
+// xn--54b7fta0cc ("Bangla", Bangla) : BD
+বাংলা
+
+// xn--90ae ("bg", Bulgarian) : BG
+бг
+
+// xn--mgbcpq6gpa1a ("albahrain", Arabic) : BH
+البحرين
+
+// xn--90ais ("bel", Belarusian/Russian Cyrillic) : BY
+// Operated by .by registry
+бел
+
+// xn--fiqs8s ("Zhongguo/China", Chinese, Simplified) : CN
+// CNNIC
+// http://cnnic.cn/html/Dir/2005/10/11/3218.htm
+中国
+
+// xn--fiqz9s ("Zhongguo/China", Chinese, Traditional) : CN
+// CNNIC
+// http://cnnic.cn/html/Dir/2005/10/11/3218.htm
+中國
+
+// xn--lgbbat1ad8j ("Algeria/Al Jazair", Arabic) : DZ
+الجزائر
+
+// xn--wgbh1c ("Egypt/Masr", Arabic) : EG
+// http://www.dotmasr.eg/
+مصر
+
+// xn--e1a4c ("eu", Cyrillic) : EU
+// https://eurid.eu
+ею
+
+// xn--qxa6a ("eu", Greek) : EU
+// https://eurid.eu
+ευ
+
+// xn--mgbah1a3hjkrd ("Mauritania", Arabic) : MR
+موريتانيا
+
+// xn--node ("ge", Georgian Mkhedruli) : GE
+გე
+
+// xn--qxam ("el", Greek) : GR
+// Hellenic Ministry of Infrastructure, Transport, and Networks
+ελ
+
+// xn--j6w193g ("Hong Kong", Chinese) : HK
+// https://www.hkirc.hk
+// Submitted by registry
+// https://www.hkirc.hk/content.jsp?id=30#!/34
+香港
+公司.香港
+教育.香港
+政府.香港
+個人.香港
+網絡.香港
+組織.香港
+
+// xn--2scrj9c ("Bharat", Kannada) : IN
+// India
+ಭಾರತ
+
+// xn--3hcrj9c ("Bharat", Oriya) : IN
+// India
+ଭାରତ
+
+// xn--45br5cyl ("Bharatam", Assamese) : IN
+// India
+ভাৰত
+
+// xn--h2breg3eve ("Bharatam", Sanskrit) : IN
+// India
+भारतम्
+
+// xn--h2brj9c8c ("Bharot", Santali) : IN
+// India
+भारोत
+
+// xn--mgbgu82a ("Bharat", Sindhi) : IN
+// India
+ڀارت
+
+// xn--rvc1e0am3e ("Bharatam", Malayalam) : IN
+// India
+ഭാരതം
+
+// xn--h2brj9c ("Bharat", Devanagari) : IN
+// India
+भारत
+
+// xn--mgbbh1a ("Bharat", Kashmiri) : IN
+// India
+بارت
+
+// xn--mgbbh1a71e ("Bharat", Arabic) : IN
+// India
+بھارت
+
+// xn--fpcrj9c3d ("Bharat", Telugu) : IN
+// India
+భారత్
+
+// xn--gecrj9c ("Bharat", Gujarati) : IN
+// India
+ભારત
+
+// xn--s9brj9c ("Bharat", Gurmukhi) : IN
+// India
+ਭਾਰਤ
+
+// xn--45brj9c ("Bharat", Bengali) : IN
+// India
+ভারত
+
+// xn--xkc2dl3a5ee0h ("India", Tamil) : IN
+// India
+இந்தியா
+
+// xn--mgba3a4f16a ("Iran", Persian) : IR
+ایران
+
+// xn--mgba3a4fra ("Iran", Arabic) : IR
+ايران
+
+// xn--mgbtx2b ("Iraq", Arabic) : IQ
+// Communications and Media Commission
+عراق
+
+// xn--mgbayh7gpa ("al-Ordon", Arabic) : JO
+// National Information Technology Center (NITC)
+// Royal Scientific Society, Al-Jubeiha
+الاردن
+
+// xn--3e0b707e ("Republic of Korea", Hangul) : KR
+한국
+
+// xn--80ao21a ("Kaz", Kazakh) : KZ
+қаз
+
+// xn--q7ce6a ("Lao", Lao) : LA
+ລາວ
+
+// xn--fzc2c9e2c ("Lanka", Sinhalese-Sinhala) : LK
+// https://nic.lk
+ලංකා
+
+// xn--xkc2al3hye2a ("Ilangai", Tamil) : LK
+// https://nic.lk
+இலங்கை
+
+// xn--mgbc0a9azcg ("Morocco/al-Maghrib", Arabic) : MA
+المغرب
+
+// xn--d1alf ("mkd", Macedonian) : MK
+// MARnet
+мкд
+
+// xn--l1acc ("mon", Mongolian) : MN
+мон
+
+// xn--mix891f ("Macao", Chinese, Traditional) : MO
+// MONIC / HNET Asia (Registry Operator for .mo)
+澳門
+
+// xn--mix082f ("Macao", Chinese, Simplified) : MO
+澳门
+
+// xn--mgbx4cd0ab ("Malaysia", Malay) : MY
+مليسيا
+
+// xn--mgb9awbf ("Oman", Arabic) : OM
+عمان
+
+// xn--mgbai9azgqp6j ("Pakistan", Urdu/Arabic) : PK
+پاکستان
+
+// xn--mgbai9a5eva00b ("Pakistan", Urdu/Arabic, variant) : PK
+پاكستان
+
+// xn--ygbi2ammx ("Falasteen", Arabic) : PS
+// The Palestinian National Internet Naming Authority (PNINA)
+// http://www.pnina.ps
+فلسطين
+
+// xn--90a3ac ("srb", Cyrillic) : RS
+// https://www.rnids.rs/en/domains/national-domains
+срб
+пр.срб
+орг.срб
+обр.срб
+од.срб
+упр.срб
+ак.срб
+
+// xn--p1ai ("rf", Russian-Cyrillic) : RU
+// https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf
+// Submitted by George Georgievsky
+рф
+
+// xn--wgbl6a ("Qatar", Arabic) : QA
+// http://www.ict.gov.qa/
+قطر
+
+// xn--mgberp4a5d4ar ("AlSaudiah", Arabic) : SA
+// http://www.nic.net.sa/
+السعودية
+
+// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant) : SA
+السعودیة
+
+// xn--mgbqly7c0a67fbc ("AlSaudiah", Arabic, variant) : SA
+السعودیۃ
+
+// xn--mgbqly7cvafr ("AlSaudiah", Arabic, variant) : SA
+السعوديه
+
+// xn--mgbpl2fh ("sudan", Arabic) : SD
+// Operated by .sd registry
+سودان
+
+// xn--yfro4i67o Singapore ("Singapore", Chinese) : SG
+新加坡
+
+// xn--clchc0ea0b2g2a9gcd ("Singapore", Tamil) : SG
+சிங்கப்பூர்
+
+// xn--ogbpf8fl ("Syria", Arabic) : SY
+سورية
+
+// xn--mgbtf8fl ("Syria", Arabic, variant) : SY
+سوريا
+
+// xn--o3cw4h ("Thai", Thai) : TH
+// http://www.thnic.co.th
+ไทย
+ศึกษา.ไทย
+ธุรกิจ.ไทย
+รัฐบาล.ไทย
+ทหาร.ไทย
+เน็ต.ไทย
+องค์กร.ไทย
+
+// xn--pgbs0dh ("Tunisia", Arabic) : TN
+// http://nic.tn
+تونس
+
+// xn--kpry57d ("Taiwan", Chinese, Traditional) : TW
+// http://www.twnic.net/english/dn/dn_07a.htm
+台灣
+
+// xn--kprw13d ("Taiwan", Chinese, Simplified) : TW
+// http://www.twnic.net/english/dn/dn_07a.htm
+台湾
+
+// xn--nnx388a ("Taiwan", Chinese, variant) : TW
+臺灣
+
+// xn--j1amh ("ukr", Cyrillic) : UA
+укр
+
+// xn--mgb2ddes ("AlYemen", Arabic) : YE
+اليمن
+
+// xxx : http://icmregistry.com
+xxx
+
+// ye : http://www.y.net.ye/services/domain_name.htm
+ye
+com.ye
+edu.ye
+gov.ye
+net.ye
+mil.ye
+org.ye
+
+// za : https://www.zadna.org.za/content/page/domain-information/
+ac.za
+agric.za
+alt.za
+co.za
+edu.za
+gov.za
+grondar.za
+law.za
+mil.za
+net.za
+ngo.za
+nic.za
+nis.za
+nom.za
+org.za
+school.za
+tm.za
+web.za
+
+// zm : https://zicta.zm/
+// Submitted by registry
+zm
+ac.zm
+biz.zm
+co.zm
+com.zm
+edu.zm
+gov.zm
+info.zm
+mil.zm
+net.zm
+org.zm
+sch.zm
+
+// zw : https://www.potraz.gov.zw/
+// Confirmed by registry 2017-01-25
+zw
+ac.zw
+co.zw
+gov.zw
+mil.zw
+org.zw
+
+
+// newGTLDs
+
+// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2022-03-27T15:13:38Z
+// This list is auto-generated, don't edit it manually.
+// aaa : 2015-02-26 American Automobile Association, Inc.
+aaa
+
+// aarp : 2015-05-21 AARP
+aarp
+
+// abarth : 2015-07-30 Fiat Chrysler Automobiles N.V.
+abarth
+
+// abb : 2014-10-24 ABB Ltd
+abb
+
+// abbott : 2014-07-24 Abbott Laboratories, Inc.
+abbott
+
+// abbvie : 2015-07-30 AbbVie Inc.
+abbvie
+
+// abc : 2015-07-30 Disney Enterprises, Inc.
+abc
+
+// able : 2015-06-25 Able Inc.
+able
+
+// abogado : 2014-04-24 Registry Services, LLC
+abogado
+
+// abudhabi : 2015-07-30 Abu Dhabi Systems and Information Centre
+abudhabi
+
+// academy : 2013-11-07 Binky Moon, LLC
+academy
+
+// accenture : 2014-08-15 Accenture plc
+accenture
+
+// accountant : 2014-11-20 dot Accountant Limited
+accountant
+
+// accountants : 2014-03-20 Binky Moon, LLC
+accountants
+
+// aco : 2015-01-08 ACO Severin Ahlmann GmbH & Co. KG
+aco
+
+// actor : 2013-12-12 Dog Beach, LLC
+actor
+
+// adac : 2015-07-16 Allgemeiner Deutscher Automobil-Club e.V. (ADAC)
+adac
+
+// ads : 2014-12-04 Charleston Road Registry Inc.
+ads
+
+// adult : 2014-10-16 ICM Registry AD LLC
+adult
+
+// aeg : 2015-03-19 Aktiebolaget Electrolux
+aeg
+
+// aetna : 2015-05-21 Aetna Life Insurance Company
+aetna
+
+// afl : 2014-10-02 Australian Football League
+afl
+
+// africa : 2014-03-24 ZA Central Registry NPC trading as Registry.Africa
+africa
+
+// agakhan : 2015-04-23 Fondation Aga Khan (Aga Khan Foundation)
+agakhan
+
+// agency : 2013-11-14 Binky Moon, LLC
+agency
+
+// aig : 2014-12-18 American International Group, Inc.
+aig
+
+// airbus : 2015-07-30 Airbus S.A.S.
+airbus
+
+// airforce : 2014-03-06 Dog Beach, LLC
+airforce
+
+// airtel : 2014-10-24 Bharti Airtel Limited
+airtel
+
+// akdn : 2015-04-23 Fondation Aga Khan (Aga Khan Foundation)
+akdn
+
+// alfaromeo : 2015-07-31 Fiat Chrysler Automobiles N.V.
+alfaromeo
+
+// alibaba : 2015-01-15 Alibaba Group Holding Limited
+alibaba
+
+// alipay : 2015-01-15 Alibaba Group Holding Limited
+alipay
+
+// allfinanz : 2014-07-03 Allfinanz Deutsche Vermögensberatung Aktiengesellschaft
+allfinanz
+
+// allstate : 2015-07-31 Allstate Fire and Casualty Insurance Company
+allstate
+
+// ally : 2015-06-18 Ally Financial Inc.
+ally
+
+// alsace : 2014-07-02 Region Grand Est
+alsace
+
+// alstom : 2015-07-30 ALSTOM
+alstom
+
+// amazon : 2019-12-19 Amazon Registry Services, Inc.
+amazon
+
+// americanexpress : 2015-07-31 American Express Travel Related Services Company, Inc.
+americanexpress
+
+// americanfamily : 2015-07-23 AmFam, Inc.
+americanfamily
+
+// amex : 2015-07-31 American Express Travel Related Services Company, Inc.
+amex
+
+// amfam : 2015-07-23 AmFam, Inc.
+amfam
+
+// amica : 2015-05-28 Amica Mutual Insurance Company
+amica
+
+// amsterdam : 2014-07-24 Gemeente Amsterdam
+amsterdam
+
+// analytics : 2014-12-18 Campus IP LLC
+analytics
+
+// android : 2014-08-07 Charleston Road Registry Inc.
+android
+
+// anquan : 2015-01-08 Beijing Qihu Keji Co., Ltd.
+anquan
+
+// anz : 2015-07-31 Australia and New Zealand Banking Group Limited
+anz
+
+// aol : 2015-09-17 Oath Inc.
+aol
+
+// apartments : 2014-12-11 Binky Moon, LLC
+apartments
+
+// app : 2015-05-14 Charleston Road Registry Inc.
+app
+
+// apple : 2015-05-14 Apple Inc.
+apple
+
+// aquarelle : 2014-07-24 Aquarelle.com
+aquarelle
+
+// arab : 2015-11-12 League of Arab States
+arab
+
+// aramco : 2014-11-20 Aramco Services Company
+aramco
+
+// archi : 2014-02-06 Afilias Limited
+archi
+
+// army : 2014-03-06 Dog Beach, LLC
+army
+
+// art : 2016-03-24 UK Creative Ideas Limited
+art
+
+// arte : 2014-12-11 Association Relative à la Télévision Européenne G.E.I.E.
+arte
+
+// asda : 2015-07-31 Wal-Mart Stores, Inc.
+asda
+
+// associates : 2014-03-06 Binky Moon, LLC
+associates
+
+// athleta : 2015-07-30 The Gap, Inc.
+athleta
+
+// attorney : 2014-03-20 Dog Beach, LLC
+attorney
+
+// auction : 2014-03-20 Dog Beach, LLC
+auction
+
+// audi : 2015-05-21 AUDI Aktiengesellschaft
+audi
+
+// audible : 2015-06-25 Amazon Registry Services, Inc.
+audible
+
+// audio : 2014-03-20 XYZ.COM LLC
+audio
+
+// auspost : 2015-08-13 Australian Postal Corporation
+auspost
+
+// author : 2014-12-18 Amazon Registry Services, Inc.
+author
+
+// auto : 2014-11-13 XYZ.COM LLC
+auto
+
+// autos : 2014-01-09 XYZ.COM LLC
+autos
+
+// avianca : 2015-01-08 Avianca Holdings S.A.
+avianca
+
+// aws : 2015-06-25 AWS Registry LLC
+aws
+
+// axa : 2013-12-19 AXA Group Operations SAS
+axa
+
+// azure : 2014-12-18 Microsoft Corporation
+azure
+
+// baby : 2015-04-09 XYZ.COM LLC
+baby
+
+// baidu : 2015-01-08 Baidu, Inc.
+baidu
+
+// banamex : 2015-07-30 Citigroup Inc.
+banamex
+
+// bananarepublic : 2015-07-31 The Gap, Inc.
+bananarepublic
+
+// band : 2014-06-12 Dog Beach, LLC
+band
+
+// bank : 2014-09-25 fTLD Registry Services LLC
+bank
+
+// bar : 2013-12-12 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
+bar
+
+// barcelona : 2014-07-24 Municipi de Barcelona
+barcelona
+
+// barclaycard : 2014-11-20 Barclays Bank PLC
+barclaycard
+
+// barclays : 2014-11-20 Barclays Bank PLC
+barclays
+
+// barefoot : 2015-06-11 Gallo Vineyards, Inc.
+barefoot
+
+// bargains : 2013-11-14 Binky Moon, LLC
+bargains
+
+// baseball : 2015-10-29 MLB Advanced Media DH, LLC
+baseball
+
+// basketball : 2015-08-20 Fédération Internationale de Basketball (FIBA)
+basketball
+
+// bauhaus : 2014-04-17 Werkhaus GmbH
+bauhaus
+
+// bayern : 2014-01-23 Bayern Connect GmbH
+bayern
+
+// bbc : 2014-12-18 British Broadcasting Corporation
+bbc
+
+// bbt : 2015-07-23 BB&T Corporation
+bbt
+
+// bbva : 2014-10-02 BANCO BILBAO VIZCAYA ARGENTARIA, S.A.
+bbva
+
+// bcg : 2015-04-02 The Boston Consulting Group, Inc.
+bcg
+
+// bcn : 2014-07-24 Municipi de Barcelona
+bcn
+
+// beats : 2015-05-14 Beats Electronics, LLC
+beats
+
+// beauty : 2015-12-03 XYZ.COM LLC
+beauty
+
+// beer : 2014-01-09 Registry Services, LLC
+beer
+
+// bentley : 2014-12-18 Bentley Motors Limited
+bentley
+
+// berlin : 2013-10-31 dotBERLIN GmbH & Co. KG
+berlin
+
+// best : 2013-12-19 BestTLD Pty Ltd
+best
+
+// bestbuy : 2015-07-31 BBY Solutions, Inc.
+bestbuy
+
+// bet : 2015-05-07 Afilias Limited
+bet
+
+// bharti : 2014-01-09 Bharti Enterprises (Holding) Private Limited
+bharti
+
+// bible : 2014-06-19 American Bible Society
+bible
+
+// bid : 2013-12-19 dot Bid Limited
+bid
+
+// bike : 2013-08-27 Binky Moon, LLC
+bike
+
+// bing : 2014-12-18 Microsoft Corporation
+bing
+
+// bingo : 2014-12-04 Binky Moon, LLC
+bingo
+
+// bio : 2014-03-06 Afilias Limited
+bio
+
+// black : 2014-01-16 Afilias Limited
+black
+
+// blackfriday : 2014-01-16 UNR Corp.
+blackfriday
+
+// blockbuster : 2015-07-30 Dish DBS Corporation
+blockbuster
+
+// blog : 2015-05-14 Knock Knock WHOIS There, LLC
+blog
+
+// bloomberg : 2014-07-17 Bloomberg IP Holdings LLC
+bloomberg
+
+// blue : 2013-11-07 Afilias Limited
+blue
+
+// bms : 2014-10-30 Bristol-Myers Squibb Company
+bms
+
+// bmw : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft
+bmw
+
+// bnpparibas : 2014-05-29 BNP Paribas
+bnpparibas
+
+// boats : 2014-12-04 XYZ.COM LLC
+boats
+
+// boehringer : 2015-07-09 Boehringer Ingelheim International GmbH
+boehringer
+
+// bofa : 2015-07-31 Bank of America Corporation
+bofa
+
+// bom : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br
+bom
+
+// bond : 2014-06-05 ShortDot SA
+bond
+
+// boo : 2014-01-30 Charleston Road Registry Inc.
+boo
+
+// book : 2015-08-27 Amazon Registry Services, Inc.
+book
+
+// booking : 2015-07-16 Booking.com B.V.
+booking
+
+// bosch : 2015-06-18 Robert Bosch GMBH
+bosch
+
+// bostik : 2015-05-28 Bostik SA
+bostik
+
+// boston : 2015-12-10 Registry Services, LLC
+boston
+
+// bot : 2014-12-18 Amazon Registry Services, Inc.
+bot
+
+// boutique : 2013-11-14 Binky Moon, LLC
+boutique
+
+// box : 2015-11-12 Intercap Registry Inc.
+box
+
+// bradesco : 2014-12-18 Banco Bradesco S.A.
+bradesco
+
+// bridgestone : 2014-12-18 Bridgestone Corporation
+bridgestone
+
+// broadway : 2014-12-22 Celebrate Broadway, Inc.
+broadway
+
+// broker : 2014-12-11 Dog Beach, LLC
+broker
+
+// brother : 2015-01-29 Brother Industries, Ltd.
+brother
+
+// brussels : 2014-02-06 DNS.be vzw
+brussels
+
+// bugatti : 2015-07-23 Bugatti International SA
+bugatti
+
+// build : 2013-11-07 Plan Bee LLC
+build
+
+// builders : 2013-11-07 Binky Moon, LLC
+builders
+
+// business : 2013-11-07 Binky Moon, LLC
+business
+
+// buy : 2014-12-18 Amazon Registry Services, Inc.
+buy
+
+// buzz : 2013-10-02 DOTSTRATEGY CO.
+buzz
+
+// bzh : 2014-02-27 Association www.bzh
+bzh
+
+// cab : 2013-10-24 Binky Moon, LLC
+cab
+
+// cafe : 2015-02-11 Binky Moon, LLC
+cafe
+
+// cal : 2014-07-24 Charleston Road Registry Inc.
+cal
+
+// call : 2014-12-18 Amazon Registry Services, Inc.
+call
+
+// calvinklein : 2015-07-30 PVH gTLD Holdings LLC
+calvinklein
+
+// cam : 2016-04-21 Cam Connecting SARL
+cam
+
+// camera : 2013-08-27 Binky Moon, LLC
+camera
+
+// camp : 2013-11-07 Binky Moon, LLC
+camp
+
+// cancerresearch : 2014-05-15 Australian Cancer Research Foundation
+cancerresearch
+
+// canon : 2014-09-12 Canon Inc.
+canon
+
+// capetown : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry
+capetown
+
+// capital : 2014-03-06 Binky Moon, LLC
+capital
+
+// capitalone : 2015-08-06 Capital One Financial Corporation
+capitalone
+
+// car : 2015-01-22 XYZ.COM LLC
+car
+
+// caravan : 2013-12-12 Caravan International, Inc.
+caravan
+
+// cards : 2013-12-05 Binky Moon, LLC
+cards
+
+// care : 2014-03-06 Binky Moon, LLC
+care
+
+// career : 2013-10-09 dotCareer LLC
+career
+
+// careers : 2013-10-02 Binky Moon, LLC
+careers
+
+// cars : 2014-11-13 XYZ.COM LLC
+cars
+
+// casa : 2013-11-21 Registry Services, LLC
+casa
+
+// case : 2015-09-03 Helium TLDs Ltd
+case
+
+// cash : 2014-03-06 Binky Moon, LLC
+cash
+
+// casino : 2014-12-18 Binky Moon, LLC
+casino
+
+// catering : 2013-12-05 Binky Moon, LLC
+catering
+
+// catholic : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+catholic
+
+// cba : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA
+cba
+
+// cbn : 2014-08-22 The Christian Broadcasting Network, Inc.
+cbn
+
+// cbre : 2015-07-02 CBRE, Inc.
+cbre
+
+// cbs : 2015-08-06 CBS Domains Inc.
+cbs
+
+// center : 2013-11-07 Binky Moon, LLC
+center
+
+// ceo : 2013-11-07 CEOTLD Pty Ltd
+ceo
+
+// cern : 2014-06-05 European Organization for Nuclear Research ("CERN")
+cern
+
+// cfa : 2014-08-28 CFA Institute
+cfa
+
+// cfd : 2014-12-11 ShortDot SA
+cfd
+
+// chanel : 2015-04-09 Chanel International B.V.
+chanel
+
+// channel : 2014-05-08 Charleston Road Registry Inc.
+channel
+
+// charity : 2018-04-11 Binky Moon, LLC
+charity
+
+// chase : 2015-04-30 JPMorgan Chase Bank, National Association
+chase
+
+// chat : 2014-12-04 Binky Moon, LLC
+chat
+
+// cheap : 2013-11-14 Binky Moon, LLC
+cheap
+
+// chintai : 2015-06-11 CHINTAI Corporation
+chintai
+
+// christmas : 2013-11-21 XYZ.COM LLC
+christmas
+
+// chrome : 2014-07-24 Charleston Road Registry Inc.
+chrome
+
+// church : 2014-02-06 Binky Moon, LLC
+church
+
+// cipriani : 2015-02-19 Hotel Cipriani Srl
+cipriani
+
+// circle : 2014-12-18 Amazon Registry Services, Inc.
+circle
+
+// cisco : 2014-12-22 Cisco Technology, Inc.
+cisco
+
+// citadel : 2015-07-23 Citadel Domain LLC
+citadel
+
+// citi : 2015-07-30 Citigroup Inc.
+citi
+
+// citic : 2014-01-09 CITIC Group Corporation
+citic
+
+// city : 2014-05-29 Binky Moon, LLC
+city
+
+// cityeats : 2014-12-11 Lifestyle Domain Holdings, Inc.
+cityeats
+
+// claims : 2014-03-20 Binky Moon, LLC
+claims
+
+// cleaning : 2013-12-05 Binky Moon, LLC
+cleaning
+
+// click : 2014-06-05 UNR Corp.
+click
+
+// clinic : 2014-03-20 Binky Moon, LLC
+clinic
+
+// clinique : 2015-10-01 The Estée Lauder Companies Inc.
+clinique
+
+// clothing : 2013-08-27 Binky Moon, LLC
+clothing
+
+// cloud : 2015-04-16 Aruba PEC S.p.A.
+cloud
+
+// club : 2013-11-08 Registry Services, LLC
+club
+
+// clubmed : 2015-06-25 Club Méditerranée S.A.
+clubmed
+
+// coach : 2014-10-09 Binky Moon, LLC
+coach
+
+// codes : 2013-10-31 Binky Moon, LLC
+codes
+
+// coffee : 2013-10-17 Binky Moon, LLC
+coffee
+
+// college : 2014-01-16 XYZ.COM LLC
+college
+
+// cologne : 2014-02-05 dotKoeln GmbH
+cologne
+
+// comcast : 2015-07-23 Comcast IP Holdings I, LLC
+comcast
+
+// commbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA
+commbank
+
+// community : 2013-12-05 Binky Moon, LLC
+community
+
+// company : 2013-11-07 Binky Moon, LLC
+company
+
+// compare : 2015-10-08 Registry Services, LLC
+compare
+
+// computer : 2013-10-24 Binky Moon, LLC
+computer
+
+// comsec : 2015-01-08 VeriSign, Inc.
+comsec
+
+// condos : 2013-12-05 Binky Moon, LLC
+condos
+
+// construction : 2013-09-16 Binky Moon, LLC
+construction
+
+// consulting : 2013-12-05 Dog Beach, LLC
+consulting
+
+// contact : 2015-01-08 Dog Beach, LLC
+contact
+
+// contractors : 2013-09-10 Binky Moon, LLC
+contractors
+
+// cooking : 2013-11-21 Registry Services, LLC
+cooking
+
+// cookingchannel : 2015-07-02 Lifestyle Domain Holdings, Inc.
+cookingchannel
+
+// cool : 2013-11-14 Binky Moon, LLC
+cool
+
+// corsica : 2014-09-25 Collectivité de Corse
+corsica
+
+// country : 2013-12-19 DotCountry LLC
+country
+
+// coupon : 2015-02-26 Amazon Registry Services, Inc.
+coupon
+
+// coupons : 2015-03-26 Binky Moon, LLC
+coupons
+
+// courses : 2014-12-04 OPEN UNIVERSITIES AUSTRALIA PTY LTD
+courses
+
+// cpa : 2019-06-10 American Institute of Certified Public Accountants
+cpa
+
+// credit : 2014-03-20 Binky Moon, LLC
+credit
+
+// creditcard : 2014-03-20 Binky Moon, LLC
+creditcard
+
+// creditunion : 2015-01-22 DotCooperation LLC
+creditunion
+
+// cricket : 2014-10-09 dot Cricket Limited
+cricket
+
+// crown : 2014-10-24 Crown Equipment Corporation
+crown
+
+// crs : 2014-04-03 Federated Co-operatives Limited
+crs
+
+// cruise : 2015-12-10 Viking River Cruises (Bermuda) Ltd.
+cruise
+
+// cruises : 2013-12-05 Binky Moon, LLC
+cruises
+
+// cuisinella : 2014-04-03 SCHMIDT GROUPE S.A.S.
+cuisinella
+
+// cymru : 2014-05-08 Nominet UK
+cymru
+
+// cyou : 2015-01-22 ShortDot SA
+cyou
+
+// dabur : 2014-02-06 Dabur India Limited
+dabur
+
+// dad : 2014-01-23 Charleston Road Registry Inc.
+dad
+
+// dance : 2013-10-24 Dog Beach, LLC
+dance
+
+// data : 2016-06-02 Dish DBS Corporation
+data
+
+// date : 2014-11-20 dot Date Limited
+date
+
+// dating : 2013-12-05 Binky Moon, LLC
+dating
+
+// datsun : 2014-03-27 NISSAN MOTOR CO., LTD.
+datsun
+
+// day : 2014-01-30 Charleston Road Registry Inc.
+day
+
+// dclk : 2014-11-20 Charleston Road Registry Inc.
+dclk
+
+// dds : 2015-05-07 Registry Services, LLC
+dds
+
+// deal : 2015-06-25 Amazon Registry Services, Inc.
+deal
+
+// dealer : 2014-12-22 Intercap Registry Inc.
+dealer
+
+// deals : 2014-05-22 Binky Moon, LLC
+deals
+
+// degree : 2014-03-06 Dog Beach, LLC
+degree
+
+// delivery : 2014-09-11 Binky Moon, LLC
+delivery
+
+// dell : 2014-10-24 Dell Inc.
+dell
+
+// deloitte : 2015-07-31 Deloitte Touche Tohmatsu
+deloitte
+
+// delta : 2015-02-19 Delta Air Lines, Inc.
+delta
+
+// democrat : 2013-10-24 Dog Beach, LLC
+democrat
+
+// dental : 2014-03-20 Binky Moon, LLC
+dental
+
+// dentist : 2014-03-20 Dog Beach, LLC
+dentist
+
+// desi : 2013-11-14 Desi Networks LLC
+desi
+
+// design : 2014-11-07 Registry Services, LLC
+design
+
+// dev : 2014-10-16 Charleston Road Registry Inc.
+dev
+
+// dhl : 2015-07-23 Deutsche Post AG
+dhl
+
+// diamonds : 2013-09-22 Binky Moon, LLC
+diamonds
+
+// diet : 2014-06-26 XYZ.COM LLC
+diet
+
+// digital : 2014-03-06 Binky Moon, LLC
+digital
+
+// direct : 2014-04-10 Binky Moon, LLC
+direct
+
+// directory : 2013-09-20 Binky Moon, LLC
+directory
+
+// discount : 2014-03-06 Binky Moon, LLC
+discount
+
+// discover : 2015-07-23 Discover Financial Services
+discover
+
+// dish : 2015-07-30 Dish DBS Corporation
+dish
+
+// diy : 2015-11-05 Lifestyle Domain Holdings, Inc.
+diy
+
+// dnp : 2013-12-13 Dai Nippon Printing Co., Ltd.
+dnp
+
+// docs : 2014-10-16 Charleston Road Registry Inc.
+docs
+
+// doctor : 2016-06-02 Binky Moon, LLC
+doctor
+
+// dog : 2014-12-04 Binky Moon, LLC
+dog
+
+// domains : 2013-10-17 Binky Moon, LLC
+domains
+
+// dot : 2015-05-21 Dish DBS Corporation
+dot
+
+// download : 2014-11-20 dot Support Limited
+download
+
+// drive : 2015-03-05 Charleston Road Registry Inc.
+drive
+
+// dtv : 2015-06-04 Dish DBS Corporation
+dtv
+
+// dubai : 2015-01-01 Dubai Smart Government Department
+dubai
+
+// dunlop : 2015-07-02 The Goodyear Tire & Rubber Company
+dunlop
+
+// dupont : 2015-06-25 DuPont Specialty Products USA, LLC
+dupont
+
+// durban : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry
+durban
+
+// dvag : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG
+dvag
+
+// dvr : 2016-05-26 DISH Technologies L.L.C.
+dvr
+
+// earth : 2014-12-04 Interlink Co., Ltd.
+earth
+
+// eat : 2014-01-23 Charleston Road Registry Inc.
+eat
+
+// eco : 2016-07-08 Big Room Inc.
+eco
+
+// edeka : 2014-12-18 EDEKA Verband kaufmännischer Genossenschaften e.V.
+edeka
+
+// education : 2013-11-07 Binky Moon, LLC
+education
+
+// email : 2013-10-31 Binky Moon, LLC
+email
+
+// emerck : 2014-04-03 Merck KGaA
+emerck
+
+// energy : 2014-09-11 Binky Moon, LLC
+energy
+
+// engineer : 2014-03-06 Dog Beach, LLC
+engineer
+
+// engineering : 2014-03-06 Binky Moon, LLC
+engineering
+
+// enterprises : 2013-09-20 Binky Moon, LLC
+enterprises
+
+// epson : 2014-12-04 Seiko Epson Corporation
+epson
+
+// equipment : 2013-08-27 Binky Moon, LLC
+equipment
+
+// ericsson : 2015-07-09 Telefonaktiebolaget L M Ericsson
+ericsson
+
+// erni : 2014-04-03 ERNI Group Holding AG
+erni
+
+// esq : 2014-05-08 Charleston Road Registry Inc.
+esq
+
+// estate : 2013-08-27 Binky Moon, LLC
+estate
+
+// etisalat : 2015-09-03 Emirates Telecommunications Corporation (trading as Etisalat)
+etisalat
+
+// eurovision : 2014-04-24 European Broadcasting Union (EBU)
+eurovision
+
+// eus : 2013-12-12 Puntueus Fundazioa
+eus
+
+// events : 2013-12-05 Binky Moon, LLC
+events
+
+// exchange : 2014-03-06 Binky Moon, LLC
+exchange
+
+// expert : 2013-11-21 Binky Moon, LLC
+expert
+
+// exposed : 2013-12-05 Binky Moon, LLC
+exposed
+
+// express : 2015-02-11 Binky Moon, LLC
+express
+
+// extraspace : 2015-05-14 Extra Space Storage LLC
+extraspace
+
+// fage : 2014-12-18 Fage International S.A.
+fage
+
+// fail : 2014-03-06 Binky Moon, LLC
+fail
+
+// fairwinds : 2014-11-13 FairWinds Partners, LLC
+fairwinds
+
+// faith : 2014-11-20 dot Faith Limited
+faith
+
+// family : 2015-04-02 Dog Beach, LLC
+family
+
+// fan : 2014-03-06 Dog Beach, LLC
+fan
+
+// fans : 2014-11-07 ZDNS International Limited
+fans
+
+// farm : 2013-11-07 Binky Moon, LLC
+farm
+
+// farmers : 2015-07-09 Farmers Insurance Exchange
+farmers
+
+// fashion : 2014-07-03 Registry Services, LLC
+fashion
+
+// fast : 2014-12-18 Amazon Registry Services, Inc.
+fast
+
+// fedex : 2015-08-06 Federal Express Corporation
+fedex
+
+// feedback : 2013-12-19 Top Level Spectrum, Inc.
+feedback
+
+// ferrari : 2015-07-31 Fiat Chrysler Automobiles N.V.
+ferrari
+
+// ferrero : 2014-12-18 Ferrero Trading Lux S.A.
+ferrero
+
+// fiat : 2015-07-31 Fiat Chrysler Automobiles N.V.
+fiat
+
+// fidelity : 2015-07-30 Fidelity Brokerage Services LLC
+fidelity
+
+// fido : 2015-08-06 Rogers Communications Canada Inc.
+fido
+
+// film : 2015-01-08 Motion Picture Domain Registry Pty Ltd
+film
+
+// final : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br
+final
+
+// finance : 2014-03-20 Binky Moon, LLC
+finance
+
+// financial : 2014-03-06 Binky Moon, LLC
+financial
+
+// fire : 2015-06-25 Amazon Registry Services, Inc.
+fire
+
+// firestone : 2014-12-18 Bridgestone Licensing Services, Inc
+firestone
+
+// firmdale : 2014-03-27 Firmdale Holdings Limited
+firmdale
+
+// fish : 2013-12-12 Binky Moon, LLC
+fish
+
+// fishing : 2013-11-21 Registry Services, LLC
+fishing
+
+// fit : 2014-11-07 Registry Services, LLC
+fit
+
+// fitness : 2014-03-06 Binky Moon, LLC
+fitness
+
+// flickr : 2015-04-02 Flickr, Inc.
+flickr
+
+// flights : 2013-12-05 Binky Moon, LLC
+flights
+
+// flir : 2015-07-23 FLIR Systems, Inc.
+flir
+
+// florist : 2013-11-07 Binky Moon, LLC
+florist
+
+// flowers : 2014-10-09 XYZ.COM LLC
+flowers
+
+// fly : 2014-05-08 Charleston Road Registry Inc.
+fly
+
+// foo : 2014-01-23 Charleston Road Registry Inc.
+foo
+
+// food : 2016-04-21 Lifestyle Domain Holdings, Inc.
+food
+
+// foodnetwork : 2015-07-02 Lifestyle Domain Holdings, Inc.
+foodnetwork
+
+// football : 2014-12-18 Binky Moon, LLC
+football
+
+// ford : 2014-11-13 Ford Motor Company
+ford
+
+// forex : 2014-12-11 Dog Beach, LLC
+forex
+
+// forsale : 2014-05-22 Dog Beach, LLC
+forsale
+
+// forum : 2015-04-02 Fegistry, LLC
+forum
+
+// foundation : 2013-12-05 Binky Moon, LLC
+foundation
+
+// fox : 2015-09-11 FOX Registry, LLC
+fox
+
+// free : 2015-12-10 Amazon Registry Services, Inc.
+free
+
+// fresenius : 2015-07-30 Fresenius Immobilien-Verwaltungs-GmbH
+fresenius
+
+// frl : 2014-05-15 FRLregistry B.V.
+frl
+
+// frogans : 2013-12-19 OP3FT
+frogans
+
+// frontdoor : 2015-07-02 Lifestyle Domain Holdings, Inc.
+frontdoor
+
+// frontier : 2015-02-05 Frontier Communications Corporation
+frontier
+
+// ftr : 2015-07-16 Frontier Communications Corporation
+ftr
+
+// fujitsu : 2015-07-30 Fujitsu Limited
+fujitsu
+
+// fun : 2016-01-14 Radix FZC
+fun
+
+// fund : 2014-03-20 Binky Moon, LLC
+fund
+
+// furniture : 2014-03-20 Binky Moon, LLC
+furniture
+
+// futbol : 2013-09-20 Dog Beach, LLC
+futbol
+
+// fyi : 2015-04-02 Binky Moon, LLC
+fyi
+
+// gal : 2013-11-07 Asociación puntoGAL
+gal
+
+// gallery : 2013-09-13 Binky Moon, LLC
+gallery
+
+// gallo : 2015-06-11 Gallo Vineyards, Inc.
+gallo
+
+// gallup : 2015-02-19 Gallup, Inc.
+gallup
+
+// game : 2015-05-28 XYZ.COM LLC
+game
+
+// games : 2015-05-28 Dog Beach, LLC
+games
+
+// gap : 2015-07-31 The Gap, Inc.
+gap
+
+// garden : 2014-06-26 Registry Services, LLC
+garden
+
+// gay : 2019-05-23 Top Level Design, LLC
+gay
+
+// gbiz : 2014-07-17 Charleston Road Registry Inc.
+gbiz
+
+// gdn : 2014-07-31 Joint Stock Company "Navigation-information systems"
+gdn
+
+// gea : 2014-12-04 GEA Group Aktiengesellschaft
+gea
+
+// gent : 2014-01-23 COMBELL NV
+gent
+
+// genting : 2015-03-12 Resorts World Inc Pte. Ltd.
+genting
+
+// george : 2015-07-31 Wal-Mart Stores, Inc.
+george
+
+// ggee : 2014-01-09 GMO Internet, Inc.
+ggee
+
+// gift : 2013-10-17 DotGift, LLC
+gift
+
+// gifts : 2014-07-03 Binky Moon, LLC
+gifts
+
+// gives : 2014-03-06 Dog Beach, LLC
+gives
+
+// giving : 2014-11-13 Giving Limited
+giving
+
+// glass : 2013-11-07 Binky Moon, LLC
+glass
+
+// gle : 2014-07-24 Charleston Road Registry Inc.
+gle
+
+// global : 2014-04-17 Dot Global Domain Registry Limited
+global
+
+// globo : 2013-12-19 Globo Comunicação e Participações S.A
+globo
+
+// gmail : 2014-05-01 Charleston Road Registry Inc.
+gmail
+
+// gmbh : 2016-01-29 Binky Moon, LLC
+gmbh
+
+// gmo : 2014-01-09 GMO Internet, Inc.
+gmo
+
+// gmx : 2014-04-24 1&1 Mail & Media GmbH
+gmx
+
+// godaddy : 2015-07-23 Go Daddy East, LLC
+godaddy
+
+// gold : 2015-01-22 Binky Moon, LLC
+gold
+
+// goldpoint : 2014-11-20 YODOBASHI CAMERA CO.,LTD.
+goldpoint
+
+// golf : 2014-12-18 Binky Moon, LLC
+golf
+
+// goo : 2014-12-18 NTT Resonant Inc.
+goo
+
+// goodyear : 2015-07-02 The Goodyear Tire & Rubber Company
+goodyear
+
+// goog : 2014-11-20 Charleston Road Registry Inc.
+goog
+
+// google : 2014-07-24 Charleston Road Registry Inc.
+google
+
+// gop : 2014-01-16 Republican State Leadership Committee, Inc.
+gop
+
+// got : 2014-12-18 Amazon Registry Services, Inc.
+got
+
+// grainger : 2015-05-07 Grainger Registry Services, LLC
+grainger
+
+// graphics : 2013-09-13 Binky Moon, LLC
+graphics
+
+// gratis : 2014-03-20 Binky Moon, LLC
+gratis
+
+// green : 2014-05-08 Afilias Limited
+green
+
+// gripe : 2014-03-06 Binky Moon, LLC
+gripe
+
+// grocery : 2016-06-16 Wal-Mart Stores, Inc.
+grocery
+
+// group : 2014-08-15 Binky Moon, LLC
+group
+
+// guardian : 2015-07-30 The Guardian Life Insurance Company of America
+guardian
+
+// gucci : 2014-11-13 Guccio Gucci S.p.a.
+gucci
+
+// guge : 2014-08-28 Charleston Road Registry Inc.
+guge
+
+// guide : 2013-09-13 Binky Moon, LLC
+guide
+
+// guitars : 2013-11-14 XYZ.COM LLC
+guitars
+
+// guru : 2013-08-27 Binky Moon, LLC
+guru
+
+// hair : 2015-12-03 XYZ.COM LLC
+hair
+
+// hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH
+hamburg
+
+// hangout : 2014-11-13 Charleston Road Registry Inc.
+hangout
+
+// haus : 2013-12-05 Dog Beach, LLC
+haus
+
+// hbo : 2015-07-30 HBO Registry Services, Inc.
+hbo
+
+// hdfc : 2015-07-30 HOUSING DEVELOPMENT FINANCE CORPORATION LIMITED
+hdfc
+
+// hdfcbank : 2015-02-12 HDFC Bank Limited
+hdfcbank
+
+// health : 2015-02-11 DotHealth, LLC
+health
+
+// healthcare : 2014-06-12 Binky Moon, LLC
+healthcare
+
+// help : 2014-06-26 UNR Corp.
+help
+
+// helsinki : 2015-02-05 City of Helsinki
+helsinki
+
+// here : 2014-02-06 Charleston Road Registry Inc.
+here
+
+// hermes : 2014-07-10 HERMES INTERNATIONAL
+hermes
+
+// hgtv : 2015-07-02 Lifestyle Domain Holdings, Inc.
+hgtv
+
+// hiphop : 2014-03-06 Dot Hip Hop, LLC
+hiphop
+
+// hisamitsu : 2015-07-16 Hisamitsu Pharmaceutical Co.,Inc.
+hisamitsu
+
+// hitachi : 2014-10-31 Hitachi, Ltd.
+hitachi
+
+// hiv : 2014-03-13 UNR Corp.
+hiv
+
+// hkt : 2015-05-14 PCCW-HKT DataCom Services Limited
+hkt
+
+// hockey : 2015-03-19 Binky Moon, LLC
+hockey
+
+// holdings : 2013-08-27 Binky Moon, LLC
+holdings
+
+// holiday : 2013-11-07 Binky Moon, LLC
+holiday
+
+// homedepot : 2015-04-02 Home Depot Product Authority, LLC
+homedepot
+
+// homegoods : 2015-07-16 The TJX Companies, Inc.
+homegoods
+
+// homes : 2014-01-09 XYZ.COM LLC
+homes
+
+// homesense : 2015-07-16 The TJX Companies, Inc.
+homesense
+
+// honda : 2014-12-18 Honda Motor Co., Ltd.
+honda
+
+// horse : 2013-11-21 Registry Services, LLC
+horse
+
+// hospital : 2016-10-20 Binky Moon, LLC
+hospital
+
+// host : 2014-04-17 Radix FZC
+host
+
+// hosting : 2014-05-29 XYZ.COM LLC
+hosting
+
+// hot : 2015-08-27 Amazon Registry Services, Inc.
+hot
+
+// hoteles : 2015-03-05 Travel Reservations SRL
+hoteles
+
+// hotels : 2016-04-07 Booking.com B.V.
+hotels
+
+// hotmail : 2014-12-18 Microsoft Corporation
+hotmail
+
+// house : 2013-11-07 Binky Moon, LLC
+house
+
+// how : 2014-01-23 Charleston Road Registry Inc.
+how
+
+// hsbc : 2014-10-24 HSBC Global Services (UK) Limited
+hsbc
+
+// hughes : 2015-07-30 Hughes Satellite Systems Corporation
+hughes
+
+// hyatt : 2015-07-30 Hyatt GTLD, L.L.C.
+hyatt
+
+// hyundai : 2015-07-09 Hyundai Motor Company
+hyundai
+
+// ibm : 2014-07-31 International Business Machines Corporation
+ibm
+
+// icbc : 2015-02-19 Industrial and Commercial Bank of China Limited
+icbc
+
+// ice : 2014-10-30 IntercontinentalExchange, Inc.
+ice
+
+// icu : 2015-01-08 ShortDot SA
+icu
+
+// ieee : 2015-07-23 IEEE Global LLC
+ieee
+
+// ifm : 2014-01-30 ifm electronic gmbh
+ifm
+
+// ikano : 2015-07-09 Ikano S.A.
+ikano
+
+// imamat : 2015-08-06 Fondation Aga Khan (Aga Khan Foundation)
+imamat
+
+// imdb : 2015-06-25 Amazon Registry Services, Inc.
+imdb
+
+// immo : 2014-07-10 Binky Moon, LLC
+immo
+
+// immobilien : 2013-11-07 Dog Beach, LLC
+immobilien
+
+// inc : 2018-03-10 Intercap Registry Inc.
+inc
+
+// industries : 2013-12-05 Binky Moon, LLC
+industries
+
+// infiniti : 2014-03-27 NISSAN MOTOR CO., LTD.
+infiniti
+
+// ing : 2014-01-23 Charleston Road Registry Inc.
+ing
+
+// ink : 2013-12-05 Top Level Design, LLC
+ink
+
+// institute : 2013-11-07 Binky Moon, LLC
+institute
+
+// insurance : 2015-02-19 fTLD Registry Services LLC
+insurance
+
+// insure : 2014-03-20 Binky Moon, LLC
+insure
+
+// international : 2013-11-07 Binky Moon, LLC
+international
+
+// intuit : 2015-07-30 Intuit Administrative Services, Inc.
+intuit
+
+// investments : 2014-03-20 Binky Moon, LLC
+investments
+
+// ipiranga : 2014-08-28 Ipiranga Produtos de Petroleo S.A.
+ipiranga
+
+// irish : 2014-08-07 Binky Moon, LLC
+irish
+
+// ismaili : 2015-08-06 Fondation Aga Khan (Aga Khan Foundation)
+ismaili
+
+// ist : 2014-08-28 Istanbul Metropolitan Municipality
+ist
+
+// istanbul : 2014-08-28 Istanbul Metropolitan Municipality
+istanbul
+
+// itau : 2014-10-02 Itau Unibanco Holding S.A.
+itau
+
+// itv : 2015-07-09 ITV Services Limited
+itv
+
+// jaguar : 2014-11-13 Jaguar Land Rover Ltd
+jaguar
+
+// java : 2014-06-19 Oracle Corporation
+java
+
+// jcb : 2014-11-20 JCB Co., Ltd.
+jcb
+
+// jeep : 2015-07-30 FCA US LLC.
+jeep
+
+// jetzt : 2014-01-09 Binky Moon, LLC
+jetzt
+
+// jewelry : 2015-03-05 Binky Moon, LLC
+jewelry
+
+// jio : 2015-04-02 Reliance Industries Limited
+jio
+
+// jll : 2015-04-02 Jones Lang LaSalle Incorporated
+jll
+
+// jmp : 2015-03-26 Matrix IP LLC
+jmp
+
+// jnj : 2015-06-18 Johnson & Johnson Services, Inc.
+jnj
+
+// joburg : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry
+joburg
+
+// jot : 2014-12-18 Amazon Registry Services, Inc.
+jot
+
+// joy : 2014-12-18 Amazon Registry Services, Inc.
+joy
+
+// jpmorgan : 2015-04-30 JPMorgan Chase Bank, National Association
+jpmorgan
+
+// jprs : 2014-09-18 Japan Registry Services Co., Ltd.
+jprs
+
+// juegos : 2014-03-20 UNR Corp.
+juegos
+
+// juniper : 2015-07-30 JUNIPER NETWORKS, INC.
+juniper
+
+// kaufen : 2013-11-07 Dog Beach, LLC
+kaufen
+
+// kddi : 2014-09-12 KDDI CORPORATION
+kddi
+
+// kerryhotels : 2015-04-30 Kerry Trading Co. Limited
+kerryhotels
+
+// kerrylogistics : 2015-04-09 Kerry Trading Co. Limited
+kerrylogistics
+
+// kerryproperties : 2015-04-09 Kerry Trading Co. Limited
+kerryproperties
+
+// kfh : 2014-12-04 Kuwait Finance House
+kfh
+
+// kia : 2015-07-09 KIA MOTORS CORPORATION
+kia
+
+// kids : 2021-08-13 DotKids Foundation Limited
+kids
+
+// kim : 2013-09-23 Afilias Limited
+kim
+
+// kinder : 2014-11-07 Ferrero Trading Lux S.A.
+kinder
+
+// kindle : 2015-06-25 Amazon Registry Services, Inc.
+kindle
+
+// kitchen : 2013-09-20 Binky Moon, LLC
+kitchen
+
+// kiwi : 2013-09-20 DOT KIWI LIMITED
+kiwi
+
+// koeln : 2014-01-09 dotKoeln GmbH
+koeln
+
+// komatsu : 2015-01-08 Komatsu Ltd.
+komatsu
+
+// kosher : 2015-08-20 Kosher Marketing Assets LLC
+kosher
+
+// kpmg : 2015-04-23 KPMG International Cooperative (KPMG International Genossenschaft)
+kpmg
+
+// kpn : 2015-01-08 Koninklijke KPN N.V.
+kpn
+
+// krd : 2013-12-05 KRG Department of Information Technology
+krd
+
+// kred : 2013-12-19 KredTLD Pty Ltd
+kred
+
+// kuokgroup : 2015-04-09 Kerry Trading Co. Limited
+kuokgroup
+
+// kyoto : 2014-11-07 Academic Institution: Kyoto Jyoho Gakuen
+kyoto
+
+// lacaixa : 2014-01-09 Fundación Bancaria Caixa d’Estalvis i Pensions de Barcelona, “la Caixa”
+lacaixa
+
+// lamborghini : 2015-06-04 Automobili Lamborghini S.p.A.
+lamborghini
+
+// lamer : 2015-10-01 The Estée Lauder Companies Inc.
+lamer
+
+// lancaster : 2015-02-12 LANCASTER
+lancaster
+
+// lancia : 2015-07-31 Fiat Chrysler Automobiles N.V.
+lancia
+
+// land : 2013-09-10 Binky Moon, LLC
+land
+
+// landrover : 2014-11-13 Jaguar Land Rover Ltd
+landrover
+
+// lanxess : 2015-07-30 LANXESS Corporation
+lanxess
+
+// lasalle : 2015-04-02 Jones Lang LaSalle Incorporated
+lasalle
+
+// lat : 2014-10-16 ECOM-LAC Federaciòn de Latinoamèrica y el Caribe para Internet y el Comercio Electrònico
+lat
+
+// latino : 2015-07-30 Dish DBS Corporation
+latino
+
+// latrobe : 2014-06-16 La Trobe University
+latrobe
+
+// law : 2015-01-22 Registry Services, LLC
+law
+
+// lawyer : 2014-03-20 Dog Beach, LLC
+lawyer
+
+// lds : 2014-03-20 IRI Domain Management, LLC
+lds
+
+// lease : 2014-03-06 Binky Moon, LLC
+lease
+
+// leclerc : 2014-08-07 A.C.D. LEC Association des Centres Distributeurs Edouard Leclerc
+leclerc
+
+// lefrak : 2015-07-16 LeFrak Organization, Inc.
+lefrak
+
+// legal : 2014-10-16 Binky Moon, LLC
+legal
+
+// lego : 2015-07-16 LEGO Juris A/S
+lego
+
+// lexus : 2015-04-23 TOYOTA MOTOR CORPORATION
+lexus
+
+// lgbt : 2014-05-08 Afilias Limited
+lgbt
+
+// lidl : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG
+lidl
+
+// life : 2014-02-06 Binky Moon, LLC
+life
+
+// lifeinsurance : 2015-01-15 American Council of Life Insurers
+lifeinsurance
+
+// lifestyle : 2014-12-11 Lifestyle Domain Holdings, Inc.
+lifestyle
+
+// lighting : 2013-08-27 Binky Moon, LLC
+lighting
+
+// like : 2014-12-18 Amazon Registry Services, Inc.
+like
+
+// lilly : 2015-07-31 Eli Lilly and Company
+lilly
+
+// limited : 2014-03-06 Binky Moon, LLC
+limited
+
+// limo : 2013-10-17 Binky Moon, LLC
+limo
+
+// lincoln : 2014-11-13 Ford Motor Company
+lincoln
+
+// linde : 2014-12-04 Linde Aktiengesellschaft
+linde
+
+// link : 2013-11-14 UNR Corp.
+link
+
+// lipsy : 2015-06-25 Lipsy Ltd
+lipsy
+
+// live : 2014-12-04 Dog Beach, LLC
+live
+
+// living : 2015-07-30 Lifestyle Domain Holdings, Inc.
+living
+
+// llc : 2017-12-14 Afilias Limited
+llc
+
+// llp : 2019-08-26 UNR Corp.
+llp
+
+// loan : 2014-11-20 dot Loan Limited
+loan
+
+// loans : 2014-03-20 Binky Moon, LLC
+loans
+
+// locker : 2015-06-04 Dish DBS Corporation
+locker
+
+// locus : 2015-06-25 Locus Analytics LLC
+locus
+
+// loft : 2015-07-30 Annco, Inc.
+loft
+
+// lol : 2015-01-30 XYZ.COM LLC
+lol
+
+// london : 2013-11-14 Dot London Domains Limited
+london
+
+// lotte : 2014-11-07 Lotte Holdings Co., Ltd.
+lotte
+
+// lotto : 2014-04-10 Afilias Limited
+lotto
+
+// love : 2014-12-22 Merchant Law Group LLP
+love
+
+// lpl : 2015-07-30 LPL Holdings, Inc.
+lpl
+
+// lplfinancial : 2015-07-30 LPL Holdings, Inc.
+lplfinancial
+
+// ltd : 2014-09-25 Binky Moon, LLC
+ltd
+
+// ltda : 2014-04-17 InterNetX, Corp
+ltda
+
+// lundbeck : 2015-08-06 H. Lundbeck A/S
+lundbeck
+
+// luxe : 2014-01-09 Registry Services, LLC
+luxe
+
+// luxury : 2013-10-17 Luxury Partners, LLC
+luxury
+
+// macys : 2015-07-31 Macys, Inc.
+macys
+
+// madrid : 2014-05-01 Comunidad de Madrid
+madrid
+
+// maif : 2014-10-02 Mutuelle Assurance Instituteur France (MAIF)
+maif
+
+// maison : 2013-12-05 Binky Moon, LLC
+maison
+
+// makeup : 2015-01-15 XYZ.COM LLC
+makeup
+
+// man : 2014-12-04 MAN SE
+man
+
+// management : 2013-11-07 Binky Moon, LLC
+management
+
+// mango : 2013-10-24 PUNTO FA S.L.
+mango
+
+// map : 2016-06-09 Charleston Road Registry Inc.
+map
+
+// market : 2014-03-06 Dog Beach, LLC
+market
+
+// marketing : 2013-11-07 Binky Moon, LLC
+marketing
+
+// markets : 2014-12-11 Dog Beach, LLC
+markets
+
+// marriott : 2014-10-09 Marriott Worldwide Corporation
+marriott
+
+// marshalls : 2015-07-16 The TJX Companies, Inc.
+marshalls
+
+// maserati : 2015-07-31 Fiat Chrysler Automobiles N.V.
+maserati
+
+// mattel : 2015-08-06 Mattel Sites, Inc.
+mattel
+
+// mba : 2015-04-02 Binky Moon, LLC
+mba
+
+// mckinsey : 2015-07-31 McKinsey Holdings, Inc.
+mckinsey
+
+// med : 2015-08-06 Medistry LLC
+med
+
+// media : 2014-03-06 Binky Moon, LLC
+media
+
+// meet : 2014-01-16 Charleston Road Registry Inc.
+meet
+
+// melbourne : 2014-05-29 The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation
+melbourne
+
+// meme : 2014-01-30 Charleston Road Registry Inc.
+meme
+
+// memorial : 2014-10-16 Dog Beach, LLC
+memorial
+
+// men : 2015-02-26 Exclusive Registry Limited
+men
+
+// menu : 2013-09-11 Dot Menu Registry, LLC
+menu
+
+// merckmsd : 2016-07-14 MSD Registry Holdings, Inc.
+merckmsd
+
+// miami : 2013-12-19 Registry Services, LLC
+miami
+
+// microsoft : 2014-12-18 Microsoft Corporation
+microsoft
+
+// mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft
+mini
+
+// mint : 2015-07-30 Intuit Administrative Services, Inc.
+mint
+
+// mit : 2015-07-02 Massachusetts Institute of Technology
+mit
+
+// mitsubishi : 2015-07-23 Mitsubishi Corporation
+mitsubishi
+
+// mlb : 2015-05-21 MLB Advanced Media DH, LLC
+mlb
+
+// mls : 2015-04-23 The Canadian Real Estate Association
+mls
+
+// mma : 2014-11-07 MMA IARD
+mma
+
+// mobile : 2016-06-02 Dish DBS Corporation
+mobile
+
+// moda : 2013-11-07 Dog Beach, LLC
+moda
+
+// moe : 2013-11-13 Interlink Co., Ltd.
+moe
+
+// moi : 2014-12-18 Amazon Registry Services, Inc.
+moi
+
+// mom : 2015-04-16 XYZ.COM LLC
+mom
+
+// monash : 2013-09-30 Monash University
+monash
+
+// money : 2014-10-16 Binky Moon, LLC
+money
+
+// monster : 2015-09-11 XYZ.COM LLC
+monster
+
+// mormon : 2013-12-05 IRI Domain Management, LLC
+mormon
+
+// mortgage : 2014-03-20 Dog Beach, LLC
+mortgage
+
+// moscow : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
+moscow
+
+// moto : 2015-06-04 Motorola Trademark Holdings, LLC
+moto
+
+// motorcycles : 2014-01-09 XYZ.COM LLC
+motorcycles
+
+// mov : 2014-01-30 Charleston Road Registry Inc.
+mov
+
+// movie : 2015-02-05 Binky Moon, LLC
+movie
+
+// msd : 2015-07-23 MSD Registry Holdings, Inc.
+msd
+
+// mtn : 2014-12-04 MTN Dubai Limited
+mtn
+
+// mtr : 2015-03-12 MTR Corporation Limited
+mtr
+
+// music : 2021-05-04 DotMusic Limited
+music
+
+// mutual : 2015-04-02 Northwestern Mutual MU TLD Registry, LLC
+mutual
+
+// nab : 2015-08-20 National Australia Bank Limited
+nab
+
+// nagoya : 2013-10-24 GMO Registry, Inc.
+nagoya
+
+// natura : 2015-03-12 NATURA COSMÉTICOS S.A.
+natura
+
+// navy : 2014-03-06 Dog Beach, LLC
+navy
+
+// nba : 2015-07-31 NBA REGISTRY, LLC
+nba
+
+// nec : 2015-01-08 NEC Corporation
+nec
+
+// netbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA
+netbank
+
+// netflix : 2015-06-18 Netflix, Inc.
+netflix
+
+// network : 2013-11-14 Binky Moon, LLC
+network
+
+// neustar : 2013-12-05 NeuStar, Inc.
+neustar
+
+// new : 2014-01-30 Charleston Road Registry Inc.
+new
+
+// news : 2014-12-18 Dog Beach, LLC
+news
+
+// next : 2015-06-18 Next plc
+next
+
+// nextdirect : 2015-06-18 Next plc
+nextdirect
+
+// nexus : 2014-07-24 Charleston Road Registry Inc.
+nexus
+
+// nfl : 2015-07-23 NFL Reg Ops LLC
+nfl
+
+// ngo : 2014-03-06 Public Interest Registry
+ngo
+
+// nhk : 2014-02-13 Japan Broadcasting Corporation (NHK)
+nhk
+
+// nico : 2014-12-04 DWANGO Co., Ltd.
+nico
+
+// nike : 2015-07-23 NIKE, Inc.
+nike
+
+// nikon : 2015-05-21 NIKON CORPORATION
+nikon
+
+// ninja : 2013-11-07 Dog Beach, LLC
+ninja
+
+// nissan : 2014-03-27 NISSAN MOTOR CO., LTD.
+nissan
+
+// nissay : 2015-10-29 Nippon Life Insurance Company
+nissay
+
+// nokia : 2015-01-08 Nokia Corporation
+nokia
+
+// northwesternmutual : 2015-06-18 Northwestern Mutual Registry, LLC
+northwesternmutual
+
+// norton : 2014-12-04 NortonLifeLock Inc.
+norton
+
+// now : 2015-06-25 Amazon Registry Services, Inc.
+now
+
+// nowruz : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+nowruz
+
+// nowtv : 2015-05-14 Starbucks (HK) Limited
+nowtv
+
+// nra : 2014-05-22 NRA Holdings Company, INC.
+nra
+
+// nrw : 2013-11-21 Minds + Machines GmbH
+nrw
+
+// ntt : 2014-10-31 NIPPON TELEGRAPH AND TELEPHONE CORPORATION
+ntt
+
+// nyc : 2014-01-23 The City of New York by and through the New York City Department of Information Technology & Telecommunications
+nyc
+
+// obi : 2014-09-25 OBI Group Holding SE & Co. KGaA
+obi
+
+// observer : 2015-04-30 Dog Beach, LLC
+observer
+
+// office : 2015-03-12 Microsoft Corporation
+office
+
+// okinawa : 2013-12-05 BRregistry, Inc.
+okinawa
+
+// olayan : 2015-05-14 Crescent Holding GmbH
+olayan
+
+// olayangroup : 2015-05-14 Crescent Holding GmbH
+olayangroup
+
+// oldnavy : 2015-07-31 The Gap, Inc.
+oldnavy
+
+// ollo : 2015-06-04 Dish DBS Corporation
+ollo
+
+// omega : 2015-01-08 The Swatch Group Ltd
+omega
+
+// one : 2014-11-07 One.com A/S
+one
+
+// ong : 2014-03-06 Public Interest Registry
+ong
+
+// onl : 2013-09-16 iRegistry GmbH
+onl
+
+// online : 2015-01-15 Radix FZC
+online
+
+// ooo : 2014-01-09 INFIBEAM AVENUES LIMITED
+ooo
+
+// open : 2015-07-31 American Express Travel Related Services Company, Inc.
+open
+
+// oracle : 2014-06-19 Oracle Corporation
+oracle
+
+// orange : 2015-03-12 Orange Brand Services Limited
+orange
+
+// organic : 2014-03-27 Afilias Limited
+organic
+
+// origins : 2015-10-01 The Estée Lauder Companies Inc.
+origins
+
+// osaka : 2014-09-04 Osaka Registry Co., Ltd.
+osaka
+
+// otsuka : 2013-10-11 Otsuka Holdings Co., Ltd.
+otsuka
+
+// ott : 2015-06-04 Dish DBS Corporation
+ott
+
+// ovh : 2014-01-16 MédiaBC
+ovh
+
+// page : 2014-12-04 Charleston Road Registry Inc.
+page
+
+// panasonic : 2015-07-30 Panasonic Corporation
+panasonic
+
+// paris : 2014-01-30 City of Paris
+paris
+
+// pars : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+pars
+
+// partners : 2013-12-05 Binky Moon, LLC
+partners
+
+// parts : 2013-12-05 Binky Moon, LLC
+parts
+
+// party : 2014-09-11 Blue Sky Registry Limited
+party
+
+// passagens : 2015-03-05 Travel Reservations SRL
+passagens
+
+// pay : 2015-08-27 Amazon Registry Services, Inc.
+pay
+
+// pccw : 2015-05-14 PCCW Enterprises Limited
+pccw
+
+// pet : 2015-05-07 Afilias Limited
+pet
+
+// pfizer : 2015-09-11 Pfizer Inc.
+pfizer
+
+// pharmacy : 2014-06-19 National Association of Boards of Pharmacy
+pharmacy
+
+// phd : 2016-07-28 Charleston Road Registry Inc.
+phd
+
+// philips : 2014-11-07 Koninklijke Philips N.V.
+philips
+
+// phone : 2016-06-02 Dish DBS Corporation
+phone
+
+// photo : 2013-11-14 UNR Corp.
+photo
+
+// photography : 2013-09-20 Binky Moon, LLC
+photography
+
+// photos : 2013-10-17 Binky Moon, LLC
+photos
+
+// physio : 2014-05-01 PhysBiz Pty Ltd
+physio
+
+// pics : 2013-11-14 XYZ.COM LLC
+pics
+
+// pictet : 2014-06-26 Pictet Europe S.A.
+pictet
+
+// pictures : 2014-03-06 Binky Moon, LLC
+pictures
+
+// pid : 2015-01-08 Top Level Spectrum, Inc.
+pid
+
+// pin : 2014-12-18 Amazon Registry Services, Inc.
+pin
+
+// ping : 2015-06-11 Ping Registry Provider, Inc.
+ping
+
+// pink : 2013-10-01 Afilias Limited
+pink
+
+// pioneer : 2015-07-16 Pioneer Corporation
+pioneer
+
+// pizza : 2014-06-26 Binky Moon, LLC
+pizza
+
+// place : 2014-04-24 Binky Moon, LLC
+place
+
+// play : 2015-03-05 Charleston Road Registry Inc.
+play
+
+// playstation : 2015-07-02 Sony Interactive Entertainment Inc.
+playstation
+
+// plumbing : 2013-09-10 Binky Moon, LLC
+plumbing
+
+// plus : 2015-02-05 Binky Moon, LLC
+plus
+
+// pnc : 2015-07-02 PNC Domain Co., LLC
+pnc
+
+// pohl : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG
+pohl
+
+// poker : 2014-07-03 Afilias Limited
+poker
+
+// politie : 2015-08-20 Politie Nederland
+politie
+
+// porn : 2014-10-16 ICM Registry PN LLC
+porn
+
+// pramerica : 2015-07-30 Prudential Financial, Inc.
+pramerica
+
+// praxi : 2013-12-05 Praxi S.p.A.
+praxi
+
+// press : 2014-04-03 Radix FZC
+press
+
+// prime : 2015-06-25 Amazon Registry Services, Inc.
+prime
+
+// prod : 2014-01-23 Charleston Road Registry Inc.
+prod
+
+// productions : 2013-12-05 Binky Moon, LLC
+productions
+
+// prof : 2014-07-24 Charleston Road Registry Inc.
+prof
+
+// progressive : 2015-07-23 Progressive Casualty Insurance Company
+progressive
+
+// promo : 2014-12-18 Afilias Limited
+promo
+
+// properties : 2013-12-05 Binky Moon, LLC
+properties
+
+// property : 2014-05-22 UNR Corp.
+property
+
+// protection : 2015-04-23 XYZ.COM LLC
+protection
+
+// pru : 2015-07-30 Prudential Financial, Inc.
+pru
+
+// prudential : 2015-07-30 Prudential Financial, Inc.
+prudential
+
+// pub : 2013-12-12 Dog Beach, LLC
+pub
+
+// pwc : 2015-10-29 PricewaterhouseCoopers LLP
+pwc
+
+// qpon : 2013-11-14 dotCOOL, Inc.
+qpon
+
+// quebec : 2013-12-19 PointQuébec Inc
+quebec
+
+// quest : 2015-03-26 XYZ.COM LLC
+quest
+
+// racing : 2014-12-04 Premier Registry Limited
+racing
+
+// radio : 2016-07-21 European Broadcasting Union (EBU)
+radio
+
+// read : 2014-12-18 Amazon Registry Services, Inc.
+read
+
+// realestate : 2015-09-11 dotRealEstate LLC
+realestate
+
+// realtor : 2014-05-29 Real Estate Domains LLC
+realtor
+
+// realty : 2015-03-19 Dog Beach, LLC
+realty
+
+// recipes : 2013-10-17 Binky Moon, LLC
+recipes
+
+// red : 2013-11-07 Afilias Limited
+red
+
+// redstone : 2014-10-31 Redstone Haute Couture Co., Ltd.
+redstone
+
+// redumbrella : 2015-03-26 Travelers TLD, LLC
+redumbrella
+
+// rehab : 2014-03-06 Dog Beach, LLC
+rehab
+
+// reise : 2014-03-13 Binky Moon, LLC
+reise
+
+// reisen : 2014-03-06 Binky Moon, LLC
+reisen
+
+// reit : 2014-09-04 National Association of Real Estate Investment Trusts, Inc.
+reit
+
+// reliance : 2015-04-02 Reliance Industries Limited
+reliance
+
+// ren : 2013-12-12 ZDNS International Limited
+ren
+
+// rent : 2014-12-04 XYZ.COM LLC
+rent
+
+// rentals : 2013-12-05 Binky Moon, LLC
+rentals
+
+// repair : 2013-11-07 Binky Moon, LLC
+repair
+
+// report : 2013-12-05 Binky Moon, LLC
+report
+
+// republican : 2014-03-20 Dog Beach, LLC
+republican
+
+// rest : 2013-12-19 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
+rest
+
+// restaurant : 2014-07-03 Binky Moon, LLC
+restaurant
+
+// review : 2014-11-20 dot Review Limited
+review
+
+// reviews : 2013-09-13 Dog Beach, LLC
+reviews
+
+// rexroth : 2015-06-18 Robert Bosch GMBH
+rexroth
+
+// rich : 2013-11-21 iRegistry GmbH
+rich
+
+// richardli : 2015-05-14 Pacific Century Asset Management (HK) Limited
+richardli
+
+// ricoh : 2014-11-20 Ricoh Company, Ltd.
+ricoh
+
+// ril : 2015-04-02 Reliance Industries Limited
+ril
+
+// rio : 2014-02-27 Empresa Municipal de Informática SA - IPLANRIO
+rio
+
+// rip : 2014-07-10 Dog Beach, LLC
+rip
+
+// rocher : 2014-12-18 Ferrero Trading Lux S.A.
+rocher
+
+// rocks : 2013-11-14 Dog Beach, LLC
+rocks
+
+// rodeo : 2013-12-19 Registry Services, LLC
+rodeo
+
+// rogers : 2015-08-06 Rogers Communications Canada Inc.
+rogers
+
+// room : 2014-12-18 Amazon Registry Services, Inc.
+room
+
+// rsvp : 2014-05-08 Charleston Road Registry Inc.
+rsvp
+
+// rugby : 2016-12-15 World Rugby Strategic Developments Limited
+rugby
+
+// ruhr : 2013-10-02 regiodot GmbH & Co. KG
+ruhr
+
+// run : 2015-03-19 Binky Moon, LLC
+run
+
+// rwe : 2015-04-02 RWE AG
+rwe
+
+// ryukyu : 2014-01-09 BRregistry, Inc.
+ryukyu
+
+// saarland : 2013-12-12 dotSaarland GmbH
+saarland
+
+// safe : 2014-12-18 Amazon Registry Services, Inc.
+safe
+
+// safety : 2015-01-08 Safety Registry Services, LLC.
+safety
+
+// sakura : 2014-12-18 SAKURA Internet Inc.
+sakura
+
+// sale : 2014-10-16 Dog Beach, LLC
+sale
+
+// salon : 2014-12-11 Binky Moon, LLC
+salon
+
+// samsclub : 2015-07-31 Wal-Mart Stores, Inc.
+samsclub
+
+// samsung : 2014-04-03 SAMSUNG SDS CO., LTD
+samsung
+
+// sandvik : 2014-11-13 Sandvik AB
+sandvik
+
+// sandvikcoromant : 2014-11-07 Sandvik AB
+sandvikcoromant
+
+// sanofi : 2014-10-09 Sanofi
+sanofi
+
+// sap : 2014-03-27 SAP AG
+sap
+
+// sarl : 2014-07-03 Binky Moon, LLC
+sarl
+
+// sas : 2015-04-02 Research IP LLC
+sas
+
+// save : 2015-06-25 Amazon Registry Services, Inc.
+save
+
+// saxo : 2014-10-31 Saxo Bank A/S
+saxo
+
+// sbi : 2015-03-12 STATE BANK OF INDIA
+sbi
+
+// sbs : 2014-11-07 ShortDot SA
+sbs
+
+// sca : 2014-03-13 SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ)
+sca
+
+// scb : 2014-02-20 The Siam Commercial Bank Public Company Limited ("SCB")
+scb
+
+// schaeffler : 2015-08-06 Schaeffler Technologies AG & Co. KG
+schaeffler
+
+// schmidt : 2014-04-03 SCHMIDT GROUPE S.A.S.
+schmidt
+
+// scholarships : 2014-04-24 Scholarships.com, LLC
+scholarships
+
+// school : 2014-12-18 Binky Moon, LLC
+school
+
+// schule : 2014-03-06 Binky Moon, LLC
+schule
+
+// schwarz : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG
+schwarz
+
+// science : 2014-09-11 dot Science Limited
+science
+
+// scot : 2014-01-23 Dot Scot Registry Limited
+scot
+
+// search : 2016-06-09 Charleston Road Registry Inc.
+search
+
+// seat : 2014-05-22 SEAT, S.A. (Sociedad Unipersonal)
+seat
+
+// secure : 2015-08-27 Amazon Registry Services, Inc.
+secure
+
+// security : 2015-05-14 XYZ.COM LLC
+security
+
+// seek : 2014-12-04 Seek Limited
+seek
+
+// select : 2015-10-08 Registry Services, LLC
+select
+
+// sener : 2014-10-24 Sener Ingeniería y Sistemas, S.A.
+sener
+
+// services : 2014-02-27 Binky Moon, LLC
+services
+
+// ses : 2015-07-23 SES
+ses
+
+// seven : 2015-08-06 Seven West Media Ltd
+seven
+
+// sew : 2014-07-17 SEW-EURODRIVE GmbH & Co KG
+sew
+
+// sex : 2014-11-13 ICM Registry SX LLC
+sex
+
+// sexy : 2013-09-11 UNR Corp.
+sexy
+
+// sfr : 2015-08-13 Societe Francaise du Radiotelephone - SFR
+sfr
+
+// shangrila : 2015-09-03 Shangri‐La International Hotel Management Limited
+shangrila
+
+// sharp : 2014-05-01 Sharp Corporation
+sharp
+
+// shaw : 2015-04-23 Shaw Cablesystems G.P.
+shaw
+
+// shell : 2015-07-30 Shell Information Technology International Inc
+shell
+
+// shia : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+shia
+
+// shiksha : 2013-11-14 Afilias Limited
+shiksha
+
+// shoes : 2013-10-02 Binky Moon, LLC
+shoes
+
+// shop : 2016-04-08 GMO Registry, Inc.
+shop
+
+// shopping : 2016-03-31 Binky Moon, LLC
+shopping
+
+// shouji : 2015-01-08 Beijing Qihu Keji Co., Ltd.
+shouji
+
+// show : 2015-03-05 Binky Moon, LLC
+show
+
+// showtime : 2015-08-06 CBS Domains Inc.
+showtime
+
+// silk : 2015-06-25 Amazon Registry Services, Inc.
+silk
+
+// sina : 2015-03-12 Sina Corporation
+sina
+
+// singles : 2013-08-27 Binky Moon, LLC
+singles
+
+// site : 2015-01-15 Radix FZC
+site
+
+// ski : 2015-04-09 Afilias Limited
+ski
+
+// skin : 2015-01-15 XYZ.COM LLC
+skin
+
+// sky : 2014-06-19 Sky International AG
+sky
+
+// skype : 2014-12-18 Microsoft Corporation
+skype
+
+// sling : 2015-07-30 DISH Technologies L.L.C.
+sling
+
+// smart : 2015-07-09 Smart Communications, Inc. (SMART)
+smart
+
+// smile : 2014-12-18 Amazon Registry Services, Inc.
+smile
+
+// sncf : 2015-02-19 Société Nationale des Chemins de fer Francais S N C F
+sncf
+
+// soccer : 2015-03-26 Binky Moon, LLC
+soccer
+
+// social : 2013-11-07 Dog Beach, LLC
+social
+
+// softbank : 2015-07-02 SoftBank Group Corp.
+softbank
+
+// software : 2014-03-20 Dog Beach, LLC
+software
+
+// sohu : 2013-12-19 Sohu.com Limited
+sohu
+
+// solar : 2013-11-07 Binky Moon, LLC
+solar
+
+// solutions : 2013-11-07 Binky Moon, LLC
+solutions
+
+// song : 2015-02-26 Amazon Registry Services, Inc.
+song
+
+// sony : 2015-01-08 Sony Corporation
+sony
+
+// soy : 2014-01-23 Charleston Road Registry Inc.
+soy
+
+// spa : 2019-09-19 Asia Spa and Wellness Promotion Council Limited
+spa
+
+// space : 2014-04-03 Radix FZC
+space
+
+// sport : 2017-11-16 Global Association of International Sports Federations (GAISF)
+sport
+
+// spot : 2015-02-26 Amazon Registry Services, Inc.
+spot
+
+// srl : 2015-05-07 InterNetX, Corp
+srl
+
+// stada : 2014-11-13 STADA Arzneimittel AG
+stada
+
+// staples : 2015-07-30 Staples, Inc.
+staples
+
+// star : 2015-01-08 Star India Private Limited
+star
+
+// statebank : 2015-03-12 STATE BANK OF INDIA
+statebank
+
+// statefarm : 2015-07-30 State Farm Mutual Automobile Insurance Company
+statefarm
+
+// stc : 2014-10-09 Saudi Telecom Company
+stc
+
+// stcgroup : 2014-10-09 Saudi Telecom Company
+stcgroup
+
+// stockholm : 2014-12-18 Stockholms kommun
+stockholm
+
+// storage : 2014-12-22 XYZ.COM LLC
+storage
+
+// store : 2015-04-09 Radix FZC
+store
+
+// stream : 2016-01-08 dot Stream Limited
+stream
+
+// studio : 2015-02-11 Dog Beach, LLC
+studio
+
+// study : 2014-12-11 OPEN UNIVERSITIES AUSTRALIA PTY LTD
+study
+
+// style : 2014-12-04 Binky Moon, LLC
+style
+
+// sucks : 2014-12-22 Vox Populi Registry Ltd.
+sucks
+
+// supplies : 2013-12-19 Binky Moon, LLC
+supplies
+
+// supply : 2013-12-19 Binky Moon, LLC
+supply
+
+// support : 2013-10-24 Binky Moon, LLC
+support
+
+// surf : 2014-01-09 Registry Services, LLC
+surf
+
+// surgery : 2014-03-20 Binky Moon, LLC
+surgery
+
+// suzuki : 2014-02-20 SUZUKI MOTOR CORPORATION
+suzuki
+
+// swatch : 2015-01-08 The Swatch Group Ltd
+swatch
+
+// swiss : 2014-10-16 Swiss Confederation
+swiss
+
+// sydney : 2014-09-18 State of New South Wales, Department of Premier and Cabinet
+sydney
+
+// systems : 2013-11-07 Binky Moon, LLC
+systems
+
+// tab : 2014-12-04 Tabcorp Holdings Limited
+tab
+
+// taipei : 2014-07-10 Taipei City Government
+taipei
+
+// talk : 2015-04-09 Amazon Registry Services, Inc.
+talk
+
+// taobao : 2015-01-15 Alibaba Group Holding Limited
+taobao
+
+// target : 2015-07-31 Target Domain Holdings, LLC
+target
+
+// tatamotors : 2015-03-12 Tata Motors Ltd
+tatamotors
+
+// tatar : 2014-04-24 Limited Liability Company "Coordination Center of Regional Domain of Tatarstan Republic"
+tatar
+
+// tattoo : 2013-08-30 UNR Corp.
+tattoo
+
+// tax : 2014-03-20 Binky Moon, LLC
+tax
+
+// taxi : 2015-03-19 Binky Moon, LLC
+taxi
+
+// tci : 2014-09-12 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+tci
+
+// tdk : 2015-06-11 TDK Corporation
+tdk
+
+// team : 2015-03-05 Binky Moon, LLC
+team
+
+// tech : 2015-01-30 Radix FZC
+tech
+
+// technology : 2013-09-13 Binky Moon, LLC
+technology
+
+// temasek : 2014-08-07 Temasek Holdings (Private) Limited
+temasek
+
+// tennis : 2014-12-04 Binky Moon, LLC
+tennis
+
+// teva : 2015-07-02 Teva Pharmaceutical Industries Limited
+teva
+
+// thd : 2015-04-02 Home Depot Product Authority, LLC
+thd
+
+// theater : 2015-03-19 Binky Moon, LLC
+theater
+
+// theatre : 2015-05-07 XYZ.COM LLC
+theatre
+
+// tiaa : 2015-07-23 Teachers Insurance and Annuity Association of America
+tiaa
+
+// tickets : 2015-02-05 XYZ.COM LLC
+tickets
+
+// tienda : 2013-11-14 Binky Moon, LLC
+tienda
+
+// tiffany : 2015-01-30 Tiffany and Company
+tiffany
+
+// tips : 2013-09-20 Binky Moon, LLC
+tips
+
+// tires : 2014-11-07 Binky Moon, LLC
+tires
+
+// tirol : 2014-04-24 punkt Tirol GmbH
+tirol
+
+// tjmaxx : 2015-07-16 The TJX Companies, Inc.
+tjmaxx
+
+// tjx : 2015-07-16 The TJX Companies, Inc.
+tjx
+
+// tkmaxx : 2015-07-16 The TJX Companies, Inc.
+tkmaxx
+
+// tmall : 2015-01-15 Alibaba Group Holding Limited
+tmall
+
+// today : 2013-09-20 Binky Moon, LLC
+today
+
+// tokyo : 2013-11-13 GMO Registry, Inc.
+tokyo
+
+// tools : 2013-11-21 Binky Moon, LLC
+tools
+
+// top : 2014-03-20 .TOP Registry
+top
+
+// toray : 2014-12-18 Toray Industries, Inc.
+toray
+
+// toshiba : 2014-04-10 TOSHIBA Corporation
+toshiba
+
+// total : 2015-08-06 TOTAL SE
+total
+
+// tours : 2015-01-22 Binky Moon, LLC
+tours
+
+// town : 2014-03-06 Binky Moon, LLC
+town
+
+// toyota : 2015-04-23 TOYOTA MOTOR CORPORATION
+toyota
+
+// toys : 2014-03-06 Binky Moon, LLC
+toys
+
+// trade : 2014-01-23 Elite Registry Limited
+trade
+
+// trading : 2014-12-11 Dog Beach, LLC
+trading
+
+// training : 2013-11-07 Binky Moon, LLC
+training
+
+// travel : 2015-10-09 Dog Beach, LLC
+travel
+
+// travelchannel : 2015-07-02 Lifestyle Domain Holdings, Inc.
+travelchannel
+
+// travelers : 2015-03-26 Travelers TLD, LLC
+travelers
+
+// travelersinsurance : 2015-03-26 Travelers TLD, LLC
+travelersinsurance
+
+// trust : 2014-10-16 UNR Corp.
+trust
+
+// trv : 2015-03-26 Travelers TLD, LLC
+trv
+
+// tube : 2015-06-11 Latin American Telecom LLC
+tube
+
+// tui : 2014-07-03 TUI AG
+tui
+
+// tunes : 2015-02-26 Amazon Registry Services, Inc.
+tunes
+
+// tushu : 2014-12-18 Amazon Registry Services, Inc.
+tushu
+
+// tvs : 2015-02-19 T V SUNDRAM IYENGAR & SONS LIMITED
+tvs
+
+// ubank : 2015-08-20 National Australia Bank Limited
+ubank
+
+// ubs : 2014-12-11 UBS AG
+ubs
+
+// unicom : 2015-10-15 China United Network Communications Corporation Limited
+unicom
+
+// university : 2014-03-06 Binky Moon, LLC
+university
+
+// uno : 2013-09-11 Radix FZC
+uno
+
+// uol : 2014-05-01 UBN INTERNET LTDA.
+uol
+
+// ups : 2015-06-25 UPS Market Driver, Inc.
+ups
+
+// vacations : 2013-12-05 Binky Moon, LLC
+vacations
+
+// vana : 2014-12-11 Lifestyle Domain Holdings, Inc.
+vana
+
+// vanguard : 2015-09-03 The Vanguard Group, Inc.
+vanguard
+
+// vegas : 2014-01-16 Dot Vegas, Inc.
+vegas
+
+// ventures : 2013-08-27 Binky Moon, LLC
+ventures
+
+// verisign : 2015-08-13 VeriSign, Inc.
+verisign
+
+// versicherung : 2014-03-20 tldbox GmbH
+versicherung
+
+// vet : 2014-03-06 Dog Beach, LLC
+vet
+
+// viajes : 2013-10-17 Binky Moon, LLC
+viajes
+
+// video : 2014-10-16 Dog Beach, LLC
+video
+
+// vig : 2015-05-14 VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe
+vig
+
+// viking : 2015-04-02 Viking River Cruises (Bermuda) Ltd.
+viking
+
+// villas : 2013-12-05 Binky Moon, LLC
+villas
+
+// vin : 2015-06-18 Binky Moon, LLC
+vin
+
+// vip : 2015-01-22 Registry Services, LLC
+vip
+
+// virgin : 2014-09-25 Virgin Enterprises Limited
+virgin
+
+// visa : 2015-07-30 Visa Worldwide Pte. Limited
+visa
+
+// vision : 2013-12-05 Binky Moon, LLC
+vision
+
+// viva : 2014-11-07 Saudi Telecom Company
+viva
+
+// vivo : 2015-07-31 Telefonica Brasil S.A.
+vivo
+
+// vlaanderen : 2014-02-06 DNS.be vzw
+vlaanderen
+
+// vodka : 2013-12-19 Registry Services, LLC
+vodka
+
+// volkswagen : 2015-05-14 Volkswagen Group of America Inc.
+volkswagen
+
+// volvo : 2015-11-12 Volvo Holding Sverige Aktiebolag
+volvo
+
+// vote : 2013-11-21 Monolith Registry LLC
+vote
+
+// voting : 2013-11-13 Valuetainment Corp.
+voting
+
+// voto : 2013-11-21 Monolith Registry LLC
+voto
+
+// voyage : 2013-08-27 Binky Moon, LLC
+voyage
+
+// vuelos : 2015-03-05 Travel Reservations SRL
+vuelos
+
+// wales : 2014-05-08 Nominet UK
+wales
+
+// walmart : 2015-07-31 Wal-Mart Stores, Inc.
+walmart
+
+// walter : 2014-11-13 Sandvik AB
+walter
+
+// wang : 2013-10-24 Zodiac Wang Limited
+wang
+
+// wanggou : 2014-12-18 Amazon Registry Services, Inc.
+wanggou
+
+// watch : 2013-11-14 Binky Moon, LLC
+watch
+
+// watches : 2014-12-22 Afilias Limited
+watches
+
+// weather : 2015-01-08 International Business Machines Corporation
+weather
+
+// weatherchannel : 2015-03-12 International Business Machines Corporation
+weatherchannel
+
+// webcam : 2014-01-23 dot Webcam Limited
+webcam
+
+// weber : 2015-06-04 Saint-Gobain Weber SA
+weber
+
+// website : 2014-04-03 Radix FZC
+website
+
+// wedding : 2014-04-24 Registry Services, LLC
+wedding
+
+// weibo : 2015-03-05 Sina Corporation
+weibo
+
+// weir : 2015-01-29 Weir Group IP Limited
+weir
+
+// whoswho : 2014-02-20 Who's Who Registry
+whoswho
+
+// wien : 2013-10-28 punkt.wien GmbH
+wien
+
+// wiki : 2013-11-07 Top Level Design, LLC
+wiki
+
+// williamhill : 2014-03-13 William Hill Organization Limited
+williamhill
+
+// win : 2014-11-20 First Registry Limited
+win
+
+// windows : 2014-12-18 Microsoft Corporation
+windows
+
+// wine : 2015-06-18 Binky Moon, LLC
+wine
+
+// winners : 2015-07-16 The TJX Companies, Inc.
+winners
+
+// wme : 2014-02-13 William Morris Endeavor Entertainment, LLC
+wme
+
+// wolterskluwer : 2015-08-06 Wolters Kluwer N.V.
+wolterskluwer
+
+// woodside : 2015-07-09 Woodside Petroleum Limited
+woodside
+
+// work : 2013-12-19 Registry Services, LLC
+work
+
+// works : 2013-11-14 Binky Moon, LLC
+works
+
+// world : 2014-06-12 Binky Moon, LLC
+world
+
+// wow : 2015-10-08 Amazon Registry Services, Inc.
+wow
+
+// wtc : 2013-12-19 World Trade Centers Association, Inc.
+wtc
+
+// wtf : 2014-03-06 Binky Moon, LLC
+wtf
+
+// xbox : 2014-12-18 Microsoft Corporation
+xbox
+
+// xerox : 2014-10-24 Xerox DNHC LLC
+xerox
+
+// xfinity : 2015-07-09 Comcast IP Holdings I, LLC
+xfinity
+
+// xihuan : 2015-01-08 Beijing Qihu Keji Co., Ltd.
+xihuan
+
+// xin : 2014-12-11 Elegant Leader Limited
+xin
+
+// xn--11b4c3d : 2015-01-15 VeriSign Sarl
+कॉम
+
+// xn--1ck2e1b : 2015-02-26 Amazon Registry Services, Inc.
+セール
+
+// xn--1qqw23a : 2014-01-09 Guangzhou YU Wei Information Technology Co., Ltd.
+佛山
+
+// xn--30rr7y : 2014-06-12 Excellent First Limited
+慈善
+
+// xn--3bst00m : 2013-09-13 Eagle Horizon Limited
+集团
+
+// xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED OY
+在线
+
+// xn--3pxu8k : 2015-01-15 VeriSign Sarl
+点看
+
+// xn--42c2d9a : 2015-01-15 VeriSign Sarl
+คอม
+
+// xn--45q11c : 2013-11-21 Zodiac Gemini Ltd
+八卦
+
+// xn--4gbrim : 2013-10-04 Helium TLDs Ltd
+موقع
+
+// xn--55qw42g : 2013-11-08 China Organizational Name Administration Center
+公益
+
+// xn--55qx5d : 2013-11-14 China Internet Network Information Center (CNNIC)
+公司
+
+// xn--5su34j936bgsg : 2015-09-03 Shangri‐La International Hotel Management Limited
+香格里拉
+
+// xn--5tzm5g : 2014-12-22 Global Website TLD Asia Limited
+网站
+
+// xn--6frz82g : 2013-09-23 Afilias Limited
+移动
+
+// xn--6qq986b3xl : 2013-09-13 Tycoon Treasure Limited
+我爱你
+
+// xn--80adxhks : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
+москва
+
+// xn--80aqecdr1a : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+католик
+
+// xn--80asehdb : 2013-07-14 CORE Association
+онлайн
+
+// xn--80aswg : 2013-07-14 CORE Association
+сайт
+
+// xn--8y0a063a : 2015-03-26 China United Network Communications Corporation Limited
+联通
+
+// xn--9dbq2a : 2015-01-15 VeriSign Sarl
+קום
+
+// xn--9et52u : 2014-06-12 RISE VICTORY LIMITED
+时尚
+
+// xn--9krt00a : 2015-03-12 Sina Corporation
+微博
+
+// xn--b4w605ferd : 2014-08-07 Temasek Holdings (Private) Limited
+淡马锡
+
+// xn--bck1b9a5dre4c : 2015-02-26 Amazon Registry Services, Inc.
+ファッション
+
+// xn--c1avg : 2013-11-14 Public Interest Registry
+орг
+
+// xn--c2br7g : 2015-01-15 VeriSign Sarl
+नेट
+
+// xn--cck2b3b : 2015-02-26 Amazon Registry Services, Inc.
+ストア
+
+// xn--cckwcxetd : 2019-12-19 Amazon Registry Services, Inc.
+アマゾン
+
+// xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD
+삼성
+
+// xn--czr694b : 2014-01-16 Internet DotTrademark Organisation Limited
+商标
+
+// xn--czrs0t : 2013-12-19 Binky Moon, LLC
+商店
+
+// xn--czru2d : 2013-11-21 Zodiac Aquarius Limited
+商城
+
+// xn--d1acj3b : 2013-11-20 The Foundation for Network Initiatives “The Smart Internet”
+дети
+
+// xn--eckvdtc9d : 2014-12-18 Amazon Registry Services, Inc.
+ポイント
+
+// xn--efvy88h : 2014-08-22 Guangzhou YU Wei Information Technology Co., Ltd.
+新闻
+
+// xn--fct429k : 2015-04-09 Amazon Registry Services, Inc.
+家電
+
+// xn--fhbei : 2015-01-15 VeriSign Sarl
+كوم
+
+// xn--fiq228c5hs : 2013-09-08 TLD REGISTRY LIMITED OY
+中文网
+
+// xn--fiq64b : 2013-10-14 CITIC Group Corporation
+中信
+
+// xn--fjq720a : 2014-05-22 Binky Moon, LLC
+娱乐
+
+// xn--flw351e : 2014-07-31 Charleston Road Registry Inc.
+谷歌
+
+// xn--fzys8d69uvgm : 2015-05-14 PCCW Enterprises Limited
+電訊盈科
+
+// xn--g2xx48c : 2015-01-30 Nawang Heli(Xiamen) Network Service Co., LTD.
+购物
+
+// xn--gckr3f0f : 2015-02-26 Amazon Registry Services, Inc.
+クラウド
+
+// xn--gk3at1e : 2015-10-08 Amazon Registry Services, Inc.
+通販
+
+// xn--hxt814e : 2014-05-15 Zodiac Taurus Limited
+网店
+
+// xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry
+संगठन
+
+// xn--imr513n : 2014-12-11 Internet DotTrademark Organisation Limited
+餐厅
+
+// xn--io0a7i : 2013-11-14 China Internet Network Information Center (CNNIC)
+网络
+
+// xn--j1aef : 2015-01-15 VeriSign Sarl
+ком
+
+// xn--jlq480n2rg : 2019-12-19 Amazon Registry Services, Inc.
+亚马逊
+
+// xn--jlq61u9w7b : 2015-01-08 Nokia Corporation
+诺基亚
+
+// xn--jvr189m : 2015-02-26 Amazon Registry Services, Inc.
+食品
+
+// xn--kcrx77d1x4a : 2014-11-07 Koninklijke Philips N.V.
+飞利浦
+
+// xn--kput3i : 2014-02-13 Beijing RITT-Net Technology Development Co., Ltd
+手机
+
+// xn--mgba3a3ejt : 2014-11-20 Aramco Services Company
+ارامكو
+
+// xn--mgba7c0bbn0a : 2015-05-14 Crescent Holding GmbH
+العليان
+
+// xn--mgbaakc7dvf : 2015-09-03 Emirates Telecommunications Corporation (trading as Etisalat)
+اتصالات
+
+// xn--mgbab2bd : 2013-10-31 CORE Association
+بازار
+
+// xn--mgbca7dzdo : 2015-07-30 Abu Dhabi Systems and Information Centre
+ابوظبي
+
+// xn--mgbi4ecexp : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+كاثوليك
+
+// xn--mgbt3dhd : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+همراه
+
+// xn--mk1bu44c : 2015-01-15 VeriSign Sarl
+닷컴
+
+// xn--mxtq1m : 2014-03-06 Net-Chinese Co., Ltd.
+政府
+
+// xn--ngbc5azd : 2013-07-13 International Domain Registry Pty. Ltd.
+شبكة
+
+// xn--ngbe9e0a : 2014-12-04 Kuwait Finance House
+بيتك
+
+// xn--ngbrx : 2015-11-12 League of Arab States
+عرب
+
+// xn--nqv7f : 2013-11-14 Public Interest Registry
+机构
+
+// xn--nqv7fs00ema : 2013-11-14 Public Interest Registry
+组织机构
+
+// xn--nyqy26a : 2014-11-07 Stable Tone Limited
+健康
+
+// xn--otu796d : 2017-08-06 Jiang Yu Liang Cai Technology Company Limited
+招聘
+
+// xn--p1acf : 2013-12-12 Rusnames Limited
+рус
+
+// xn--pssy2u : 2015-01-15 VeriSign Sarl
+大拿
+
+// xn--q9jyb4c : 2013-09-17 Charleston Road Registry Inc.
+みんな
+
+// xn--qcka1pmc : 2014-07-31 Charleston Road Registry Inc.
+グーグル
+
+// xn--rhqv96g : 2013-09-11 Stable Tone Limited
+世界
+
+// xn--rovu88b : 2015-02-26 Amazon Registry Services, Inc.
+書籍
+
+// xn--ses554g : 2014-01-16 KNET Co., Ltd.
+网址
+
+// xn--t60b56a : 2015-01-15 VeriSign Sarl
+닷넷
+
+// xn--tckwe : 2015-01-15 VeriSign Sarl
+コム
+
+// xn--tiq49xqyj : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+天主教
+
+// xn--unup4y : 2013-07-14 Binky Moon, LLC
+游戏
+
+// xn--vermgensberater-ctb : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG
+vermögensberater
+
+// xn--vermgensberatung-pwb : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG
+vermögensberatung
+
+// xn--vhquv : 2013-08-27 Binky Moon, LLC
+企业
+
+// xn--vuq861b : 2014-10-16 Beijing Tele-info Network Technology Co., Ltd.
+信息
+
+// xn--w4r85el8fhu5dnra : 2015-04-30 Kerry Trading Co. Limited
+嘉里大酒店
+
+// xn--w4rs40l : 2015-07-30 Kerry Trading Co. Limited
+嘉里
+
+// xn--xhq521b : 2013-11-14 Guangzhou YU Wei Information Technology Co., Ltd.
+广东
+
+// xn--zfr164b : 2013-11-08 China Organizational Name Administration Center
+政务
+
+// xyz : 2013-12-05 XYZ.COM LLC
+xyz
+
+// yachts : 2014-01-09 XYZ.COM LLC
+yachts
+
+// yahoo : 2015-04-02 Oath Inc.
+yahoo
+
+// yamaxun : 2014-12-18 Amazon Registry Services, Inc.
+yamaxun
+
+// yandex : 2014-04-10 Yandex Europe B.V.
+yandex
+
+// yodobashi : 2014-11-20 YODOBASHI CAMERA CO.,LTD.
+yodobashi
+
+// yoga : 2014-05-29 Registry Services, LLC
+yoga
+
+// yokohama : 2013-12-12 GMO Registry, Inc.
+yokohama
+
+// you : 2015-04-09 Amazon Registry Services, Inc.
+you
+
+// youtube : 2014-05-01 Charleston Road Registry Inc.
+youtube
+
+// yun : 2015-01-08 Beijing Qihu Keji Co., Ltd.
+yun
+
+// zappos : 2015-06-25 Amazon Registry Services, Inc.
+zappos
+
+// zara : 2014-11-07 Industria de Diseño Textil, S.A. (INDITEX, S.A.)
+zara
+
+// zero : 2014-12-18 Amazon Registry Services, Inc.
+zero
+
+// zip : 2014-05-08 Charleston Road Registry Inc.
+zip
+
+// zone : 2013-11-14 Binky Moon, LLC
+zone
+
+// zuerich : 2014-11-07 Kanton Zürich (Canton of Zurich)
+zuerich
+
+
+// ===END ICANN DOMAINS===
+// ===BEGIN PRIVATE DOMAINS===
+// (Note: these are in alphabetical order by company name)
+
+// 1GB LLC : https://www.1gb.ua/
+// Submitted by 1GB LLC
+cc.ua
+inf.ua
+ltd.ua
+
+// 611coin : https://611project.org/
+611.to
+
+// Aaron Marais' Gitlab pages: https://lab.aaronleem.co.za
+// Submitted by Aaron Marais
+graphox.us
+
+// accesso Technology Group, plc. : https://accesso.com/
+// Submitted by accesso Team
+*.devcdnaccesso.com
+
+// Adobe : https://www.adobe.com/
+// Submitted by Ian Boston and Lars Trieloff
+adobeaemcloud.com
+*.dev.adobeaemcloud.com
+hlx.live
+adobeaemcloud.net
+hlx.page
+hlx3.page
+
+// Agnat sp. z o.o. : https://domena.pl
+// Submitted by Przemyslaw Plewa
+beep.pl
+
+// Airkit : https://www.airkit.com/
+// Submitted by Grant Cooksey
+airkitapps.com
+airkitapps-au.com
+airkitapps.eu
+
+// Aiven: https://aiven.io/
+// Submitted by Etienne Stalmans
+aivencloud.com
+
+// alboto.ca : http://alboto.ca
+// Submitted by Anton Avramov
+barsy.ca
+
+// Alces Software Ltd : http://alces-software.com
+// Submitted by Mark J. Titorenko
+*.compute.estate
+*.alces.network
+
+// all-inkl.com : https://all-inkl.com
+// Submitted by Werner Kaltofen
+kasserver.com
+
+// Altervista: https://www.altervista.org
+// Submitted by Carlo Cannas
+altervista.org
+
+// alwaysdata : https://www.alwaysdata.com
+// Submitted by Cyril
+alwaysdata.net
+
+// Amazon CloudFront : https://aws.amazon.com/cloudfront/
+// Submitted by Donavan Miller
+cloudfront.net
+
+// Amazon Elastic Compute Cloud : https://aws.amazon.com/ec2/
+// Submitted by Luke Wells
+*.compute.amazonaws.com
+*.compute-1.amazonaws.com
+*.compute.amazonaws.com.cn
+us-east-1.amazonaws.com
+
+// Amazon Elastic Beanstalk : https://aws.amazon.com/elasticbeanstalk/
+// Submitted by Luke Wells
+cn-north-1.eb.amazonaws.com.cn
+cn-northwest-1.eb.amazonaws.com.cn
+elasticbeanstalk.com
+ap-northeast-1.elasticbeanstalk.com
+ap-northeast-2.elasticbeanstalk.com
+ap-northeast-3.elasticbeanstalk.com
+ap-south-1.elasticbeanstalk.com
+ap-southeast-1.elasticbeanstalk.com
+ap-southeast-2.elasticbeanstalk.com
+ca-central-1.elasticbeanstalk.com
+eu-central-1.elasticbeanstalk.com
+eu-west-1.elasticbeanstalk.com
+eu-west-2.elasticbeanstalk.com
+eu-west-3.elasticbeanstalk.com
+sa-east-1.elasticbeanstalk.com
+us-east-1.elasticbeanstalk.com
+us-east-2.elasticbeanstalk.com
+us-gov-west-1.elasticbeanstalk.com
+us-west-1.elasticbeanstalk.com
+us-west-2.elasticbeanstalk.com
+
+// Amazon Elastic Load Balancing : https://aws.amazon.com/elasticloadbalancing/
+// Submitted by Luke Wells
+*.elb.amazonaws.com
+*.elb.amazonaws.com.cn
+
+// Amazon Global Accelerator : https://aws.amazon.com/global-accelerator/
+// Submitted by Daniel Massaguer
+awsglobalaccelerator.com
+
+// Amazon S3 : https://aws.amazon.com/s3/
+// Submitted by Luke Wells
+s3.amazonaws.com
+s3-ap-northeast-1.amazonaws.com
+s3-ap-northeast-2.amazonaws.com
+s3-ap-south-1.amazonaws.com
+s3-ap-southeast-1.amazonaws.com
+s3-ap-southeast-2.amazonaws.com
+s3-ca-central-1.amazonaws.com
+s3-eu-central-1.amazonaws.com
+s3-eu-west-1.amazonaws.com
+s3-eu-west-2.amazonaws.com
+s3-eu-west-3.amazonaws.com
+s3-external-1.amazonaws.com
+s3-fips-us-gov-west-1.amazonaws.com
+s3-sa-east-1.amazonaws.com
+s3-us-gov-west-1.amazonaws.com
+s3-us-east-2.amazonaws.com
+s3-us-west-1.amazonaws.com
+s3-us-west-2.amazonaws.com
+s3.ap-northeast-2.amazonaws.com
+s3.ap-south-1.amazonaws.com
+s3.cn-north-1.amazonaws.com.cn
+s3.ca-central-1.amazonaws.com
+s3.eu-central-1.amazonaws.com
+s3.eu-west-2.amazonaws.com
+s3.eu-west-3.amazonaws.com
+s3.us-east-2.amazonaws.com
+s3.dualstack.ap-northeast-1.amazonaws.com
+s3.dualstack.ap-northeast-2.amazonaws.com
+s3.dualstack.ap-south-1.amazonaws.com
+s3.dualstack.ap-southeast-1.amazonaws.com
+s3.dualstack.ap-southeast-2.amazonaws.com
+s3.dualstack.ca-central-1.amazonaws.com
+s3.dualstack.eu-central-1.amazonaws.com
+s3.dualstack.eu-west-1.amazonaws.com
+s3.dualstack.eu-west-2.amazonaws.com
+s3.dualstack.eu-west-3.amazonaws.com
+s3.dualstack.sa-east-1.amazonaws.com
+s3.dualstack.us-east-1.amazonaws.com
+s3.dualstack.us-east-2.amazonaws.com
+s3-website-us-east-1.amazonaws.com
+s3-website-us-west-1.amazonaws.com
+s3-website-us-west-2.amazonaws.com
+s3-website-ap-northeast-1.amazonaws.com
+s3-website-ap-southeast-1.amazonaws.com
+s3-website-ap-southeast-2.amazonaws.com
+s3-website-eu-west-1.amazonaws.com
+s3-website-sa-east-1.amazonaws.com
+s3-website.ap-northeast-2.amazonaws.com
+s3-website.ap-south-1.amazonaws.com
+s3-website.ca-central-1.amazonaws.com
+s3-website.eu-central-1.amazonaws.com
+s3-website.eu-west-2.amazonaws.com
+s3-website.eu-west-3.amazonaws.com
+s3-website.us-east-2.amazonaws.com
+
+// Amune : https://amune.org/
+// Submitted by Team Amune
+t3l3p0rt.net
+tele.amune.org
+
+// Apigee : https://apigee.com/
+// Submitted by Apigee Security Team
+apigee.io
+
+// Apphud : https://apphud.com
+// Submitted by Alexander Selivanov
+siiites.com
+
+// Appspace : https://www.appspace.com
+// Submitted by Appspace Security Team
+appspacehosted.com
+appspaceusercontent.com
+
+// Appudo UG (haftungsbeschränkt) : https://www.appudo.com
+// Submitted by Alexander Hochbaum
+appudo.net
+
+// Aptible : https://www.aptible.com/
+// Submitted by Thomas Orozco
+on-aptible.com
+
+// ASEINet : https://www.aseinet.com/
+// Submitted by Asei SEKIGUCHI
+user.aseinet.ne.jp
+gv.vc
+d.gv.vc
+
+// Asociación Amigos de la Informática "Euskalamiga" : http://encounter.eus/
+// Submitted by Hector Martin
+user.party.eus
+
+// Association potager.org : https://potager.org/
+// Submitted by Lunar
+pimienta.org
+poivron.org
+potager.org
+sweetpepper.org
+
+// ASUSTOR Inc. : http://www.asustor.com
+// Submitted by Vincent Tseng
+myasustor.com
+
+// Atlassian : https://atlassian.com
+// Submitted by Sam Smyth
+cdn.prod.atlassian-dev.net
+
+// Authentick UG (haftungsbeschränkt) : https://authentick.net
+// Submitted by Lukas Reschke
+translated.page
+
+// AVM : https://avm.de
+// Submitted by Andreas Weise
+myfritz.net
+
+// AVStack Pte. Ltd. : https://avstack.io
+// Submitted by Jasper Hugo
+onavstack.net
+
+// AW AdvisorWebsites.com Software Inc : https://advisorwebsites.com
+// Submitted by James Kennedy
+*.awdev.ca
+*.advisor.ws
+
+// AZ.pl sp. z.o.o: https://az.pl
+// Submitted by Krzysztof Wolski
+ecommerce-shop.pl
+
+// b-data GmbH : https://www.b-data.io
+// Submitted by Olivier Benz
+b-data.io
+
+// backplane : https://www.backplane.io
+// Submitted by Anthony Voutas
+backplaneapp.io
+
+// Balena : https://www.balena.io
+// Submitted by Petros Angelatos
+balena-devices.com
+
+// University of Banja Luka : https://unibl.org
+// Domains for Republic of Srpska administrative entity.
+// Submitted by Marko Ivanovic
+rs.ba
+
+// Banzai Cloud
+// Submitted by Janos Matyas
+*.banzai.cloud
+app.banzaicloud.io
+*.backyards.banzaicloud.io
+
+// BASE, Inc. : https://binc.jp
+// Submitted by Yuya NAGASAWA
+base.ec
+official.ec
+buyshop.jp
+fashionstore.jp
+handcrafted.jp
+kawaiishop.jp
+supersale.jp
+theshop.jp
+shopselect.net
+base.shop
+
+// Beget Ltd
+// Submitted by Lev Nekrasov
+*.beget.app
+
+// BetaInABox
+// Submitted by Adrian
+betainabox.com
+
+// BinaryLane : http://www.binarylane.com
+// Submitted by Nathan O'Sullivan
+bnr.la
+
+// Bitbucket : http://bitbucket.org
+// Submitted by Andy Ortlieb
+bitbucket.io
+
+// Blackbaud, Inc. : https://www.blackbaud.com
+// Submitted by Paul Crowder
+blackbaudcdn.net
+
+// Blatech : http://www.blatech.net
+// Submitted by Luke Bratch
+of.je
+
+// Blue Bite, LLC : https://bluebite.com
+// Submitted by Joshua Weiss
+bluebite.io
+
+// Boomla : https://boomla.com
+// Submitted by Tibor Halter
+boomla.net
+
+// Boutir : https://www.boutir.com
+// Submitted by Eric Ng Ka Ka
+boutir.com
+
+// Boxfuse : https://boxfuse.com
+// Submitted by Axel Fontaine
+boxfuse.io
+
+// bplaced : https://www.bplaced.net/
+// Submitted by Miroslav Bozic
+square7.ch
+bplaced.com
+bplaced.de
+square7.de
+bplaced.net
+square7.net
+
+// Brendly : https://brendly.rs
+// Submitted by Dusan Radovanovic
+shop.brendly.rs
+
+// BrowserSafetyMark
+// Submitted by Dave Tharp
+browsersafetymark.io
+
+// Bytemark Hosting : https://www.bytemark.co.uk
+// Submitted by Paul Cammish
+uk0.bigv.io
+dh.bytemark.co.uk
+vm.bytemark.co.uk
+
+// Caf.js Labs LLC : https://www.cafjs.com
+// Submitted by Antonio Lain
+cafjs.com
+
+// callidomus : https://www.callidomus.com/
+// Submitted by Marcus Popp
+mycd.eu
+
+// Carrd : https://carrd.co
+// Submitted by AJ
+drr.ac
+uwu.ai
+carrd.co
+crd.co
+ju.mp
+
+// CentralNic : http://www.centralnic.com/names/domains
+// Submitted by registry
+ae.org
+br.com
+cn.com
+com.de
+com.se
+de.com
+eu.com
+gb.net
+hu.net
+jp.net
+jpn.com
+mex.com
+ru.com
+sa.com
+se.net
+uk.com
+uk.net
+us.com
+za.bz
+za.com
+
+// No longer operated by CentralNic, these entries should be adopted and/or removed by current operators
+// Submitted by Gavin Brown
+ar.com
+hu.com
+kr.com
+no.com
+qc.com
+uy.com
+
+// Africa.com Web Solutions Ltd : https://registry.africa.com
+// Submitted by Gavin Brown
+africa.com
+
+// iDOT Services Limited : http://www.domain.gr.com
+// Submitted by Gavin Brown
+gr.com
+
+// Radix FZC : http://domains.in.net
+// Submitted by Gavin Brown
+in.net
+web.in
+
+// US REGISTRY LLC : http://us.org
+// Submitted by Gavin Brown
+us.org
+
+// co.com Registry, LLC : https://registry.co.com
+// Submitted by Gavin Brown
+co.com
+
+// Roar Domains LLC : https://roar.basketball/
+// Submitted by Gavin Brown
+aus.basketball
+nz.basketball
+
+// BRS Media : https://brsmedia.com/
+// Submitted by Gavin Brown
+radio.am
+radio.fm
+
+// c.la : http://www.c.la/
+c.la
+
+// certmgr.org : https://certmgr.org
+// Submitted by B. Blechschmidt
+certmgr.org
+
+// Cityhost LLC : https://cityhost.ua
+// Submitted by Maksym Rivtin
+cx.ua
+
+// Civilized Discourse Construction Kit, Inc. : https://www.discourse.org/
+// Submitted by Rishabh Nambiar & Michael Brown
+discourse.group
+discourse.team
+
+// Clever Cloud : https://www.clever-cloud.com/
+// Submitted by Quentin Adam
+cleverapps.io
+
+// Clerk : https://www.clerk.dev
+// Submitted by Colin Sidoti
+clerk.app
+clerkstage.app
+*.lcl.dev
+*.lclstage.dev
+*.stg.dev
+*.stgstage.dev
+
+// ClickRising : https://clickrising.com/
+// Submitted by Umut Gumeli
+clickrising.net
+
+// Cloud66 : https://www.cloud66.com/
+// Submitted by Khash Sajadi
+c66.me
+cloud66.ws
+cloud66.zone
+
+// CloudAccess.net : https://www.cloudaccess.net/
+// Submitted by Pawel Panek
+jdevcloud.com
+wpdevcloud.com
+cloudaccess.host
+freesite.host
+cloudaccess.net
+
+// cloudControl : https://www.cloudcontrol.com/
+// Submitted by Tobias Wilken
+cloudcontrolled.com
+cloudcontrolapp.com
+
+// Cloudera, Inc. : https://www.cloudera.com/
+// Submitted by Kedarnath Waikar
+*.cloudera.site
+
+// Cloudflare, Inc. : https://www.cloudflare.com/
+// Submitted by Cloudflare Team
+pages.dev
+trycloudflare.com
+workers.dev
+
+// Clovyr : https://clovyr.io
+// Submitted by Patrick Nielsen
+wnext.app
+
+// co.ca : http://registry.co.ca/
+co.ca
+
+// Co & Co : https://co-co.nl/
+// Submitted by Govert Versluis
+*.otap.co
+
+// i-registry s.r.o. : http://www.i-registry.cz/
+// Submitted by Martin Semrad
+co.cz
+
+// CDN77.com : http://www.cdn77.com
+// Submitted by Jan Krpes
+c.cdn77.org
+cdn77-ssl.net
+r.cdn77.net
+rsc.cdn77.org
+ssl.origin.cdn77-secure.org
+
+// Cloud DNS Ltd : http://www.cloudns.net
+// Submitted by Aleksander Hristov
+cloudns.asia
+cloudns.biz
+cloudns.club
+cloudns.cc
+cloudns.eu
+cloudns.in
+cloudns.info
+cloudns.org
+cloudns.pro
+cloudns.pw
+cloudns.us
+
+// CNPY : https://cnpy.gdn
+// Submitted by Angelo Gladding
+cnpy.gdn
+
+// Codeberg e. V. : https://codeberg.org
+// Submitted by Moritz Marquardt
+codeberg.page
+
+// CoDNS B.V.
+co.nl
+co.no
+
+// Combell.com : https://www.combell.com
+// Submitted by Thomas Wouters