Add files via upload
diff --git a/mpw_precheck/LICENSE b/mpw_precheck/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/mpw_precheck/LICENSE
@@ -0,0 +1,201 @@
+                                 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/mpw_precheck/README.md b/mpw_precheck/README.md
new file mode 100644
index 0000000..f70c756
--- /dev/null
+++ b/mpw_precheck/README.md
@@ -0,0 +1,151 @@
+# MPW Precheck
+
+## Prerequisites
+
+- Docker
+
+## Setup
+
+### Docker
+
+You can either build the docker locally or fetch it from dockerhub.
+
+#### Build Docker Locally
+
+To build the necessary docker locally, run:
+
+```bash
+    cd dependencies
+    sh build-docker.sh
+```
+
+#### Pull Docker from Dockerhub
+
+To pull the necessary docker from [dockerhub](https://hub.docker.com/repository/docker/efabless/mpw_precheck/tags?page=1&ordering=last_updated), run:
+
+```bash
+    docker pull efabless/mpw_precheck:latest
+```
+
+### Install the PDK
+
+If you don't have the skywater-pdk installed, run:
+
+```bash
+    export PDK_ROOT=<absolute path to where skywater-pdk and open_pdks will reside>
+    cd dependencies
+    sh build-pdk.sh
+```
+
+## Before Using
+
+- Before you run the precheck tool, make sure you go through https://opensource.google/docs/releasing/preparing/ and cover the requirements.
+
+- Overwrite `verilog/gl/user_project_wrapper.v` with your synthesized netlist **make sure the netlist includes power information**. Otherwise, point to it properly in your `info.yaml`. You can alternatively use spice files for
+  both `caravel` and `user_project_wrapper`. Keep on reading for this point to make more sense.
+
+- Make sure you have the top level GDS-II under a directory called `gds/`; thus containing `gds/user_project_wrapper.gds`, this directory should be compressed and the script will use your Makefile to uncompress it.
+
+- Please create a file `./third_party/used_external_repos.csv` and add to it all `repository name,commit hash` for any external github repository that you are using to build this project.
+
+- Please include any useful statistics about your design, i.e. cell count, core utilization, etc. in a `.csv` file under `./signoff/<macro-name>/final_summary_report.csv`. If you're using OpenLANE then, this file should be created
+  automatically in `<run path>/reports/final_summary_report.csv`.
+
+## What Does the Script Do?
+
+It runs a sequence of checks and aborts with the appropriate error message(s) if any of them fails.
+
+The steps are as follows:
+
+- **License**:
+    - The root directory of the project, submodules and third party libraries contain at least one approved license and does not contain any prohibitted license
+    - All source files contain an approved SPDX License and Copyright Headers
+- **Manifest**:
+    - Caravel version used in development is the latest
+- **Makefile**:
+    - Makefile targets contain at least compression and uncompression for the user_project_wrapper.gds file
+- **Defaults**:
+    - Contents of the project are different from the default content in [caravel_user_project](https://github.com/efabless/caravel_user_project.git) for digital projects
+      and [caravel_user_project_analog](https://github.com/efabless/caravel_user_project_analog.git)
+    - The info.yaml must contain fields that different from the default fields
+    - The user_project_wrapper.gds must be different from the default one found in [caravel_user_project](https://github.com/efabless/caravel_user_project.git) for digital projects
+      and [caravel_user_project_analog](https://github.com/efabless/caravel_user_project_analog.git) for analog projects
+- **Documentation**:
+    - Documentation file README.md exists and does not use any non-inclusive language
+- **Consistency**:
+    - Runs a series of checks on the user netlist (user_project_wrapper/user_analog_project_wrapper), and the top netlist (caravel/caravan) to make sure that both conform to the constraints put by the golden wrapper.
+        - Both Netlists share the following checks:
+            - Modeling check: check netlist is structural and doesn't contain behavioral constructs
+            - Complexity check: check netlist isn't empty and contains at least eight instances
+        - Remaining Top Netlist checks:
+            - Sub-module hooks: check the user wrapper submodule port connections match the golden wrapper ports
+            - Power check: check all submodules in the netlist are connected to power
+        - Remaining User Netlist checks:
+            - Ports check: check netlist port names match the golden wrapper ports
+            - Layout check: check netlist matches the provided user wrapper layout in terms of the number of instances, and the instance names
+- **XOR**:
+    - No modification in the user_project_wrapper(versus default user_project_wrapper.gds in [caravel_user_project](https://github.com/efabless/caravel_user_project.git) for digital projects
+      and [caravel_user_project_analog](https://github.com/efabless/caravel_user_project_analog.git) for analog projects) outside the user defined area lower left corner (0,0) and upper right corner (2920, 3520)
+- **MagicDRC**:
+    - The user_project_wrapper.gds does not have any DRC violations(using magic vlsi tool)
+- **KlayoutFEOLDRC**:
+    - The user_project_wrapper.gds does not have any DRC violations(using klayout) in the [_Front End Of Line_ layers](https://skywater-pdk.readthedocs.io/en/latest/rules/summary.html#id3)
+- **KlayoutOffgrid**:
+    - The user_project_wrapper.gds does not contain any shapes that have offgrid violations(rules [x.1b, x.3a, x.2, x.2c](https://skywater-pdk.readthedocs.io/en/latest/rules/periphery.html))
+- **KlayoutMetalMinimumClearAreaDensity**:
+    - The user_project_wrapper.gds has metal density (for each of the 5 metal layers) that is the lower than the maximum metal density specified by
+      the [li1.pd.ld, m1.pd.ld, m2.pd.ld, m3.pd.ld, m4.pd.ld, m5.pd.ld rules](https://skywater-pdk.readthedocs.io/en/latest/rules/periphery.html)
+
+## Current Assumptions
+
+- The user module name is `user_project_wrapper` (or `user_analog_project_wrapper' for caravel_user_project_analog)
+- Caravel is submoduled inside the user project or installed at a different path specified by CARAVEL_ROOT.
+
+## How To Run
+
+Mount the docker file:
+
+```bash
+export PDK_ROOT=<Absolute path to parent of sky130A. Installed PDK root.>
+export INPUT_DIRECTORY=<Absolute path to the user project path>
+# if caravel is submoduled under the user project, run "export CARAVEL_ROOT=$INPUT_DIRECTORY/caravel"
+export CARAVEL_ROOT=<Absolute path to caravel>
+sh docker-mount.sh
+```
+
+Run the following command:
+
+```
+usage: mpw_precheck.py [-h] --input_directory INPUT_DIRECTORY --caravel_root CARAVEL_ROOT --pdk_root PDK_ROOT 
+                       [--output_directory OUTPUT_DIRECTORY] [--private] [check [check ...]]
+
+Runs the precheck tool by calling the various checks in order.
+
+positional arguments:
+
+  check                 Checks to be ran by the precheck (default: None)
+
+optional arguments:
+
+  -h, --help            show this help message and exit
+  
+  --input_directory INPUT_DIRECTORY, -i INPUT_DIRECTORY
+                        INPUT_DIRECTORY Absolute Path to the project. (default: None)
+  
+  --caravel_root CARAVEL_ROOT, -cr CARAVEL_ROOT
+                        CARAVEL_ROOT Absolute Path to caravel. (default: None)
+  
+  --pdk_root PDK_ROOT, -p PDK_ROOT
+                        PDK_ROOT, points to pdk installation path (default: None)
+  
+  --output_directory OUTPUT_DIRECTORY, -o OUTPUT_DIRECTORY
+                        Output Directory,
+                        default=<input_directory>/precheck_results. (default:None)
+  
+  --private             If provided, precheck skips [License, Defaults, Documentation] 
+                        checks used to qualify the project to as an Open Source Project (default: False)
+```
+
+## How to Troubleshoot Issues with Precheck
+
+See the following [document](./debug_precheck.md) for guidance on troubleshooting issues with precheck.
\ No newline at end of file
diff --git a/mpw_precheck/check_manager/__init__.py b/mpw_precheck/check_manager/__init__.py
new file mode 100644
index 0000000..cdef7c0
--- /dev/null
+++ b/mpw_precheck/check_manager/__init__.py
@@ -0,0 +1,388 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# 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.
+# SPDX-License-Identifier: Apache-2.0
+
+import logging
+import os
+import sys
+from collections import OrderedDict
+from pathlib import Path
+
+from checks import defaults_check
+from checks import documentation_check
+from checks import makefile_check
+from checks import manifest_check
+from checks.consistency_check import consistency_check
+from checks.drc_checks.klayout import klayout_gds_drc_check
+from checks.drc_checks.magic import magic_gds_drc_check
+from checks.license_check import license_check
+from checks.utils import utils
+from checks.xor_check import xor_check
+
+
+class CheckManagerNotFound(Exception):
+    pass
+
+
+class CheckManager:
+    def __init__(self, precheck_config, project_config):
+        self.precheck_config = precheck_config
+        self.project_config = project_config
+        self.result = True
+
+    def run(self):
+        """
+        Define the check running steps. This version does nothing and is intended to be implemented by subclasses.
+        """
+
+
+class Consistency(CheckManager):
+    __ref__ = 'consistency'
+    __surname__ = 'Consistency'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+        self.output_directory = self.precheck_config['output_directory']
+        self.input_directory = self.precheck_config['input_directory']
+
+    def run(self):
+        empty_wrapper_url = f"{self.project_config['link_prefix']}/verilog/rtl/__{self.project_config['user_module']}.v"
+        golden_wrapper_file_path = self.output_directory / 'outputs' / f"__{self.project_config['user_module']}.v"
+        utils.download_gzip_file_from_url(empty_wrapper_url, golden_wrapper_file_path)
+        defines_url = f"{self.project_config['link_prefix']}/verilog/rtl/defines.v"
+        defines_file_path = self.output_directory / 'outputs/defines.v'
+        utils.download_gzip_file_from_url(defines_url, defines_file_path)
+        self.result = consistency_check.main(input_directory=self.input_directory,
+                                             output_directory=self.output_directory,
+                                             project_config=self.project_config,
+                                             golden_wrapper_netlist=golden_wrapper_file_path,
+                                             defines_file_path=defines_file_path)
+        if self.result:
+            logging.info("{{CONSISTENCY CHECK PASSED}} The user netlist and the top netlist are valid.")
+        else:
+            logging.warning("{{CONSISTENCY CHECK FAILED}} The user netlist and the top netlist are not valid.")
+        return self.result
+
+
+class Defaults(CheckManager):
+    __ref__ = 'default'
+    __surname__ = 'Default'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+
+    def run(self):
+        default_readme_result = defaults_check.has_default_readme(self.precheck_config['input_directory'], self.precheck_config['default_content'])
+        if default_readme_result:
+            logging.info("{{README DEFAULT CHECK PASSED}} Project 'README.md' was modified and is not identical to the default 'README.md'")
+        else:
+            self.result = False
+            logging.warning("{{README DEFAULT CHECK FAILED}} Project 'README.md' was not modified and is identical to the default 'README.md'")
+
+        default_content_result = defaults_check.has_default_content(self.precheck_config['input_directory'], self.precheck_config['default_content'])
+        if default_content_result:
+            logging.info("{{CONTENT DEFAULT CHECK PASSED}} Project 'gds' was modified and is not identical to the default 'gds'")
+        else:
+            self.result = False
+            logging.warning("{{CONTENT DEFAULT CHECK FAILED}} Project 'gds' was not modified and is identical to the default 'gds'")
+
+        return self.result
+
+
+class Documentation(CheckManager):
+    __ref__ = 'documentation'
+    __surname__ = 'Documentation'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+
+    def run(self):
+        self.result = documentation_check.main(input_directory=self.precheck_config['input_directory'])
+        if self.result:
+            logging.info("{{DOCUMENTATION CHECK PASSED}} Project documentation is appropriate.")
+        else:
+            logging.warning("{{DOCUMENTATION CHECK FAILED}} Project documentation is not appropriate.")
+        return self.result
+
+
+class KlayoutDRC(CheckManager):
+    __ref__ = None
+    __surname__ = None
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+        self.gds_input_file_path = self.precheck_config['input_directory'] / f"gds/{project_config['user_module']}.gds"
+        self.drc_script_path = ""
+        self.klayout_cmd_extra_args = []
+
+    def run(self):
+        if not self.gds_input_file_path.exists():
+            self.result = False
+            logging.warning(f"{{{{{self.__surname__} CHECK FAILED}}}} {self.gds_input_file_path.name}, GDS file was not found.")
+            return self.result
+
+        self.result = klayout_gds_drc_check.klayout_gds_drc_check(self.__ref__,
+                                                                  self.drc_script_path,
+                                                                  self.gds_input_file_path,
+                                                                  self.precheck_config['output_directory'],
+                                                                  self.klayout_cmd_extra_args)
+        if self.result:
+            logging.info(f"{{{{{self.__surname__} CHECK PASSED}}}} The GDS file, {self.gds_input_file_path.name}, has no DRC violations.")
+        else:
+            logging.warning(f"{{{{{self.__surname__} CHECK FAILED}}}} The GDS file, {self.gds_input_file_path.name}, has DRC violations.")
+        return self.result
+
+
+class KlayoutBEOL(KlayoutDRC):
+    __ref__ = 'klayout_beol'
+    __surname__ = 'Klayout BEOL'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+        self.drc_script_path = Path(__file__).parent.parent / "checks/tech-files/sky130A_mr.drc"
+        self.klayout_cmd_extra_args = ['-rd', 'beol=true']
+
+
+class KlayoutFEOL(KlayoutDRC):
+    __ref__ = 'klayout_feol'
+    __surname__ = 'Klayout FEOL'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+        self.drc_script_path = Path(__file__).parent.parent / "checks/tech-files/sky130A_mr.drc"
+        self.klayout_cmd_extra_args = ['-rd', 'feol=true']
+
+
+# TODO: discuss migration to tapeout and removal from precheck
+class KlayoutFOMDensity(KlayoutDRC):
+    __ref__ = 'klayout_fom_density'
+    __surname__ = 'Klayout Field Oxide Mask Density'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+        self.drc_script_path = Path(__file__).parent.parent / "checks/drc_checks/klayout/fom_density.lydrc"
+
+
+class KlayoutMetalMinimumClearAreaDensity(KlayoutDRC):
+    __ref__ = 'klayout_met_min_ca_density'
+    __surname__ = 'Klayout Metal Minimum Clear Area Density'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+        self.drc_script_path = Path(__file__).parent.parent / "checks/drc_checks/klayout/met_min_ca_density.lydrc"
+
+
+class KlayoutOffgrid(KlayoutDRC):
+    __ref__ = 'klayout_offgrid'
+    __surname__ = 'Klayout Offgrid'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+        self.drc_script_path = Path(__file__).parent.parent / "checks/drc_checks/klayout/offgrid.lydrc"
+
+
+class KlayoutPinLabelPurposesOverlappingDrawing(KlayoutDRC):
+    __ref__ = 'klayout_pin_label_purposes_overlapping_drawing'
+    __surname__ = 'Klayout Pin Label Purposes Overlapping Drawing'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+        self.drc_script_path = Path(__file__).parent.parent / "checks/drc_checks/klayout/pin_label_purposes_overlapping_drawing.rb.drc"
+        self.klayout_cmd_extra_args = ['-rd', f'top_cell_name={self.project_config["user_module"]}']
+
+
+class KlayoutZeroArea(KlayoutDRC):
+    __ref__ = 'klayout_zeroarea'
+    __surname__ = 'Klayout ZeroArea'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+        self.drc_script_path = Path(__file__).parent.parent / "checks/drc_checks/klayout/zeroarea.rb.drc"
+        self.klayout_cmd_extra_args = ["-rd", f"""cleaned_output={self.precheck_config['output_directory'] / 'outputs' / f"{self.gds_input_file_path.stem}_no_zero_areas.gds"}"""]
+
+
+class License(CheckManager):
+    __ref__ = 'license'
+    __surname__ = 'License'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+
+    def run(self):
+        license_check_result = license_check.verify_license_compliance(self.precheck_config['input_directory'])
+        if license_check_result:
+            logging.info("{{MAIN LICENSE CHECK PASSED}} An approved LICENSE was found in project root.")
+        else:
+            self.result = False
+            logging.warning("{{MAIN LICENSE CHECK FAILED}} A prohibited LICENSE was found in project root.")
+
+        submodules_license_check_result = license_check.check_submodules_licenses(self.precheck_config['input_directory'])
+        if submodules_license_check_result:
+            logging.info("{{SUBMODULES LICENSE CHECK PASSED}} No prohibited LICENSE file(s) was found in project submodules")
+        else:
+            self.result = False
+            logging.warning("{{SUBMODULES LICENSE CHECK FAILED}} A prohibited LICENSE file(s) was found in project submodules")
+
+        third_party_libraries_path = self.precheck_config['input_directory'] / 'third_party'
+        if third_party_libraries_path.exists():
+            third_party_libs_license_check_result = license_check.check_third_party_libs_licenses(third_party_libraries_path)
+            if third_party_libs_license_check_result:
+                logging.info("{{THIRD PARTY LIBRARIES LICENSE CHECK PASSED}} No prohibited LICENSE file(s) was found in project 'third_party' directory")
+            else:
+                self.result = False
+                logging.warning("{{THIRD PARTY LIBRARIES LICENSE CHECK FAILED}} A prohibited LICENSE file(s) was found in project 'third_party' directory")
+
+        spdx_non_compliant_list = license_check.check_dir_spdx_compliance([], self.precheck_config['input_directory'], license_check_result)
+        if not spdx_non_compliant_list:
+            logging.info("{{SPDX COMPLIANCE CHECK PASSED}} Project is compliant with the SPDX Standard")
+        else:
+            paths = [str(x) for x in spdx_non_compliant_list[:15]] if spdx_non_compliant_list.__len__() >= 15 else [str(x) for x in spdx_non_compliant_list]
+            logging.warning(f"{{{{SPDX COMPLIANCE CHECK FAILED}}}} Found {spdx_non_compliant_list.__len__()} non-compliant file(s) with the SPDX Standard.")
+            logging.info(f"SPDX COMPLIANCE: NON-COMPLIANT FILE(S) PREVIEW: {paths}")
+            try:
+                if not self.precheck_config['output_directory'].exists():  # note: needed if check is used independently to create output dirs
+                    os.makedirs(self.precheck_config['output_directory'])
+                spdx_compliance_report_path = self.precheck_config['output_directory'] / "logs/spdx_compliance_report.log"
+                with open(spdx_compliance_report_path, mode='w+') as f:
+                    logging.info(f"For the full SPDX compliance report check: {spdx_compliance_report_path}")
+                    [f.write(f"{str(x)}\n") for x in spdx_non_compliant_list]
+            except OSError as os_error:
+                logging.fatal(f"{{{{SPDX COMPLIANCE EXCEPTION}}}} Failed to create SPDX compliance report: {os_error}")
+                sys.exit(253)
+        return self.result
+
+
+class MagicDRC(CheckManager):
+    __ref__ = 'magic_drc'
+    __surname__ = 'Magic DRC'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+        self.gds_input_file_path = self.precheck_config['input_directory'] / f"gds/{self.project_config['user_module']}.gds"
+
+    def run(self):
+        if not self.gds_input_file_path.exists():
+            self.result = False
+            logging.warning(f"{{{{MAGIC DRC CHECK FAILED}}}} The GDS file, {self.gds_input_file_path.name}, was not found.")
+            return self.result
+
+        self.result = magic_gds_drc_check.magic_gds_drc_check(self.gds_input_file_path,
+                                                              self.project_config['user_module'],
+                                                              self.precheck_config['pdk_root'],
+                                                              self.precheck_config['output_directory'])
+        if self.result:
+            logging.info(f"{{{{MAGIC DRC CHECK PASSED}}}} The GDS file, {self.gds_input_file_path.name}, has no DRC violations.")
+        else:
+            logging.warning(f"{{{{MAGIC DRC CHECK FAILED}}}} The GDS file, {self.gds_input_file_path.name}, has DRC violations.")
+        return self.result
+
+
+class Makefile(CheckManager):
+    __ref__ = 'makefile'
+    __surname__ = 'Makefile'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+
+    def run(self):
+        self.result = makefile_check.main(input_directory=self.precheck_config['input_directory'])
+        if self.result:
+            logging.info("{{MAKEFILE CHECK PASSED}} Makefile valid.")
+        else:
+            logging.warning("{{MAKEFILE CHECK FAILED}} Makefile file is not valid.")
+        return self.result
+
+
+class Manifest(CheckManager):
+    __ref__ = 'manifest'
+    __surname__ = 'Manifest'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+
+    def run(self):
+        caravel_root = self.precheck_config['caravel_root']
+        self.result = manifest_check.main(input_directory=caravel_root, output_directory=self.precheck_config['output_directory'], manifest_source='master')
+        if self.result:
+            logging.info("{{MANIFEST CHECKS PASSED}} Manifest Checks Passed. Caravel version matches.")
+        else:
+            logging.warning("{{MANIFEST CHECKS FAILED}} Manifest checks failed. Caravel version does not match. Please rebase your Repository to the latest Caravel master.")
+        return self.result
+
+
+class XOR(CheckManager):
+    __ref__ = 'xor'
+    __surname__ = 'XOR'
+
+    def __init__(self, precheck_config, project_config):
+        super().__init__(precheck_config, project_config)
+
+    def run(self):
+        # TODO(nofal): This should be a single file across the entire precheck
+        # We should have a good reason to have it in the XORCheck, it should be
+        # part of a constant variables file that defines project-wide variables
+        magicrc_file_path = self.precheck_config['pdk_root'] / 'sky130A' / 'libs.tech' / 'magic' / 'sky130A.magicrc'
+        empty_wrapper_url = f"{self.project_config['link_prefix']}/gds/{self.project_config['golden_wrapper']}.gds.gz"
+        gds_golden_wrapper_file_path = self.precheck_config['output_directory'] / 'outputs' / f"{self.project_config['golden_wrapper']}.gds"
+
+        utils.download_gzip_file_from_url(empty_wrapper_url, gds_golden_wrapper_file_path)
+        self.result = xor_check.gds_xor_check(self.precheck_config['input_directory'], self.precheck_config['output_directory'],
+                                              magicrc_file_path, gds_golden_wrapper_file_path, self.project_config)
+        if self.result:
+            logging.info("{{XOR CHECK PASSED}} The GDS file has no XOR violations.")
+        else:
+            logging.warning("{{XOR CHECK FAILED}} The GDS file has non-conforming geometries.")
+        return self.result
+
+
+# Note: list of checks for an public (open source) project
+open_source_checks = OrderedDict([
+    (License.__ref__, License),
+    (Manifest.__ref__, Manifest),
+    (Makefile.__ref__, Makefile),
+    (Defaults.__ref__, Defaults),
+    (Documentation.__ref__, Documentation),
+    (Consistency.__ref__, Consistency),
+    (XOR.__ref__, XOR),
+    (MagicDRC.__ref__, MagicDRC),
+    (KlayoutFEOL.__ref__, KlayoutFEOL),
+    (KlayoutBEOL.__ref__, KlayoutBEOL),
+    (KlayoutOffgrid.__ref__, KlayoutOffgrid),
+    (KlayoutMetalMinimumClearAreaDensity.__ref__, KlayoutMetalMinimumClearAreaDensity),
+    (KlayoutPinLabelPurposesOverlappingDrawing.__ref__, KlayoutPinLabelPurposesOverlappingDrawing),
+    (KlayoutZeroArea.__ref__, KlayoutZeroArea)
+])
+
+# Note: list of checks for a private project
+private_checks = OrderedDict([
+    (Manifest.__ref__, Manifest),
+    (Makefile.__ref__, Makefile),
+    (Consistency.__ref__, Consistency),
+    (XOR.__ref__, XOR),
+    (MagicDRC.__ref__, MagicDRC),
+    (KlayoutFEOL.__ref__, KlayoutFEOL),
+    (KlayoutBEOL.__ref__, KlayoutBEOL),
+    (KlayoutOffgrid.__ref__, KlayoutOffgrid),
+    (KlayoutMetalMinimumClearAreaDensity.__ref__, KlayoutMetalMinimumClearAreaDensity),
+    (KlayoutPinLabelPurposesOverlappingDrawing.__ref__, KlayoutPinLabelPurposesOverlappingDrawing),
+    (KlayoutZeroArea.__ref__, KlayoutZeroArea)
+])
+
+
+def get_check_manager(name, *args, **kwargs):
+    check_managers = args[0]['check_managers']
+    if name.lower() in check_managers.keys():
+        return check_managers[name.lower()](*args, **kwargs)
+    else:
+        raise CheckManagerNotFound(f"The check '{name.lower()}' does not exist")
diff --git a/mpw_precheck/check_manager/__pycache__/__init__.cpython-36.pyc b/mpw_precheck/check_manager/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000..80da7f7
--- /dev/null
+++ b/mpw_precheck/check_manager/__pycache__/__init__.cpython-36.pyc
Binary files differ
diff --git a/mpw_precheck/debug_precheck.md b/mpw_precheck/debug_precheck.md
new file mode 100644
index 0000000..ca0639b
--- /dev/null
+++ b/mpw_precheck/debug_precheck.md
@@ -0,0 +1,3 @@
+### Always check the $INPUT_DIRECTORY/checks folder for relevant log files
+18 bit adder
+
diff --git a/mpw_precheck/debug_precheck.md_bak b/mpw_precheck/debug_precheck.md_bak
new file mode 100644
index 0000000..72cceae
--- /dev/null
+++ b/mpw_precheck/debug_precheck.md_bak
@@ -0,0 +1,115 @@
+### Always check the $INPUT_DIRECTORY/checks folder for relevant log files
+
+# What to do if:
+
+#### License check failed
+
+Include a LICENSE file in
+
+- The root directory in your project
+- each directory under  `third_party`
+- each git submodule (Any directory that contains a .git folder)
+
+Make sure it is one of the [approved licenses](base_checks/_licenses/_approved_licenses)
+
+#### SPDX Compliance failed
+
+check the `$INPUT_DIRECTORY/checks/spdx_compliance_report.log` for the non-compliant files. Then add SPDX header in the beginning of all of those files.
+
+#### Manifest check failed
+
+Pull and checkout the master branch in your caravel directory
+
+#### Compliance Check failed
+
+- Remove all non-inclusive keywords in all of your files those are
+    - blacklist
+    - whitelist
+    - slave
+
+- Include `verify` and `clean` targets in your makefile
+
+#### Fuzzy consistency check failed
+
+This indicates a serious issue with the design please check [information about fuzzy checks in README.md](README.md#fuzzy-consistency-checks)
+
+#### XOR check failed
+
+- Load `$INPUT_DIRECTORY/checks/<design_name>.xor.gds` into [klayout](#how-to-view-a-gds) and then you can see where exactly your design violates the boundary set for the user project
+
+- Read xor.log and check the specific coordiantes of your violations
+
+- Read xor_total.txt to find out how many shapes are not respecting the user space boundary
+
+#### DRC Check failed
+
+###### Magic drc check
+
+To debug drc errors you can open up the `$INPUT_DIRECTORY/checks/magic_drc.log` folder and you can view them via the .magic.drc.mag file which is loadable in magic
+
+Also there is a listing of all the failed parts of the design in $INPUT_DIRECTORY/checks/<design_name>.magic.drc
+
+If you are having a huge number of DRC violations there is a good chance you are using an SRAM block that is not the latest version in efabless/sram_sky130_macros . Just pull the master branch and include one of those updated macros instead
+
+###### Klayout drc check (DISABLED BY DEFAULT)
+
+Load marker databases provided by the drc check into klayout (Or whichever layout editor/viewer you wish to use) along with the gds file (user_project_wrapper.gds)
+and you can view the violations on top of your design layout
+[using klayout](#how-to-load-marker-database-files)
+
+Investigate the specific coordinates of the failures in the design gds. Use `$INPUT_DIRECTORY/checks/<design_name>_klayout.lydrc` file as a marker database file loadable in [klayout](#how-to-load-marker-database-files)
+
+#### Klayout FOM density check failed
+
+Investigate the specific coordinates and types of the violations via loading the marker database file `$INPUT_DIRECTORY/checks/fom_density_check.xml` into [ klayout ](#how-to-load-marker-database-files)
+along with the design
+
+[use klayout](#how-to-load-marker-database-files) to view the marker database file which is in checks directory
+
+#### Default content check failed
+
+Use non-default values in info.yaml for the following fields
+
+- owner
+- orgranization
+- organization_url
+- description
+- git_url
+- project_name
+
+Submit content other than the default content
+
+- gds
+- lef
+- def
+- mag
+- maglef
+- verilog/rtl
+- verilog/gl
+- spi/lvs
+
+### Errors specific to running precheck on efabless platform:
+
+#### exception code 254
+
+There is a problem cloning your git repo using the provided git repo url
+
+Common mistakes
+
+- Using ssh as a git url
+- Including private submodules that require credentials to get cloned
+
+#### exception code 1
+
+there is a problem with your project's name, the project's name is supposed to not have a space in it. You should create another project with a name that does not contain spaces and point your mpw-two request to the new one instead.
+
+## Using klayout:
+
+### How to view a gds
+
+    klayout <gds_file>
+
+### How to load marker database files
+
+    klayout <gds_file> -m <marker_database_file>
+
diff --git a/mpw_precheck/dependencies/Dockerfile b/mpw_precheck/dependencies/Dockerfile
new file mode 100644
index 0000000..adb8156
--- /dev/null
+++ b/mpw_precheck/dependencies/Dockerfile
@@ -0,0 +1,91 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# 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.
+# SPDX-License-Identifier: Apache-2.0
+
+# Note: to get cores or use gdb start like:   docker run --ulimit core=-1 --cap-add SYS_PTRACE ...
+
+# syntax = docker/dockerfile:1.0-experimental
+FROM centos:centos7 as build
+
+# Common development tools and libraries (kitchen sink approach)
+RUN yum -y install centos-release-scl && \
+    yum -y install devtoolset-8 devtoolset-8-libatomic-devel && \
+    yum clean all && \
+    rm -rf /var/cache/yum
+
+# Python 3.6
+RUN yum install -y https://repo.ius.io/ius-release-el7.rpm && \
+    yum clean all && \
+    rm -rf /var/cache/yum
+RUN yum install -y python36u python36u-devel python36u-libs python36u-pip python36u-tkinter && \
+    yum clean all && \
+    rm -rf /var/cache/yum
+RUN alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 60
+RUN pip3.6 install --no-cache-dir --upgrade pip
+RUN pip install --no-cache-dir awscli boto3 colorama coloredlogs klayout numpy pyyaml requests strsimpy
+
+# Install pyverilog & pyspice
+RUN pip install --no-cache-dir https://github.com/PyHDI/Pyverilog/archive/develop.zip && \
+    pip install --no-cache-dir pyspice
+
+# General Utils
+RUN yum install -y ruby tcllib git tcl tk libjpeg libgomp libXext libSM libXft libffi cairo gettext Xvfb gcc-c++ patch \
+    gdb.x86_64 file.x86_64 time.x86_64 && \
+    yum clean all && \
+    rm -rf /var/cache/yum
+
+# uninstall current version of git and install latest version instead
+RUN yum -y remove git && yum -y remove git-* && \
+    yum -y install https://packages.endpoint.com/rhel/7/os/x86_64/endpoint-repo-1.9-1.x86_64.rpm && \
+    yum -y install git && \
+    yum clean all && \
+    rm -rf /var/cache/yum
+
+# Install iverilog
+RUN yum install -y iverilog && \
+    yum clean all && \
+    rm -rf /var/cache/yum
+
+# Magic Dependencies
+RUN yum install -y libglu tcl tk csh wget tcl-devel tk-devel libX11-devel ncurses-devel \
+    yum clean all && \
+    rm -rf /var/cache/yum
+
+# Install Klayout
+RUN yum install -y https://www.klayout.org/downloads/CentOS_7/klayout-0.27.3-0.x86_64.rpm && \
+    yum clean all && \
+    rm -rf /var/cache/yum
+
+# Clone Magic
+RUN git clone --depth=1 --branch 8.3.220 https://github.com/RTimothyEdwards/magic.git ./magic_8_3_220
+WORKDIR magic_8_3_220
+# Build Magic
+# '-O0' : disable optimization so vars visible in gdb (not optimized away). Already the default of gcc.
+# -g    : keep debugging info, incl. symbols.
+# --disable-locking : recommended by tim due to cell-depth of sky130A PDK cells.
+# scl enable devtoolset-8 --  : use the devtoolset-8 gcc-8.x (not the native gcc-4.x).
+# Note: to use gdb start like:   docker run --ulimit core=-1 --cap-add SYS_PTRACE ...
+RUN scl enable devtoolset-8 -- ./configure --disable-locking --prefix=/build CFLAGS='-g -O0 -m64 -fPIC' && \
+    scl enable devtoolset-8 -- make -j4 && \
+    scl enable devtoolset-8 -- make install
+
+ENV PRECHECKER_ROOT=/opt/
+ENV BUILD_PATH=/build/
+ENV PATH=$PRECHECKER_ROOT:$PRECHECKER_ROOT/scripts:$BUILD_PATH/bin:$BUILD_PATH/bin/Linux-x86_64:$BUILD_PATH/pdn/scripts:$PATH
+ENV LD_LIBRARY_PATH=$BUILD_PATH/lib:$BUILD_PATH/lib/Linux-x86_64:$LD_LIBRARY_PATH
+ENV MANPATH=$BUILD_PATH/share/man:$MANPATH
+ENV LANG en_US.UTF-8
+ENV LC_ALL en_US.UTF-8
+ENV LC_CTYPE en_US.UTF-8
+WORKDIR $PRECHECKER_ROOT
\ No newline at end of file
diff --git a/mpw_precheck/dependencies/Makefile b/mpw_precheck/dependencies/Makefile
new file mode 100644
index 0000000..df3e522
--- /dev/null
+++ b/mpw_precheck/dependencies/Makefile
@@ -0,0 +1,72 @@
+# Copyright 2020 Efabless Corporation
+#
+# 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.
+
+THREADS ?= $(shell nproc)
+STD_CELL_LIBRARY ?= sky130_fd_sc_hd
+SPECIAL_VOLTAGE_LIBRARY ?= sky130_fd_sc_hvl
+IO_LIBRARY ?= sky130_fd_io
+
+SKYWATER_COMMIT ?= bb2f842ac8d1b750677ca25bc71fb312859edb82
+OPEN_PDKS_COMMIT ?= 44c13e2256d5907090d6a2a62d9b9f8ddf23758d
+
+.DEFAULT_GOAL := pdk
+
+.PHONY: pdk
+pdk: skywater-pdk skywater-library open_pdks build-pdk
+
+$(PDK_ROOT)/skywater-pdk:
+	git clone https://github.com/google/skywater-pdk.git $(PDK_ROOT)/skywater-pdk
+
+.PHONY: skywater-pdk
+skywater-pdk: check-env $(PDK_ROOT)/skywater-pdk
+	cd $(PDK_ROOT)/skywater-pdk && \
+		git checkout main && git pull && \
+		git checkout -qf $(SKYWATER_COMMIT)
+
+.PHONY: skywater-library
+skywater-library: check-env $(PDK_ROOT)/skywater-pdk
+	cd $(PDK_ROOT)/skywater-pdk && \
+		git submodule update --init libraries/$(STD_CELL_LIBRARY)/latest && \
+		git submodule update --init libraries/$(IO_LIBRARY)/latest && \
+		git submodule update --init libraries/$(SPECIAL_VOLTAGE_LIBRARY)/latest
+
+### OPEN_PDKS
+$(PDK_ROOT)/open_pdks:
+	git clone https://github.com/RTimothyEdwards/open_pdks.git $(PDK_ROOT)/open_pdks
+
+.PHONY: open_pdks
+open_pdks: check-env $(PDK_ROOT)/open_pdks
+	cd $(PDK_ROOT)/open_pdks && \
+		git checkout master && git pull && \
+		git checkout -qf $(OPEN_PDKS_COMMIT)
+
+.PHONY: build-pdk
+build-pdk: check-env $(PDK_ROOT)/open_pdks $(PDK_ROOT)/skywater-pdk
+	[ -d $(PDK_ROOT)/sky130A ] && \
+		(echo "Warning: A sky130A build already exists under $(PDK_ROOT). It will be deleted first!" && \
+		sleep 5 && \
+		rm -rf $(PDK_ROOT)/sky130A) || \
+		true
+	cd $(PDK_ROOT)/open_pdks && \
+		./configure --enable-sky130-pdk=$(PDK_ROOT)/skywater-pdk/libraries --with-sky130-local-path=$(PDK_ROOT) --enable-sram-sky130 && \
+		cd sky130 && \
+		$(MAKE) veryclean && \
+		$(MAKE) && \
+		$(MAKE) install-local && \
+		$(MAKE) clean
+
+check-env:
+ifndef PDK_ROOT
+	$(error PDK_ROOT is undefined, please export it before running make)
+endif
diff --git a/mpw_precheck/dependencies/build-docker.sh b/mpw_precheck/dependencies/build-docker.sh
new file mode 100644
index 0000000..6b70d3c
--- /dev/null
+++ b/mpw_precheck/dependencies/build-docker.sh
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# 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.
+# SPDX-License-Identifier: Apache-2.0
+
+mkdir -p logs/docker
+echo "dir created"
+docker build --rm -t efabless/mpw_precheck:latest . | tee logs/docker/mpw_precheck.build.txt
diff --git a/mpw_precheck/dependencies/build-pdk.sh b/mpw_precheck/dependencies/build-pdk.sh
new file mode 100644
index 0000000..45e3f46
--- /dev/null
+++ b/mpw_precheck/dependencies/build-pdk.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# 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.
+# SPDX-License-Identifier: Apache-2.0
+
+# exit when any command fails
+export RUN_ROOT=$(pwd)
+export IMAGE_NAME=efabless/mpw_precheck:latest
+echo $RUN_ROOT
+echo $PDK_ROOT
+make skywater-pdk
+make skywater-library
+make open_pdks
+docker run -v $(pwd)/..:/opt -v $PDK_ROOT:$PDK_ROOT -e PDK_ROOT=$PDK_ROOT -u $(id -u $USER):$(id -g $USER) $IMAGE_NAME bash -c "cd /opt/dependencies; make build-pdk"
diff --git a/mpw_precheck/dependencies/hooks/build b/mpw_precheck/dependencies/hooks/build
new file mode 100644
index 0000000..facaac7
--- /dev/null
+++ b/mpw_precheck/dependencies/hooks/build
@@ -0,0 +1,4 @@
+#!/bin/bash
+echo $DOCKERFILE_PATH
+echo $IMAGE_NAME
+docker build --rm -t $IMAGE_NAME .
diff --git a/mpw_precheck/dependencies/logs/docker/mpw_precheck.build.txt b/mpw_precheck/dependencies/logs/docker/mpw_precheck.build.txt
new file mode 100644
index 0000000..770dec4
--- /dev/null
+++ b/mpw_precheck/dependencies/logs/docker/mpw_precheck.build.txt
Binary files differ
diff --git a/mpw_precheck/docker-mount.sh b/mpw_precheck/docker-mount.sh
new file mode 100644
index 0000000..2af2e86
--- /dev/null
+++ b/mpw_precheck/docker-mount.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# 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.
+# SPDX-License-Identifier: Apache-2.0
+
+docker run -it -v $(pwd):/opt \
+-v $INPUT_DIRECTORY:$INPUT_DIRECTORY \
+-v $CARAVEL_ROOT:$CARAVEL_ROOT \
+-v $PDK_ROOT:$PDK_ROOT \
+-e INPUT_DIRECTORY=$INPUT_DIRECTORY \
+-e CARAVEL_ROOT=$CARAVEL_ROOT \
+-e PDK_ROOT=$PDK_ROOT \
+-u $(id -u $USER):$(id -g $USER) \
+efabless/mpw_precheck:latest
diff --git a/mpw_precheck/mpw_precheck.py b/mpw_precheck/mpw_precheck.py
new file mode 100644
index 0000000..ea4a807
--- /dev/null
+++ b/mpw_precheck/mpw_precheck.py
@@ -0,0 +1,132 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# 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.
+# SPDX-License-Identifier: Apache-2.0
+
+import argparse
+import datetime
+import logging
+import subprocess
+import sys
+from pathlib import Path
+
+import precheck_logger
+from check_manager import get_check_manager, open_source_checks, private_checks
+from checks.utils.utils import file_hash, get_project_config, uncompress_gds
+
+
+def log_tools_info(pdk_root, tools_info_path, pdks_info_path):
+    with open(tools_info_path, 'w') as tools_info:
+        klayout_version = subprocess.check_output(['klayout', '-v'], encoding='utf-8').replace('KLayout', '').lstrip().rstrip()
+        magic_version = subprocess.check_output(['magic', '--version'], encoding='utf-8').rstrip()
+        tools_info.write(f"KLayout: {klayout_version}\n")
+        tools_info.write(f"Magic: {magic_version}")
+        logging.info(f"{{{{Tools Info}}}} KLayout: v{klayout_version} | Magic: v{magic_version}")
+    with open(pdks_info_path, 'w') as pdks_info:
+        try:
+            pdk_dir = f"{pdk_root}/%s"
+            open_pdks_v_cmd = ['git', '-C', pdk_dir % 'open_pdks', 'rev-parse', '--verify', 'HEAD']
+            skywater_pdk_v_cmd = ['git', '-C', pdk_dir % 'skywater-pdk', 'rev-parse', '--verify', 'HEAD']
+            open_pdks_version = subprocess.check_output(open_pdks_v_cmd, encoding='utf-8').rstrip()
+            skywater_pdk_version = subprocess.check_output(skywater_pdk_v_cmd, encoding='utf-8').rstrip()
+            pdks_info.write(f"Open PDKs {open_pdks_version}\n")
+            pdks_info.write(f"Skywater PDK {skywater_pdk_version}")
+            logging.info(f"{{{{PDKs Info}}}} Open PDKs: {open_pdks_version} | Skywater PDK: {skywater_pdk_version}")
+        except Exception as e:
+            logging.error(f"MPW Precheck failed to get Open PDKs & Skywater PDK versions: {e}")
+
+
+def run_precheck_sequence(precheck_config, project_config):
+    results = {}
+    logging.info(f"{{{{START}}}} Precheck Started, the full log '{precheck_config['log_path'].name}' will be located in '{precheck_config['log_path'].parent}'")
+    logging.info(f"{{{{PRECHECK SEQUENCE}}}} Precheck will run the following checks: {' '.join([get_check_manager(x, precheck_config, project_config).__surname__ for x in precheck_config['sequence']])}")
+    for check_count, entry in enumerate(precheck_config['sequence'], start=1):
+        check = get_check_manager(entry, precheck_config, project_config)
+        if check:
+            logging.info(f"{{{{STEP UPDATE}}}} Executing Check {check_count} of {len(precheck_config['sequence'])}: {check.__surname__}")
+            results[check.__surname__] = check.run()
+
+    logging.info(f"{{{{FINISH}}}} Executing Finished, the full log '{precheck_config['log_path'].name}' can be found in '{precheck_config['log_path'].parent}'")
+    if False not in list(results.values()):
+        logging.info("{{SUCCESS}} All Checks Passed !!!")
+    else:
+        failed_checks = [x for x in results.keys() if results[x] is False]
+        logging.fatal(f"{{{{FAILURE}}}} {len(failed_checks)} Check(s) Failed: {failed_checks} !!!")
+        sys.exit(2)
+
+
+def main(*args, **kwargs):
+    check_managers = private_checks if kwargs['private'] else open_source_checks
+    precheck_config = dict(input_directory=Path(kwargs['input_directory']),
+                           output_directory=Path(kwargs['output_directory']),
+                           caravel_root=Path(kwargs['caravel_root']),
+                           pdk_root=Path(kwargs['pdk_root']),
+                           private=kwargs['private'],
+                           sequence=kwargs['sequence'],
+                           log_path=Path(kwargs['log_path']),
+                           default_content=Path(kwargs['default_content']),
+                           check_managers=check_managers)
+
+    uncompress_gds(precheck_config['input_directory'])
+    project_config = get_project_config(precheck_config['input_directory'])
+
+    gds_info_path = precheck_config['log_path'].parent / 'gds.info'
+    with open(gds_info_path, 'w') as gds_info:
+        user_module_hash = file_hash(f"{precheck_config['input_directory']}/gds/{project_config['user_module']}.gds")
+        gds_info.write(f"{project_config['user_module']}.gds: {user_module_hash}")
+        logging.info(f"{{{{Project GDS Info}}}} {project_config['user_module']}: {user_module_hash}")
+
+    tools_info_path = precheck_config['log_path'].parent / 'tools.info'
+    pdks_info_path = precheck_config['log_path'].parent / 'pdks.info'
+    log_tools_info(precheck_config['pdk_root'], tools_info_path, pdks_info_path)
+
+    gds_file_path = precheck_config['input_directory'] / f"gds/{project_config['user_module']}.gds"
+    compressed_gds_file_path = precheck_config['input_directory'] / f"gds/{project_config['user_module']}.gds.gz"
+    if gds_file_path.exists() and compressed_gds_file_path.exists():
+        logging.fatal("{{GDS VIOLATION}} Both a compressed and an uncompressed version the gds exist, ensure only one design file exists.")
+        sys.exit(255)
+
+    run_precheck_sequence(precheck_config=precheck_config, project_config=project_config)
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description="Runs the precheck tool.")
+    parser.add_argument('--input_directory', '-i', required=True, help="INPUT_DIRECTORY Absolute Path to the project.")
+    parser.add_argument('--caravel_root', '-cr', required=True, help="CARAVEL_ROOT Absolute Path to caravel.")
+    parser.add_argument('--pdk_root', '-p', required=True, help="PDK_ROOT, points to pdk installation path")
+    parser.add_argument('--output_directory', '-o', required=False, help="Output Directory, default=<input_directory>/precheck_results/DD_MMM_YYYY___HH_MM_SS.")
+    parser.add_argument('--private', action='store_true', help=f"If provided, precheck skips {open_source_checks.keys() - private_checks.keys()}  checks that qualify the project to be Open Source")
+    parser.add_argument('checks', metavar='check', type=str, nargs='*', choices=list(open_source_checks.keys()).append([]), help=f"Checks to be run by the precheck: {' '.join(open_source_checks.keys())}")
+    args = parser.parse_args()
+
+    # NOTE Separated to allow the option later on for a run tag
+    tag = f"{datetime.datetime.utcnow():%d_%b_%Y___%H_%M_%S}".upper()
+    output_directory = args.output_directory if args.output_directory else f"{args.input_directory}/precheck_results/{tag}"
+    Path(f"{output_directory}/logs").mkdir(parents=True, exist_ok=True)
+    Path(f"{output_directory}/outputs").mkdir(parents=True, exist_ok=True)
+    Path(f"{output_directory}/outputs/reports").mkdir(parents=True, exist_ok=True)
+    log_path = Path(output_directory) / 'logs/precheck.log'
+    precheck_logger.initialize_root_logger(log_path)
+
+    if args.checks:
+        sequence = args.checks
+    else:
+        sequence = [x for x in private_checks.keys()] if args.private else [x for x in open_source_checks.keys()]
+    main(input_directory=args.input_directory,
+         output_directory=output_directory,
+         caravel_root=args.caravel_root,
+         pdk_root=args.pdk_root,
+         private=args.private,
+         sequence=sequence,
+         log_path=log_path,
+         default_content='_default_content')
diff --git a/mpw_precheck/parsetab.py b/mpw_precheck/parsetab.py
new file mode 100644
index 0000000..e1e5b2d
--- /dev/null
+++ b/mpw_precheck/parsetab.py
@@ -0,0 +1,443 @@
+
+# parsetab.py
+# This file is automatically generated. Do not edit.
+# pylint: disable=W,C,R
+_tabversion = '3.10'
+
+_lr_method = 'LALR'
+
+_lr_signature = 'leftLORleftLANDleftORleftXORXNORleftANDleftEQNEEQLNELleftLTGTLEGEleftLSHIFTRSHIFTLSHIFTARSHIFTAleftPLUSMINUSleftTIMESDIVIDEMODleftPOWERrightUMINUSUPLUSULNOTUNOTUANDUNANDUORUNORUXORUXNORALWAYS ALWAYS_COMB ALWAYS_FF ALWAYS_LATCH AND ASSIGN AT BEGIN CASE CASEX CASEZ COLON COMMA COND DEFAULT DELAY DISABLE DIVIDE DOLLER DOT ELSE END ENDCASE ENDFUNCTION ENDGENERATE ENDMODULE ENDTASK EQ EQL EQUALS FLOATNUMBER FOR FOREVER FORK FUNCTION GE GENERATE GENVAR GT ID IF INITIAL INOUT INPUT INTEGER INTNUMBER_BIN INTNUMBER_DEC INTNUMBER_HEX INTNUMBER_OCT JOIN LAND LBRACE LBRACKET LE LNOT LOCALPARAM LOGIC LOR LPAREN LSHIFT LSHIFTA LT MINUS MINUSCOLON MOD MODULE NAND NE NEGEDGE NEL NOR NOT OR OUTPUT PARAMETER PLUS PLUSCOLON POSEDGE POWER RBRACE RBRACKET REAL REG RPAREN RSHIFT RSHIFTA SEMICOLON SENS_OR SIGNED SIGNED_INTNUMBER_BIN SIGNED_INTNUMBER_DEC SIGNED_INTNUMBER_HEX SIGNED_INTNUMBER_OCT STRING_LITERAL SUPPLY0 SUPPLY1 TASK TIMES TRI UNIQUE WAIT WHILE WIRE XNOR XORsource_text : descriptiondescription : definitionsdefinitions : definitions definitiondefinitions : definitiondefinition : moduledefdefinition : pragmapragma : LPAREN TIMES ID EQUALS expression TIMES RPARENpragma : LPAREN TIMES ID TIMES RPARENmoduledef : MODULE modulename paramlist portlist items ENDMODULEmodulename : IDmodulename : SENS_ORparamlist : DELAY LPAREN params RPARENparamlist : emptyparams : params_begin param_endparams_begin : params_begin paramparams_begin : paramparams : param_endparam : PARAMETER param_substitution_list COMMAparam : PARAMETER SIGNED param_substitution_list COMMAparam : PARAMETER width param_substitution_list COMMAparam : PARAMETER SIGNED width param_substitution_list COMMAparam : PARAMETER INTEGER param_substitution_list COMMAparam_end : PARAMETER param_substitution_listparam_end : PARAMETER SIGNED param_substitution_listparam_end : PARAMETER width param_substitution_listparam_end : PARAMETER SIGNED width param_substitution_listparam_end : PARAMETER INTEGER param_substitution_listportlist : LPAREN ports RPAREN SEMICOLONportlist : LPAREN ioports RPAREN SEMICOLONportlist : LPAREN RPAREN SEMICOLONportlist : SEMICOLONports : ports COMMA portnameports : portnameportname : IDsigtypes : sigtypes sigtypesigtypes : sigtypesigtype : INPUTsigtype : OUTPUTsigtype : INOUTsigtype : TRIsigtype : REGsigtype : LOGICsigtype : WIREsigtype : SIGNEDsigtype : SUPPLY0sigtype : SUPPLY1ioports : ioports COMMA ioportioports : ioport_headioport : sigtypes portnameioport : sigtypes width portnameioport : sigtypes width portname dimensionsioport_head : sigtypes portnameioport_head : sigtypes width portnameioport_head : sigtypes width portname dimensionsioport : portnamewidth : LBRACKET expression COLON expression RBRACKETlength : LBRACKET expression COLON expression RBRACKETdimensions : dimensions lengthdimensions : lengthitems : items itemitems : itemitems : emptyitem : standard_item\n        | generate\n        standard_item : decl\n        | integerdecl\n        | realdecl\n        | declassign\n        | parameterdecl\n        | localparamdecl\n        | genvardecl\n        | assignment\n        | always\n        | always_ff\n        | always_comb\n        | always_latch\n        | initial\n        | instance\n        | function\n        | task\n        | pragma\n        decl : sigtypes declnamelist SEMICOLONdecl : sigtypes width declnamelist SEMICOLONdeclnamelist : declnamelist COMMA declnamedeclnamelist : declnamedeclname : IDdeclname : ID dimensionsdeclassign : sigtypes declassign_element SEMICOLONdeclassign : sigtypes width declassign_element SEMICOLONdeclassign_element : ID EQUALS rvaluedeclassign_element : delays ID EQUALS delays rvalueintegerdecl : INTEGER integernamelist SEMICOLONintegerdecl : INTEGER SIGNED integernamelist SEMICOLONintegernamelist : integernamelist COMMA integernameintegernamelist : integernameintegername : ID EQUALS rvalueintegername : IDrealdecl : REAL realnamelist SEMICOLONrealnamelist : realnamelist COMMA realnamerealnamelist : realnamerealname : IDparameterdecl : PARAMETER param_substitution_list SEMICOLONparameterdecl : PARAMETER SIGNED param_substitution_list SEMICOLONparameterdecl : PARAMETER width param_substitution_list SEMICOLONparameterdecl : PARAMETER SIGNED width param_substitution_list SEMICOLONparameterdecl : PARAMETER INTEGER param_substitution_list SEMICOLONlocalparamdecl : LOCALPARAM param_substitution_list SEMICOLONlocalparamdecl : LOCALPARAM SIGNED param_substitution_list SEMICOLONlocalparamdecl : LOCALPARAM width param_substitution_list SEMICOLONlocalparamdecl : LOCALPARAM SIGNED width param_substitution_list SEMICOLONlocalparamdecl : LOCALPARAM INTEGER param_substitution_list SEMICOLONparam_substitution_list : param_substitution_list COMMA param_substitutionparam_substitution_list : param_substitutionparam_substitution : ID EQUALS rvalueassignment : ASSIGN lvalue EQUALS rvalue SEMICOLONassignment : ASSIGN delays lvalue EQUALS delays rvalue SEMICOLONlpartselect : pointer LBRACKET expression COLON expression RBRACKETlpartselect : pointer LBRACKET expression PLUSCOLON expression RBRACKETlpartselect : pointer LBRACKET expression MINUSCOLON expression RBRACKETlpartselect : identifier LBRACKET expression COLON expression RBRACKETlpartselect : identifier LBRACKET expression PLUSCOLON expression RBRACKETlpartselect : identifier LBRACKET expression MINUSCOLON expression RBRACKETlpointer : pointerlconcat : LBRACE lconcatlist RBRACElconcatlist : lconcatlist COMMA lconcat_onelconcatlist : lconcat_onelconcat_one : identifierlconcat_one : lpartselectlconcat_one : lpointerlconcat_one : lconcatlvalue : lpartselectlvalue : lpointerlvalue : lconcatlvalue : identifierrvalue : expressionexpression : MINUS expression %prec UMINUSexpression : PLUS expression %prec UPLUSexpression : LNOT expression %prec ULNOTexpression : NOT expression %prec UNOTexpression : AND expression %prec UANDexpression : NAND expression %prec UNANDexpression : NOR expression %prec UNORexpression : OR expression %prec UORexpression : XOR expression %prec UXORexpression : XNOR expression %prec UXNORexpression : expression POWER expressionexpression : expression TIMES expressionexpression : expression DIVIDE expressionexpression : expression MOD expressionexpression : expression PLUS expressionexpression : expression MINUS expressionexpression : expression LSHIFT expressionexpression : expression RSHIFT expressionexpression : expression LSHIFTA expressionexpression : expression RSHIFTA expressionexpression : expression LT expressionexpression : expression GT expressionexpression : expression LE expressionexpression : expression GE expressionexpression : expression EQ expressionexpression : expression NE expressionexpression : expression EQL expressionexpression : expression NEL expressionexpression : expression AND expressionexpression : expression XOR expressionexpression : expression XNOR expressionexpression : expression OR expressionexpression : expression LAND expressionexpression : expression LOR expressionexpression : expression COND expression COLON expressionexpression : LPAREN expression RPARENexpression : concatexpression : repeatexpression : partselectexpression : pointerexpression : functioncallexpression : systemcallexpression : identifierexpression : const_expressionconcat : LBRACE concatlist RBRACEconcatlist : concatlist COMMA expressionconcatlist : expressionrepeat : LBRACE expression concat RBRACEpartselect : identifier LBRACKET expression COLON expression RBRACKETpartselect : identifier LBRACKET expression PLUSCOLON expression RBRACKETpartselect : identifier LBRACKET expression MINUSCOLON expression RBRACKETpartselect : pointer LBRACKET expression COLON expression RBRACKETpartselect : pointer LBRACKET expression PLUSCOLON expression RBRACKETpartselect : pointer LBRACKET expression MINUSCOLON expression RBRACKETpointer : identifier LBRACKET expression RBRACKETpointer : pointer LBRACKET expression RBRACKETconst_expression : intnumberconst_expression : floatnumberconst_expression : stringliteralfloatnumber : FLOATNUMBERintnumber : INTNUMBER_DEC\n        | SIGNED_INTNUMBER_DEC\n        | INTNUMBER_BIN\n        | SIGNED_INTNUMBER_BIN\n        | INTNUMBER_OCT\n        | SIGNED_INTNUMBER_OCT\n        | INTNUMBER_HEX\n        | SIGNED_INTNUMBER_HEX\n        stringliteral : STRING_LITERALalways : ALWAYS senslist always_statementalways_ff : ALWAYS_FF senslist always_statementalways_comb : ALWAYS_COMB senslist always_statementalways_latch : ALWAYS_LATCH senslist always_statementsenslist : AT LPAREN edgesigs RPARENedgesig : POSEDGE edgesig_baseedgesig : NEGEDGE edgesig_baseedgesig_base : identifieredgesig_base : pointeredgesigs : edgesigs SENS_OR edgesigedgesigs : edgesigs COMMA edgesigedgesigs : edgesigsenslist : emptysenslist : AT levelsigsenslist : AT LPAREN levelsigs RPARENlevelsig : levelsig_baselevelsig_base : identifierlevelsig_base : pointerlevelsig_base : partselectlevelsigs : levelsigs SENS_OR levelsiglevelsigs : levelsigs COMMA levelsiglevelsigs : levelsigsenslist : AT TIMESsenslist : AT LPAREN TIMES RPARENbasic_statement : if_statement\n        | case_statement\n        | casex_statement\n        | casez_statement\n        | unique_case_statement\n        | for_statement\n        | while_statement\n        | event_statement\n        | wait_statement\n        | forever_statement\n        | block\n        | namedblock\n        | parallelblock\n        | blocking_substitution\n        | nonblocking_substitution\n        | single_statement\n        always_statement : basic_statementblocking_substitution : delays lvalue EQUALS delays rvalue SEMICOLONblocking_substitution_base : delays lvalue EQUALS delays rvaluenonblocking_substitution : delays lvalue LE delays rvalue SEMICOLONdelays : DELAY LPAREN expression RPARENdelays : DELAY identifierdelays : DELAY intnumberdelays : DELAY floatnumberdelays : emptyblock : BEGIN block_statements ENDblock : BEGIN ENDblock_statements : block_statements block_statementblock_statements : block_statementblock_statement : basic_statementnamedblock : BEGIN COLON ID namedblock_statements ENDnamedblock : BEGIN COLON ID ENDnamedblock_statements : namedblock_statements namedblock_statementnamedblock_statements : namedblock_statementnamedblock_statement : basic_statement\n        | decl\n        | integerdecl\n        | realdecl\n        | parameterdecl\n        | localparamdecl\n        parallelblock : FORK block_statements JOINparallelblock : FORK JOINif_statement : IF LPAREN cond RPAREN true_statement ELSE else_statementif_statement : IF LPAREN cond RPAREN true_statementif_statement : delays IF LPAREN cond RPAREN true_statement ELSE else_statementif_statement : delays IF LPAREN cond RPAREN true_statementcond : expressionifcontent_statement : basic_statementtrue_statement : ifcontent_statementelse_statement : ifcontent_statementfor_statement : FOR LPAREN forpre forcond forpost RPAREN forcontent_statementforpre : blocking_substitutionforpre : SEMICOLONforcond : cond SEMICOLONforcond : SEMICOLONforpost : blocking_substitution_baseforpost : emptyforcontent_statement : basic_statementwhile_statement : WHILE LPAREN cond RPAREN whilecontent_statementwhilecontent_statement : basic_statementcase_statement : CASE LPAREN case_comp RPAREN casecontent_statements ENDCASEcasex_statement : CASEX LPAREN case_comp RPAREN casecontent_statements ENDCASEcasez_statement : CASEZ LPAREN case_comp RPAREN casecontent_statements ENDCASEunique_case_statement : UNIQUE CASE LPAREN case_comp RPAREN casecontent_statements ENDCASEcase_comp : expressioncasecontent_statements : casecontent_statements casecontent_statementcasecontent_statements : casecontent_statementcasecontent_statement : casecontent_condition COLON basic_statementcasecontent_condition : casecontent_condition COMMA expressioncasecontent_condition : expressioncasecontent_statement : DEFAULT COLON basic_statementinitial : INITIAL initial_statementinitial_statement : basic_statementevent_statement : senslist SEMICOLONwait_statement : WAIT LPAREN cond RPAREN waitcontent_statementwaitcontent_statement : basic_statementwaitcontent_statement : SEMICOLONforever_statement : FOREVER basic_statementinstance : ID parameterlist instance_bodylist SEMICOLONinstance : SENS_OR parameterlist instance_bodylist SEMICOLONinstance_bodylist : instance_bodylist COMMA instance_bodyinstance_bodylist : instance_bodyinstance_body : ID LPAREN instance_ports RPARENinstance_body : ID width LPAREN instance_ports RPARENinstance : ID instance_bodylist_noname SEMICOLONinstance : SENS_OR instance_bodylist_noname SEMICOLONinstance_bodylist_noname : instance_bodylist_noname COMMA instance_body_nonameinstance_bodylist_noname : instance_body_nonameinstance_body_noname : LPAREN instance_ports RPARENparameterlist : DELAY LPAREN param_args RPARENparameterlist : DELAY LPAREN param_args_noname RPARENparameterlist : emptyparam_args_noname : param_args_noname COMMA param_arg_nonameparam_args_noname : param_arg_nonameparam_args : param_args COMMA param_argparam_args : param_argparam_args : emptyparam_arg_noname : expressionparam_arg : DOT ID LPAREN expression RPARENinstance_ports : instance_ports_list\n        | instance_ports_arg\n        instance_ports_list : instance_ports_list COMMA instance_port_listinstance_ports_list : instance_port_listinstance_ports_list : emptyinstance_port_list : expressioninstance_ports_arg : instance_ports_arg COMMA instance_port_arginstance_ports_arg : instance_port_arginstance_port_arg : DOT ID LPAREN identifier RPARENinstance_port_arg : DOT ID LPAREN expression RPARENinstance_port_arg : DOT ID LPAREN RPARENgenvardecl : GENVAR genvarlist SEMICOLONgenvarlist : genvarlist COMMA genvargenvarlist : genvargenvar : IDgenerate : GENERATE generate_items ENDGENERATEgenerate_items : emptygenerate_items : generate_items generate_itemgenerate_items : generate_itemgenerate_item : standard_item\n        | generate_if\n        | generate_for\n        generate_block : BEGIN generate_items ENDgenerate_block : BEGIN COLON ID generate_items ENDgenerate_if : IF LPAREN cond RPAREN gif_true_item ELSE gif_false_itemgenerate_if : IF LPAREN cond RPAREN gif_true_itemgif_true_item : generate_item\n        | generate_block\n        gif_false_item : generate_item\n        | generate_block\n        generate_for : FOR LPAREN forpre forcond forpost RPAREN generate_forcontentgenerate_forcontent : generate_item\n        | generate_block\n        systemcall : DOLLER IDsystemcall : DOLLER ID LPAREN sysargs RPARENsystemcall : DOLLER SIGNED LPAREN sysargs RPARENsysargs : sysargs COMMA sysargsysargs : sysargsysargs : emptysysarg : expressionfunction : FUNCTION width ID SEMICOLON function_statement ENDFUNCTIONfunction : FUNCTION ID SEMICOLON function_statement ENDFUNCTIONfunction : FUNCTION INTEGER ID SEMICOLON function_statement ENDFUNCTIONfunction_statement : funcvardecls function_calcfuncvardecls : funcvardecls funcvardeclfuncvardecls : funcvardeclfuncvardecl : decl\n        | integerdecl\n        function_calc : blocking_substitution\n        | if_statement\n        | for_statement\n        | while_statement\n        | case_statement\n        | casex_statement\n        | casez_statement\n        | block\n        | namedblock\n        functioncall : identifier LPAREN func_args RPARENfunc_args : func_args COMMA expressionfunc_args : expressionfunc_args : emptytask : TASK ID SEMICOLON task_statement ENDTASKtask_statement : taskvardecls task_calctaskvardecls : taskvardecls taskvardecltaskvardecls : taskvardecltaskvardecls : emptytaskvardecl : decl\n        | integerdecl\n        task_calc : blocking_substitution\n        | if_statement\n        | for_statement\n        | while_statement\n        | case_statement\n        | casex_statement\n        | casez_statement\n        | block\n        | namedblock\n        identifier : IDidentifier : scope IDscope : identifier DOTscope : pointer DOTdisable : DISABLE IDsingle_statement : DELAY expression SEMICOLONsingle_statement : systemcall SEMICOLONsingle_statement : disable SEMICOLONempty : '
+    
+_lr_action_items = {'MODULE':([0,3,4,5,6,9,86,124,411,],[7,7,-4,-5,-6,-3,-8,-9,-7,]),'LPAREN':([0,3,4,5,6,9,10,11,12,14,15,16,18,20,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,60,61,86,87,88,90,91,92,93,94,95,96,97,98,99,106,108,114,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,139,142,143,173,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,198,199,200,202,203,205,209,216,217,228,233,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,283,284,285,286,287,288,290,294,296,299,301,302,303,304,306,309,310,312,318,319,324,326,328,329,337,338,346,347,348,349,350,352,353,354,355,357,358,359,360,362,367,369,370,373,374,376,379,380,381,391,396,398,409,411,442,443,445,446,449,450,451,455,456,457,462,464,465,467,471,473,474,476,478,479,482,494,495,497,498,499,504,505,508,511,512,514,515,516,527,529,530,552,553,555,556,557,559,560,562,571,577,578,579,582,583,584,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,634,637,639,654,677,679,680,681,682,688,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,729,733,734,743,744,746,749,757,758,759,760,761,763,765,766,767,773,774,775,776,777,778,779,780,781,782,783,785,787,788,789,790,792,793,794,795,],[8,8,-4,-5,-6,-3,-413,-10,-11,19,21,-13,8,-31,87,8,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,8,217,217,-8,87,-405,87,87,87,87,87,87,87,87,87,87,279,87,-196,-197,-198,-199,-200,-201,-202,-203,-195,-9,-60,8,-344,-346,-347,-348,-349,288,289,87,301,-253,339,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,349,352,353,354,356,357,359,369,381,87,-30,-12,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,87,87,445,446,-406,-343,-345,87,-82,-88,87,87,87,-250,-251,-252,-92,87,-98,-102,87,-107,-339,87,87,87,-205,-245,-206,-207,-208,87,497,87,87,87,504,87,-302,87,-306,-255,-270,87,279,-411,-412,514,-313,217,87,-314,-28,-29,87,-7,87,87,87,87,87,-280,-281,-83,-89,87,-413,87,87,-93,-103,-104,-106,-108,-109,-111,-413,87,87,87,-413,-413,87,87,-254,-269,-410,87,628,-307,87,637,-308,87,87,87,87,87,87,87,87,8,87,87,-249,-105,-110,-115,87,87,87,87,87,87,87,87,87,87,87,87,-260,87,87,728,87,-369,-389,87,-353,-354,-355,8,-56,-272,-277,-276,87,-295,87,87,87,-287,-288,-303,-304,-305,-259,87,279,-368,-370,8,8,8,-116,-274,-246,-248,-289,-294,87,-290,-291,87,-352,-356,-357,-350,8,-358,-359,-360,-413,-271,-278,-296,-299,-292,-279,-286,8,87,-273,-351,]),'$end':([1,2,3,4,5,6,9,86,124,411,],[0,-1,-2,-4,-5,-6,-3,-8,-9,-7,]),'ID':([7,13,18,19,20,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,80,85,86,87,88,90,91,92,93,94,95,96,97,98,99,108,109,110,114,115,116,117,118,119,120,121,122,125,126,127,128,129,130,131,135,137,139,141,142,143,145,152,153,154,158,159,160,165,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,197,206,207,208,209,212,213,214,217,218,220,222,224,227,228,230,232,237,238,239,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,277,278,279,280,285,286,287,288,289,290,291,294,296,299,301,302,303,304,306,307,309,310,311,312,313,315,318,319,321,324,325,326,328,329,337,338,339,340,341,342,343,344,345,346,347,348,349,352,353,354,356,357,358,359,360,361,362,363,364,365,366,367,369,370,371,372,373,374,379,381,389,391,395,396,398,400,403,405,409,411,442,443,445,446,449,450,451,452,455,456,457,462,464,465,467,471,473,474,476,478,479,482,486,492,493,494,495,497,498,499,504,505,508,509,510,511,512,514,516,517,524,527,530,533,534,535,536,537,540,541,542,543,544,546,548,550,551,552,553,554,555,556,557,558,559,560,562,571,572,574,577,578,579,582,583,584,585,586,587,588,589,590,591,593,596,597,598,599,606,608,609,610,611,612,614,615,616,617,618,619,620,621,622,623,624,625,626,628,630,632,633,637,639,641,651,652,654,656,667,677,679,680,681,682,685,686,687,688,702,703,704,705,708,709,713,714,715,717,718,719,720,721,722,723,728,733,734,736,737,738,739,740,741,743,744,745,746,749,756,757,758,759,760,761,762,763,764,765,766,767,768,773,774,775,776,777,778,779,780,781,782,783,784,785,787,788,789,790,792,793,794,795,],[11,17,60,79,-31,88,60,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,60,140,147,-44,150,156,156,163,88,-413,-413,-413,-413,-413,-413,-413,223,225,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,79,156,-8,88,-405,88,88,88,88,88,88,88,88,88,88,88,283,285,-196,-197,-198,-199,-200,-201,-202,-203,-195,-60,60,-344,-346,-347,-348,-349,140,-35,88,300,88,-253,147,156,156,156,156,156,156,88,88,-413,88,-217,-413,-413,-413,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,88,-413,-413,-413,88,-253,375,376,88,-320,376,392,394,79,-30,79,79,156,156,156,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,-408,88,88,-407,-406,-343,-345,88,-413,-82,454,-88,88,88,88,-250,-251,-252,-92,147,88,-98,150,-102,156,156,88,-107,156,-339,163,88,88,88,-205,-245,88,-218,-227,-220,-221,-222,-223,-206,-207,-208,88,88,88,88,-413,88,-302,88,-306,-413,-255,510,-257,-258,-413,-270,88,-250,-251,-252,-411,-412,-313,88,529,-314,-413,-28,-29,79,156,156,88,-7,88,88,88,88,88,-280,-281,88,-83,-89,88,-413,88,88,-93,-103,-104,-106,-108,-109,-111,-413,88,88,88,88,88,88,-413,-413,88,88,-254,-256,-413,-269,-410,88,-307,376,634,88,-308,-413,-373,-374,-375,454,-413,-392,-393,-394,-395,79,156,156,156,88,88,-191,88,88,88,-190,88,88,88,60,-413,-283,88,88,-249,-105,-110,-115,88,88,88,88,88,88,88,-209,-219,88,88,-228,-413,88,88,88,88,88,-413,-413,-413,-413,-260,-262,-263,-264,-265,-266,-267,-268,-249,88,-318,-319,88,88,-369,-372,88,454,-389,-391,156,88,-353,-354,-355,60,-253,88,-282,-56,-272,-277,-276,-413,88,-295,88,88,88,-287,-288,-303,-304,-305,-259,-261,88,-368,-370,-187,-188,-189,-184,-185,-186,60,60,777,60,-116,-413,-274,-246,-248,-289,-294,-413,88,-413,-290,-291,88,-413,-352,-356,-357,-350,60,-358,-359,-360,-413,-271,-278,-413,-296,-299,-292,-279,-286,60,88,-273,-351,]),'SENS_OR':([7,18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,88,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,285,286,287,290,294,306,310,312,319,324,337,338,342,343,344,345,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,487,488,490,491,508,511,512,516,530,554,558,571,582,583,584,600,601,602,603,618,639,654,679,680,681,682,698,699,700,701,702,703,704,717,718,719,720,721,722,733,734,736,737,738,739,740,741,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[12,61,-31,61,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,61,-8,-405,-60,61,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-406,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-220,-221,-222,-223,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,594,597,-216,-226,-254,-269,-410,-307,-308,-191,-190,61,-105,-110,-115,-210,-212,-213,-211,-260,-369,-389,-353,-354,-355,61,-214,-215,-224,-225,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,-187,-188,-189,-184,-185,-186,61,61,61,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,61,-358,-359,-360,-271,-278,-292,-279,-286,61,-273,-351,]),'TIMES':([8,17,88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,173,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,339,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[13,22,-405,241,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,341,409,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,409,-361,-406,409,489,409,-178,-192,-193,409,-171,-147,-146,-148,-149,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,-180,409,409,409,409,409,409,409,409,409,-191,-190,-385,409,409,-183,409,409,409,409,409,409,-171,409,409,409,409,409,409,409,409,-362,-363,409,409,409,409,409,409,409,409,-178,409,-175,-187,-188,-189,-184,-185,-186,409,409,]),'DELAY':([10,11,12,47,49,54,55,56,57,58,59,60,61,64,65,66,67,68,69,70,71,72,73,88,135,137,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,289,290,306,310,312,319,340,341,342,343,344,345,356,358,360,361,362,364,365,366,367,373,374,395,455,462,467,471,473,474,476,478,479,482,498,499,508,509,510,511,512,533,534,535,536,540,541,542,543,544,554,558,572,574,582,583,593,596,599,606,614,615,616,617,618,619,620,621,622,623,624,625,641,656,687,688,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,781,782,783,784,788,789,790,794,],[15,-10,-11,142,-44,142,-413,-413,-413,-413,209,216,216,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,-405,142,-35,209,-217,209,209,209,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,209,209,209,-406,142,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,142,-302,-306,209,-255,-257,-258,209,-270,-411,-412,-413,-83,142,-93,-103,-104,-106,-108,-109,-111,142,142,142,-254,-256,209,-269,-410,142,-373,-374,-375,142,-392,-393,-394,-395,-191,-190,142,-283,-105,-110,-209,-219,-228,209,142,209,209,209,-260,-262,-263,-264,-265,-266,-267,-268,-372,-391,-282,-56,-272,-277,-276,209,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,209,-274,-246,-248,-289,209,209,-290,-291,209,142,-271,-278,209,-292,-279,-286,-273,]),'SEMICOLON':([10,11,12,14,16,55,56,57,58,59,75,88,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,134,136,138,140,144,146,147,148,149,150,151,155,157,161,162,163,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,204,206,207,208,210,211,212,215,219,221,223,225,226,229,233,266,267,268,269,270,271,272,273,274,275,283,285,289,290,292,293,297,298,306,308,310,312,314,316,317,319,320,322,323,340,341,342,343,344,345,356,358,360,361,362,364,365,366,367,368,370,371,372,373,374,375,377,378,390,392,394,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,441,448,449,450,451,453,454,455,458,459,460,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,505,508,509,510,511,512,518,526,554,558,561,565,573,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,626,629,668,676,678,690,691,702,703,704,705,706,707,717,718,719,720,721,722,723,724,736,737,738,739,740,741,748,756,757,758,759,760,762,764,765,766,768,769,782,783,784,788,789,790,794,],[-413,-10,-11,20,-13,-413,-413,-413,-413,-413,228,-405,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,290,294,-85,-86,306,-95,-97,310,-100,-101,312,-113,319,324,-341,-342,-413,-217,-413,-413,-413,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,358,-413,-413,-413,373,374,-217,379,-316,391,393,395,396,398,-12,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,-361,-406,451,-82,455,456,-87,-59,-92,467,-98,-102,471,473,474,-107,476,478,479,-218,-227,-220,-221,-222,-223,451,-302,-306,-413,-255,-257,-258,-413,-270,512,-178,-192,-193,-411,-412,-409,516,-310,530,531,538,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,-180,-275,574,-280,-281,-84,-86,-83,-90,-135,-58,-94,-93,-96,-99,-112,-103,582,-104,-106,-114,-108,583,-109,-111,-340,584,574,-254,-256,-413,-269,-410,-315,-317,-191,-190,-385,-183,687,-105,-110,-209,-219,-228,-413,-413,721,-413,-260,-262,-263,-264,-265,-266,-267,-268,-171,-309,-170,-362,-363,-91,749,-272,-277,-276,-413,758,759,-287,-288,-303,-304,-305,-259,-261,-311,-187,-188,-189,-184,-185,-186,-57,-413,-274,-246,-248,-289,-413,-413,-290,-291,-413,-312,-271,-278,-413,-292,-279,-286,-273,]),'EQUALS':([17,88,140,147,156,164,166,167,168,169,170,285,300,327,351,485,554,558,575,747,750,751,752,753,754,755,],[23,-405,296,309,318,326,-131,-132,-133,-134,-123,-406,462,482,498,-124,-191,-190,498,781,-120,-121,-122,-117,-118,-119,]),'ENDMODULE':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,86,125,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,582,583,584,618,639,654,702,703,704,717,718,719,720,721,722,733,734,749,757,758,759,760,765,766,782,783,788,789,790,794,],[-413,-31,124,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,-8,-60,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,-105,-110,-115,-260,-369,-389,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,-116,-274,-246,-248,-289,-290,-291,-271,-278,-292,-279,-286,-273,]),'GENERATE':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,86,125,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,582,583,584,618,639,654,702,703,704,717,718,719,720,721,722,733,734,749,757,758,759,760,765,766,782,783,788,789,790,794,],[46,-31,46,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,-8,-60,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,-105,-110,-115,-260,-369,-389,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,-116,-274,-246,-248,-289,-290,-291,-271,-278,-292,-279,-286,-273,]),'INTEGER':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,51,52,62,85,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[48,-31,48,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,48,154,160,224,239,-8,-60,48,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,48,48,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,48,-269,-410,-307,-308,48,48,-373,-374,-375,48,48,-392,-393,-394,-395,48,-105,-110,-115,48,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,48,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,48,48,48,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,48,-358,-359,-360,-271,-278,-292,-279,-286,48,-273,-351,]),'REAL':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,571,582,583,584,617,618,619,620,621,622,623,624,625,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[50,-31,50,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,50,-8,-60,50,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,50,-269,-410,-307,-308,50,-105,-110,-115,50,-260,-262,-263,-264,-265,-266,-267,-268,-369,-389,-353,-354,-355,50,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,50,50,50,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,50,-358,-359,-360,-271,-278,-292,-279,-286,50,-273,-351,]),'PARAMETER':([18,20,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,82,84,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,235,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,403,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,548,550,551,571,582,583,584,617,618,619,620,621,622,623,624,625,639,654,667,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[51,-31,85,51,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,51,85,-16,-8,-60,51,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-15,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-18,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,51,-269,-410,-307,-308,-19,-20,-22,51,-105,-110,-115,51,-260,-262,-263,-264,-265,-266,-267,-268,-369,-389,-21,-353,-354,-355,51,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,51,51,51,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,51,-358,-359,-360,-271,-278,-292,-279,-286,51,-273,-351,]),'LOCALPARAM':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,571,582,583,584,617,618,619,620,621,622,623,624,625,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[52,-31,52,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,52,-8,-60,52,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,52,-269,-410,-307,-308,52,-105,-110,-115,52,-260,-262,-263,-264,-265,-266,-267,-268,-369,-389,-353,-354,-355,52,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,52,52,52,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,52,-358,-359,-360,-271,-278,-292,-279,-286,52,-273,-351,]),'GENVAR':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,571,582,583,584,618,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[53,-31,53,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,53,-8,-60,53,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,53,-105,-110,-115,-260,-369,-389,-353,-354,-355,53,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,53,53,53,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,53,-358,-359,-360,-271,-278,-292,-279,-286,53,-273,-351,]),'ASSIGN':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,571,582,583,584,618,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[54,-31,54,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,54,-8,-60,54,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,54,-105,-110,-115,-260,-369,-389,-353,-354,-355,54,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,54,54,54,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,54,-358,-359,-360,-271,-278,-292,-279,-286,54,-273,-351,]),'ALWAYS':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,571,582,583,584,618,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[55,-31,55,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,55,-8,-60,55,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,55,-105,-110,-115,-260,-369,-389,-353,-354,-355,55,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,55,55,55,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,55,-358,-359,-360,-271,-278,-292,-279,-286,55,-273,-351,]),'ALWAYS_FF':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,571,582,583,584,618,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[56,-31,56,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,56,-8,-60,56,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,56,-105,-110,-115,-260,-369,-389,-353,-354,-355,56,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,56,56,56,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,56,-358,-359,-360,-271,-278,-292,-279,-286,56,-273,-351,]),'ALWAYS_COMB':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,571,582,583,584,618,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[57,-31,57,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,57,-8,-60,57,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,57,-105,-110,-115,-260,-369,-389,-353,-354,-355,57,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,57,57,57,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,57,-358,-359,-360,-271,-278,-292,-279,-286,57,-273,-351,]),'ALWAYS_LATCH':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,571,582,583,584,618,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[58,-31,58,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,58,-8,-60,58,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,58,-105,-110,-115,-260,-369,-389,-353,-354,-355,58,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,58,58,58,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,58,-358,-359,-360,-271,-278,-292,-279,-286,58,-273,-351,]),'INITIAL':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,571,582,583,584,618,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[59,-31,59,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,59,-8,-60,59,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,59,-105,-110,-115,-260,-369,-389,-353,-354,-355,59,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,59,59,59,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,59,-358,-359,-360,-271,-278,-292,-279,-286,59,-273,-351,]),'FUNCTION':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,571,582,583,584,618,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[62,-31,62,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,62,-8,-60,62,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,62,-105,-110,-115,-260,-369,-389,-353,-354,-355,62,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,62,62,62,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,62,-358,-359,-360,-271,-278,-292,-279,-286,62,-273,-351,]),'TASK':([18,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,125,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,396,398,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,571,582,583,584,618,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[63,-31,63,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,63,-8,-60,63,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-28,-29,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,63,-105,-110,-115,-260,-369,-389,-353,-354,-355,63,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,63,63,63,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,63,-358,-359,-360,-271,-278,-292,-279,-286,63,-273,-351,]),'INPUT':([18,19,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,64,65,66,67,68,69,70,71,72,73,80,86,125,126,127,128,129,130,131,137,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,230,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,400,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,537,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[65,65,-31,65,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,65,65,-44,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,65,-8,-60,65,-344,-346,-347,-348,-349,-35,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,65,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,65,65,-28,-29,65,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,65,-269,-410,-307,-308,65,65,-373,-374,-375,65,65,65,-392,-393,-394,-395,65,-105,-110,-115,65,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,65,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,65,65,65,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,65,-358,-359,-360,-271,-278,-292,-279,-286,65,-273,-351,]),'OUTPUT':([18,19,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,64,65,66,67,68,69,70,71,72,73,80,86,125,126,127,128,129,130,131,137,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,230,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,400,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,537,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[66,66,-31,66,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,66,66,-44,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,66,-8,-60,66,-344,-346,-347,-348,-349,-35,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,66,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,66,66,-28,-29,66,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,66,-269,-410,-307,-308,66,66,-373,-374,-375,66,66,66,-392,-393,-394,-395,66,-105,-110,-115,66,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,66,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,66,66,66,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,66,-358,-359,-360,-271,-278,-292,-279,-286,66,-273,-351,]),'INOUT':([18,19,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,64,65,66,67,68,69,70,71,72,73,80,86,125,126,127,128,129,130,131,137,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,230,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,400,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,537,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[67,67,-31,67,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,67,67,-44,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,67,-8,-60,67,-344,-346,-347,-348,-349,-35,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,67,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,67,67,-28,-29,67,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,67,-269,-410,-307,-308,67,67,-373,-374,-375,67,67,67,-392,-393,-394,-395,67,-105,-110,-115,67,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,67,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,67,67,67,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,67,-358,-359,-360,-271,-278,-292,-279,-286,67,-273,-351,]),'TRI':([18,19,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,64,65,66,67,68,69,70,71,72,73,80,86,125,126,127,128,129,130,131,137,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,230,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,400,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,537,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[68,68,-31,68,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,68,68,-44,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,68,-8,-60,68,-344,-346,-347,-348,-349,-35,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,68,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,68,68,-28,-29,68,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,68,-269,-410,-307,-308,68,68,-373,-374,-375,68,68,68,-392,-393,-394,-395,68,-105,-110,-115,68,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,68,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,68,68,68,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,68,-358,-359,-360,-271,-278,-292,-279,-286,68,-273,-351,]),'REG':([18,19,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,64,65,66,67,68,69,70,71,72,73,80,86,125,126,127,128,129,130,131,137,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,230,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,400,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,537,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[69,69,-31,69,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,69,69,-44,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,69,-8,-60,69,-344,-346,-347,-348,-349,-35,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,69,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,69,69,-28,-29,69,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,69,-269,-410,-307,-308,69,69,-373,-374,-375,69,69,69,-392,-393,-394,-395,69,-105,-110,-115,69,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,69,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,69,69,69,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,69,-358,-359,-360,-271,-278,-292,-279,-286,69,-273,-351,]),'LOGIC':([18,19,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,64,65,66,67,68,69,70,71,72,73,80,86,125,126,127,128,129,130,131,137,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,230,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,400,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,537,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[70,70,-31,70,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,70,70,-44,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,70,-8,-60,70,-344,-346,-347,-348,-349,-35,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,70,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,70,70,-28,-29,70,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,70,-269,-410,-307,-308,70,70,-373,-374,-375,70,70,70,-392,-393,-394,-395,70,-105,-110,-115,70,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,70,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,70,70,70,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,70,-358,-359,-360,-271,-278,-292,-279,-286,70,-273,-351,]),'WIRE':([18,19,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,64,65,66,67,68,69,70,71,72,73,80,86,125,126,127,128,129,130,131,137,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,230,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,400,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,537,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[71,71,-31,71,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,71,71,-44,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,71,-8,-60,71,-344,-346,-347,-348,-349,-35,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,71,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,71,71,-28,-29,71,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,71,-269,-410,-307,-308,71,71,-373,-374,-375,71,71,71,-392,-393,-394,-395,71,-105,-110,-115,71,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,71,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,71,71,71,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,71,-358,-359,-360,-271,-278,-292,-279,-286,71,-273,-351,]),'SIGNED':([18,19,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,51,52,64,65,66,67,68,69,70,71,72,73,80,85,86,109,125,126,127,128,129,130,131,137,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,230,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,400,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,537,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[49,49,-31,49,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,49,49,145,-44,152,158,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,49,237,-8,284,-60,49,-344,-346,-347,-348,-349,-35,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,49,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,49,49,-28,-29,49,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,49,-269,-410,-307,-308,49,49,-373,-374,-375,49,49,49,-392,-393,-394,-395,49,-105,-110,-115,49,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,49,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,49,49,49,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,49,-358,-359,-360,-271,-278,-292,-279,-286,49,-273,-351,]),'SUPPLY0':([18,19,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,64,65,66,67,68,69,70,71,72,73,80,86,125,126,127,128,129,130,131,137,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,230,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,400,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,537,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[72,72,-31,72,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,72,72,-44,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,72,-8,-60,72,-344,-346,-347,-348,-349,-35,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,72,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,72,72,-28,-29,72,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,72,-269,-410,-307,-308,72,72,-373,-374,-375,72,72,72,-392,-393,-394,-395,72,-105,-110,-115,72,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,72,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,72,72,72,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,72,-358,-359,-360,-271,-278,-292,-279,-286,72,-273,-351,]),'SUPPLY1':([18,19,20,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,64,65,66,67,68,69,70,71,72,73,80,86,125,126,127,128,129,130,131,137,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,228,230,286,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,393,395,396,398,400,411,455,456,467,471,473,474,476,478,479,508,510,511,512,516,530,531,533,534,535,536,537,538,540,541,542,543,544,571,582,583,584,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,743,744,746,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[73,73,-31,73,-61,-62,-63,-64,-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,73,73,-44,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,73,-8,-60,73,-344,-346,-347,-348,-349,-35,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-30,73,-343,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,73,73,-28,-29,73,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,73,-269,-410,-307,-308,73,73,-373,-374,-375,73,73,73,-392,-393,-394,-395,73,-105,-110,-115,73,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,73,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,73,73,73,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,73,-358,-359,-360,-271,-278,-292,-279,-286,73,-273,-351,]),'RPAREN':([19,22,74,76,77,78,79,81,83,88,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,155,217,231,234,236,240,241,266,267,268,269,270,271,272,273,274,275,279,283,285,298,342,343,344,345,381,382,383,384,385,386,387,388,397,399,401,402,404,406,407,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,438,439,440,441,445,446,447,448,459,460,463,470,475,487,488,489,490,491,496,500,501,502,503,506,507,513,514,519,520,521,522,523,525,545,547,549,554,558,561,565,566,567,568,569,570,572,574,600,601,602,603,607,613,614,627,628,635,636,637,666,668,675,676,678,683,684,685,687,698,699,700,701,716,725,726,727,729,730,731,732,735,736,737,738,739,740,741,742,748,770,771,772,791,796,],[75,86,226,229,-33,-48,-34,233,-17,-405,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,-113,-413,-52,-14,-23,408,411,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,-413,-361,-406,-59,-220,-221,-222,-223,-413,526,-328,-329,-331,-332,-335,-333,-32,-47,-55,-53,-24,-25,-27,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,561,-387,-388,-180,-413,-413,571,-275,-135,-58,579,-112,-114,593,596,599,-216,-226,606,610,-293,611,612,615,616,626,-413,630,632,-324,-325,-322,-326,-49,-54,-26,-191,-190,-385,-183,676,-365,-366,-367,678,-413,-283,-210,-212,-213,-211,705,715,-413,724,-413,-330,-334,730,-50,-170,-386,-362,-363,746,-284,-285,-282,-214,-215,-224,-225,768,769,-323,-321,771,-338,772,-175,-51,-187,-188,-189,-184,-185,-186,-364,-57,791,-336,-337,-327,-247,]),'MINUS':([23,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,111,112,113,114,115,116,117,118,119,120,121,122,123,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,282,283,285,288,295,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,368,369,370,371,372,373,374,381,388,408,409,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,442,443,445,446,448,449,450,451,457,459,461,462,463,464,465,482,483,484,494,495,497,498,499,501,504,505,508,511,512,513,514,525,527,552,553,554,555,556,557,558,559,560,561,562,563,564,565,569,576,577,578,579,580,581,585,586,587,588,589,590,591,604,605,608,609,610,611,612,618,626,628,633,637,668,669,670,671,672,673,674,675,676,677,678,689,692,693,694,695,696,697,702,703,704,708,709,712,713,714,715,717,718,719,720,721,722,728,729,731,732,736,737,738,739,740,741,757,758,759,760,761,763,765,766,767,770,781,782,783,785,786,787,788,789,790,793,794,],[90,90,-405,246,90,90,90,90,90,90,90,90,90,90,-172,-173,-174,-175,-176,-177,-178,-179,90,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,90,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,90,90,246,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,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,90,90,90,246,-361,-406,90,246,90,90,90,-250,-251,-252,90,90,90,90,90,90,90,90,90,90,-302,90,-306,-255,-270,246,90,-178,-192,-193,-411,-412,90,246,-171,90,-147,-146,-148,-149,-150,-151,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,-180,90,90,90,90,246,90,-280,-281,90,246,246,-413,246,90,90,-413,246,246,90,90,90,-413,-413,246,90,90,-254,-269,-410,246,90,246,90,90,90,-191,90,90,90,-190,90,90,-385,90,246,246,-183,246,246,90,90,-249,246,246,90,90,90,90,90,90,90,246,246,90,90,90,90,90,-260,-171,90,90,90,246,246,246,246,246,246,246,246,-362,90,-363,246,246,246,246,246,246,246,-272,-277,-276,90,-295,246,90,90,90,-287,-288,-303,-304,-305,-259,90,-178,246,-175,-187,-188,-189,-184,-185,-186,-274,-246,-248,-289,-294,90,-290,-291,90,246,-413,-271,-278,-296,246,-299,-292,-279,-286,90,-273,]),'PLUS':([23,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,111,112,113,114,115,116,117,118,119,120,121,122,123,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,282,283,285,288,295,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,368,369,370,371,372,373,374,381,388,408,409,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,442,443,445,446,448,449,450,451,457,459,461,462,463,464,465,482,483,484,494,495,497,498,499,501,504,505,508,511,512,513,514,525,527,552,553,554,555,556,557,558,559,560,561,562,563,564,565,569,576,577,578,579,580,581,585,586,587,588,589,590,591,604,605,608,609,610,611,612,618,626,628,633,637,668,669,670,671,672,673,674,675,676,677,678,689,692,693,694,695,696,697,702,703,704,708,709,712,713,714,715,717,718,719,720,721,722,728,729,731,732,736,737,738,739,740,741,757,758,759,760,761,763,765,766,767,770,781,782,783,785,786,787,788,789,790,793,794,],[91,91,-405,245,91,91,91,91,91,91,91,91,91,91,-172,-173,-174,-175,-176,-177,-178,-179,91,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,91,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,91,91,245,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,91,91,91,245,-361,-406,91,245,91,91,91,-250,-251,-252,91,91,91,91,91,91,91,91,91,91,-302,91,-306,-255,-270,245,91,-178,-192,-193,-411,-412,91,245,-171,91,-147,-146,-148,-149,-150,-151,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,-180,91,91,91,91,245,91,-280,-281,91,245,245,-413,245,91,91,-413,245,245,91,91,91,-413,-413,245,91,91,-254,-269,-410,245,91,245,91,91,91,-191,91,91,91,-190,91,91,-385,91,245,245,-183,245,245,91,91,-249,245,245,91,91,91,91,91,91,91,245,245,91,91,91,91,91,-260,-171,91,91,91,245,245,245,245,245,245,245,245,-362,91,-363,245,245,245,245,245,245,245,-272,-277,-276,91,-295,245,91,91,91,-287,-288,-303,-304,-305,-259,91,-178,245,-175,-187,-188,-189,-184,-185,-186,-274,-246,-248,-289,-294,91,-290,-291,91,245,-413,-271,-278,-296,245,-299,-292,-279,-286,91,-273,]),'LNOT':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[92,92,-405,92,92,92,92,92,92,92,92,92,92,92,-196,-197,-198,-199,-200,-201,-202,-203,-195,92,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,-406,92,92,92,92,-250,-251,-252,92,92,92,92,92,92,92,92,92,92,-302,92,-306,-255,-270,92,-411,-412,92,92,92,92,92,92,92,-280,-281,92,-413,92,92,-413,92,92,92,-413,-413,92,92,-254,-269,-410,92,92,92,92,92,92,92,92,92,92,92,92,-249,92,92,92,92,92,92,92,92,92,92,92,92,-260,92,92,92,92,-272,-277,-276,92,-295,92,92,92,-287,-288,-303,-304,-305,-259,92,-274,-246,-248,-289,-294,92,-290,-291,92,-413,-271,-278,-296,-299,-292,-279,-286,92,-273,]),'NOT':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[93,93,-405,93,93,93,93,93,93,93,93,93,93,93,-196,-197,-198,-199,-200,-201,-202,-203,-195,93,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,-406,93,93,93,93,-250,-251,-252,93,93,93,93,93,93,93,93,93,93,-302,93,-306,-255,-270,93,-411,-412,93,93,93,93,93,93,93,-280,-281,93,-413,93,93,-413,93,93,93,-413,-413,93,93,-254,-269,-410,93,93,93,93,93,93,93,93,93,93,93,93,-249,93,93,93,93,93,93,93,93,93,93,93,93,-260,93,93,93,93,-272,-277,-276,93,-295,93,93,93,-287,-288,-303,-304,-305,-259,93,-274,-246,-248,-289,-294,93,-290,-291,93,-413,-271,-278,-296,-299,-292,-279,-286,93,-273,]),'AND':([23,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,111,112,113,114,115,116,117,118,119,120,121,122,123,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,282,283,285,288,295,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,368,369,370,371,372,373,374,381,388,408,409,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,442,443,445,446,448,449,450,451,457,459,461,462,463,464,465,482,483,484,494,495,497,498,499,501,504,505,508,511,512,513,514,525,527,552,553,554,555,556,557,558,559,560,561,562,563,564,565,569,576,577,578,579,580,581,585,586,587,588,589,590,591,604,605,608,609,610,611,612,618,626,628,633,637,668,669,670,671,672,673,674,675,676,677,678,689,692,693,694,695,696,697,702,703,704,708,709,712,713,714,715,717,718,719,720,721,722,728,729,731,732,736,737,738,739,740,741,757,758,759,760,761,763,765,766,767,770,781,782,783,785,786,787,788,789,790,793,794,],[94,94,-405,259,94,94,94,94,94,94,94,94,94,94,-172,-173,-174,-175,-176,-177,-178,-179,94,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,94,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,94,94,259,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,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,94,94,94,259,-361,-406,94,259,94,94,94,-250,-251,-252,94,94,94,94,94,94,94,94,94,94,-302,94,-306,-255,-270,259,94,-178,-192,-193,-411,-412,94,259,-171,94,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,259,259,259,259,259,259,259,259,259,-180,94,94,94,94,259,94,-280,-281,94,259,259,-413,259,94,94,-413,259,259,94,94,94,-413,-413,259,94,94,-254,-269,-410,259,94,259,94,94,94,-191,94,94,94,-190,94,94,-385,94,259,259,-183,259,259,94,94,-249,259,259,94,94,94,94,94,94,94,259,259,94,94,94,94,94,-260,-171,94,94,94,259,259,259,259,259,259,259,259,-362,94,-363,259,259,259,259,259,259,259,-272,-277,-276,94,-295,259,94,94,94,-287,-288,-303,-304,-305,-259,94,-178,259,-175,-187,-188,-189,-184,-185,-186,-274,-246,-248,-289,-294,94,-290,-291,94,259,-413,-271,-278,-296,259,-299,-292,-279,-286,94,-273,]),'NAND':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[95,95,-405,95,95,95,95,95,95,95,95,95,95,95,-196,-197,-198,-199,-200,-201,-202,-203,-195,95,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,-406,95,95,95,95,-250,-251,-252,95,95,95,95,95,95,95,95,95,95,-302,95,-306,-255,-270,95,-411,-412,95,95,95,95,95,95,95,-280,-281,95,-413,95,95,-413,95,95,95,-413,-413,95,95,-254,-269,-410,95,95,95,95,95,95,95,95,95,95,95,95,-249,95,95,95,95,95,95,95,95,95,95,95,95,-260,95,95,95,95,-272,-277,-276,95,-295,95,95,95,-287,-288,-303,-304,-305,-259,95,-274,-246,-248,-289,-294,95,-290,-291,95,-413,-271,-278,-296,-299,-292,-279,-286,95,-273,]),'NOR':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[96,96,-405,96,96,96,96,96,96,96,96,96,96,96,-196,-197,-198,-199,-200,-201,-202,-203,-195,96,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,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,96,96,96,96,-406,96,96,96,96,-250,-251,-252,96,96,96,96,96,96,96,96,96,96,-302,96,-306,-255,-270,96,-411,-412,96,96,96,96,96,96,96,-280,-281,96,-413,96,96,-413,96,96,96,-413,-413,96,96,-254,-269,-410,96,96,96,96,96,96,96,96,96,96,96,96,-249,96,96,96,96,96,96,96,96,96,96,96,96,-260,96,96,96,96,-272,-277,-276,96,-295,96,96,96,-287,-288,-303,-304,-305,-259,96,-274,-246,-248,-289,-294,96,-290,-291,96,-413,-271,-278,-296,-299,-292,-279,-286,96,-273,]),'OR':([23,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,111,112,113,114,115,116,117,118,119,120,121,122,123,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,282,283,285,288,295,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,368,369,370,371,372,373,374,381,388,408,409,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,442,443,445,446,448,449,450,451,457,459,461,462,463,464,465,482,483,484,494,495,497,498,499,501,504,505,508,511,512,513,514,525,527,552,553,554,555,556,557,558,559,560,561,562,563,564,565,569,576,577,578,579,580,581,585,586,587,588,589,590,591,604,605,608,609,610,611,612,618,626,628,633,637,668,669,670,671,672,673,674,675,676,677,678,689,692,693,694,695,696,697,702,703,704,708,709,712,713,714,715,717,718,719,720,721,722,728,729,731,732,736,737,738,739,740,741,757,758,759,760,761,763,765,766,767,770,781,782,783,785,786,787,788,789,790,793,794,],[97,97,-405,262,97,97,97,97,97,97,97,97,97,97,-172,-173,-174,-175,-176,-177,-178,-179,97,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,97,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,97,97,262,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,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,97,97,97,262,-361,-406,97,262,97,97,97,-250,-251,-252,97,97,97,97,97,97,97,97,97,97,-302,97,-306,-255,-270,262,97,-178,-192,-193,-411,-412,97,262,-171,97,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,262,262,262,262,262,262,-180,97,97,97,97,262,97,-280,-281,97,262,262,-413,262,97,97,-413,262,262,97,97,97,-413,-413,262,97,97,-254,-269,-410,262,97,262,97,97,97,-191,97,97,97,-190,97,97,-385,97,262,262,-183,262,262,97,97,-249,262,262,97,97,97,97,97,97,97,262,262,97,97,97,97,97,-260,-171,97,97,97,262,262,262,262,262,262,262,262,-362,97,-363,262,262,262,262,262,262,262,-272,-277,-276,97,-295,262,97,97,97,-287,-288,-303,-304,-305,-259,97,-178,262,-175,-187,-188,-189,-184,-185,-186,-274,-246,-248,-289,-294,97,-290,-291,97,262,-413,-271,-278,-296,262,-299,-292,-279,-286,97,-273,]),'XOR':([23,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,111,112,113,114,115,116,117,118,119,120,121,122,123,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,282,283,285,288,295,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,368,369,370,371,372,373,374,381,388,408,409,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,442,443,445,446,448,449,450,451,457,459,461,462,463,464,465,482,483,484,494,495,497,498,499,501,504,505,508,511,512,513,514,525,527,552,553,554,555,556,557,558,559,560,561,562,563,564,565,569,576,577,578,579,580,581,585,586,587,588,589,590,591,604,605,608,609,610,611,612,618,626,628,633,637,668,669,670,671,672,673,674,675,676,677,678,689,692,693,694,695,696,697,702,703,704,708,709,712,713,714,715,717,718,719,720,721,722,728,729,731,732,736,737,738,739,740,741,757,758,759,760,761,763,765,766,767,770,781,782,783,785,786,787,788,789,790,793,794,],[98,98,-405,260,98,98,98,98,98,98,98,98,98,98,-172,-173,-174,-175,-176,-177,-178,-179,98,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,98,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,98,98,260,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,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,98,98,98,260,-361,-406,98,260,98,98,98,-250,-251,-252,98,98,98,98,98,98,98,98,98,98,-302,98,-306,-255,-270,260,98,-178,-192,-193,-411,-412,98,260,-171,98,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,260,260,260,260,260,260,260,-180,98,98,98,98,260,98,-280,-281,98,260,260,-413,260,98,98,-413,260,260,98,98,98,-413,-413,260,98,98,-254,-269,-410,260,98,260,98,98,98,-191,98,98,98,-190,98,98,-385,98,260,260,-183,260,260,98,98,-249,260,260,98,98,98,98,98,98,98,260,260,98,98,98,98,98,-260,-171,98,98,98,260,260,260,260,260,260,260,260,-362,98,-363,260,260,260,260,260,260,260,-272,-277,-276,98,-295,260,98,98,98,-287,-288,-303,-304,-305,-259,98,-178,260,-175,-187,-188,-189,-184,-185,-186,-274,-246,-248,-289,-294,98,-290,-291,98,260,-413,-271,-278,-296,260,-299,-292,-279,-286,98,-273,]),'XNOR':([23,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,111,112,113,114,115,116,117,118,119,120,121,122,123,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,282,283,285,288,295,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,368,369,370,371,372,373,374,381,388,408,409,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,442,443,445,446,448,449,450,451,457,459,461,462,463,464,465,482,483,484,494,495,497,498,499,501,504,505,508,511,512,513,514,525,527,552,553,554,555,556,557,558,559,560,561,562,563,564,565,569,576,577,578,579,580,581,585,586,587,588,589,590,591,604,605,608,609,610,611,612,618,626,628,633,637,668,669,670,671,672,673,674,675,676,677,678,689,692,693,694,695,696,697,702,703,704,708,709,712,713,714,715,717,718,719,720,721,722,728,729,731,732,736,737,738,739,740,741,757,758,759,760,761,763,765,766,767,770,781,782,783,785,786,787,788,789,790,793,794,],[99,99,-405,261,99,99,99,99,99,99,99,99,99,99,-172,-173,-174,-175,-176,-177,-178,-179,99,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,99,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,99,99,261,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,99,99,99,261,-361,-406,99,261,99,99,99,-250,-251,-252,99,99,99,99,99,99,99,99,99,99,-302,99,-306,-255,-270,261,99,-178,-192,-193,-411,-412,99,261,-171,99,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,261,261,261,261,261,261,261,-180,99,99,99,99,261,99,-280,-281,99,261,261,-413,261,99,99,-413,261,261,99,99,99,-413,-413,261,99,99,-254,-269,-410,261,99,261,99,99,99,-191,99,99,99,-190,99,99,-385,99,261,261,-183,261,261,99,99,-249,261,261,99,99,99,99,99,99,99,261,261,99,99,99,99,99,-260,-171,99,99,99,261,261,261,261,261,261,261,261,-362,99,-363,261,261,261,261,261,261,261,-272,-277,-276,99,-295,261,99,99,99,-287,-288,-303,-304,-305,-259,99,-178,261,-175,-187,-188,-189,-184,-185,-186,-274,-246,-248,-289,-294,99,-290,-291,99,261,-413,-271,-278,-296,261,-299,-292,-279,-286,99,-273,]),'LBRACE':([23,54,55,56,57,58,59,87,88,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,111,112,113,114,115,116,117,118,119,120,121,122,123,139,143,165,171,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,197,206,207,208,209,212,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,282,283,285,288,289,290,296,299,301,302,303,304,306,309,310,312,318,319,326,328,329,340,341,342,343,344,345,349,352,353,354,356,357,358,359,360,361,362,364,365,366,367,369,370,371,372,373,374,381,395,408,409,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,441,442,443,445,446,449,450,451,452,455,457,462,464,465,467,471,473,474,476,478,479,482,486,494,495,497,498,499,504,505,508,509,510,511,512,514,527,533,534,535,536,540,541,542,543,544,552,553,554,555,556,557,558,559,560,561,562,565,572,574,577,578,579,582,583,585,586,587,588,589,590,591,593,596,599,606,608,609,610,611,612,614,615,616,617,618,619,620,621,622,623,624,625,626,628,633,637,641,651,656,668,676,677,678,685,686,687,702,703,704,705,708,709,713,714,715,717,718,719,720,721,722,723,728,736,737,738,739,740,741,756,757,758,759,760,761,762,763,764,765,766,767,768,781,782,783,784,785,787,788,789,790,793,794,],[108,171,-413,-413,-413,-413,-413,108,-405,108,108,108,108,108,108,108,108,108,108,-172,-173,-174,-175,-176,-177,-178,-179,108,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,108,-253,171,171,-413,-217,-413,-413,-413,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,171,-413,-413,-413,108,-253,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,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,108,108,108,443,-361,-406,108,-413,-82,108,108,108,-250,-251,-252,-92,108,-98,-102,108,-107,108,108,108,-218,-227,-220,-221,-222,-223,108,108,108,108,-413,108,-302,108,-306,-413,-255,-257,-258,-413,-270,108,-250,-251,-252,-411,-412,108,-413,-171,108,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,-180,108,108,108,108,108,-280,-281,171,-83,108,-413,108,108,-93,-103,-104,-106,-108,-109,-111,-413,171,108,108,108,-413,-413,108,108,-254,-256,-413,-269,-410,108,108,-413,-373,-374,-375,-413,-392,-393,-394,-395,108,108,-191,108,108,108,-190,108,108,-385,108,-183,-413,-283,108,108,-249,-105,-110,108,108,108,108,108,108,108,-209,-219,-228,-413,108,108,108,108,108,-413,-413,-413,-413,-260,-262,-263,-264,-265,-266,-267,-268,-249,108,108,108,-372,171,-391,-170,-362,108,-363,-253,171,-282,-272,-277,-276,-413,108,-295,108,108,108,-287,-288,-303,-304,-305,-259,-261,108,-187,-188,-189,-184,-185,-186,-413,-274,-246,-248,-289,-294,-413,108,-413,-290,-291,108,-413,-413,-271,-278,-413,-296,-299,-292,-279,-286,108,-273,]),'DOLLER':([23,55,56,57,58,59,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,143,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,290,296,299,301,302,303,304,306,309,310,312,318,319,326,328,329,340,341,342,343,344,345,349,352,353,354,357,358,359,360,361,362,364,365,366,367,369,373,374,381,409,442,443,445,446,449,450,451,455,457,462,464,465,467,471,473,474,476,478,479,482,494,495,497,498,499,504,505,508,509,510,511,512,514,527,552,553,554,555,556,557,558,559,560,562,577,578,579,582,583,585,586,587,588,589,590,591,593,596,599,606,608,609,610,611,612,615,616,617,618,619,620,621,622,623,624,625,628,633,637,677,702,703,704,705,708,709,713,714,715,717,718,719,720,721,722,723,728,736,737,738,739,740,741,756,757,758,759,760,761,762,763,764,765,766,767,768,781,782,783,784,785,787,788,789,790,793,794,],[109,-413,-413,-413,-413,109,109,-405,109,109,109,109,109,109,109,109,109,109,109,-196,-197,-198,-199,-200,-201,-202,-203,-195,109,-253,109,-217,109,109,109,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,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,-406,109,-82,109,109,109,-250,-251,-252,-92,109,-98,-102,109,-107,109,109,109,-218,-227,-220,-221,-222,-223,109,109,109,109,109,-302,109,-306,109,-255,-257,-258,109,-270,109,-411,-412,109,109,109,109,109,109,109,-280,-281,-83,109,-413,109,109,-93,-103,-104,-106,-108,-109,-111,-413,109,109,109,-413,-413,109,109,-254,-256,109,-269,-410,109,109,109,109,-191,109,109,109,-190,109,109,109,109,109,-249,-105,-110,109,109,109,109,109,109,109,-209,-219,-228,109,109,109,109,109,109,109,109,109,-260,-262,-263,-264,-265,-266,-267,-268,109,109,109,109,-272,-277,-276,109,109,-295,109,109,109,-287,-288,-303,-304,-305,-259,-261,109,-187,-188,-189,-184,-185,-186,109,-274,-246,-248,-289,-294,109,109,109,-290,-291,109,109,-413,-271,-278,109,-296,-299,-292,-279,-286,109,-273,]),'INTNUMBER_DEC':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,142,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[114,114,-405,114,114,114,114,114,114,114,114,114,114,114,-196,-197,-198,-199,-200,-201,-202,-203,-195,114,114,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,-406,114,114,114,114,-250,-251,-252,114,114,114,114,114,114,114,114,114,114,-302,114,-306,-255,-270,114,-411,-412,114,114,114,114,114,114,114,-280,-281,114,-413,114,114,-413,114,114,114,-413,-413,114,114,-254,-269,-410,114,114,114,114,114,114,114,114,114,114,114,114,-249,114,114,114,114,114,114,114,114,114,114,114,114,-260,114,114,114,114,-272,-277,-276,114,-295,114,114,114,-287,-288,-303,-304,-305,-259,114,-274,-246,-248,-289,-294,114,-290,-291,114,-413,-271,-278,-296,-299,-292,-279,-286,114,-273,]),'SIGNED_INTNUMBER_DEC':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,142,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[115,115,-405,115,115,115,115,115,115,115,115,115,115,115,-196,-197,-198,-199,-200,-201,-202,-203,-195,115,115,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,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,-406,115,115,115,115,-250,-251,-252,115,115,115,115,115,115,115,115,115,115,-302,115,-306,-255,-270,115,-411,-412,115,115,115,115,115,115,115,-280,-281,115,-413,115,115,-413,115,115,115,-413,-413,115,115,-254,-269,-410,115,115,115,115,115,115,115,115,115,115,115,115,-249,115,115,115,115,115,115,115,115,115,115,115,115,-260,115,115,115,115,-272,-277,-276,115,-295,115,115,115,-287,-288,-303,-304,-305,-259,115,-274,-246,-248,-289,-294,115,-290,-291,115,-413,-271,-278,-296,-299,-292,-279,-286,115,-273,]),'INTNUMBER_BIN':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,142,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[116,116,-405,116,116,116,116,116,116,116,116,116,116,116,-196,-197,-198,-199,-200,-201,-202,-203,-195,116,116,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,-406,116,116,116,116,-250,-251,-252,116,116,116,116,116,116,116,116,116,116,-302,116,-306,-255,-270,116,-411,-412,116,116,116,116,116,116,116,-280,-281,116,-413,116,116,-413,116,116,116,-413,-413,116,116,-254,-269,-410,116,116,116,116,116,116,116,116,116,116,116,116,-249,116,116,116,116,116,116,116,116,116,116,116,116,-260,116,116,116,116,-272,-277,-276,116,-295,116,116,116,-287,-288,-303,-304,-305,-259,116,-274,-246,-248,-289,-294,116,-290,-291,116,-413,-271,-278,-296,-299,-292,-279,-286,116,-273,]),'SIGNED_INTNUMBER_BIN':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,142,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[117,117,-405,117,117,117,117,117,117,117,117,117,117,117,-196,-197,-198,-199,-200,-201,-202,-203,-195,117,117,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,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,-406,117,117,117,117,-250,-251,-252,117,117,117,117,117,117,117,117,117,117,-302,117,-306,-255,-270,117,-411,-412,117,117,117,117,117,117,117,-280,-281,117,-413,117,117,-413,117,117,117,-413,-413,117,117,-254,-269,-410,117,117,117,117,117,117,117,117,117,117,117,117,-249,117,117,117,117,117,117,117,117,117,117,117,117,-260,117,117,117,117,-272,-277,-276,117,-295,117,117,117,-287,-288,-303,-304,-305,-259,117,-274,-246,-248,-289,-294,117,-290,-291,117,-413,-271,-278,-296,-299,-292,-279,-286,117,-273,]),'INTNUMBER_OCT':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,142,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[118,118,-405,118,118,118,118,118,118,118,118,118,118,118,-196,-197,-198,-199,-200,-201,-202,-203,-195,118,118,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,-406,118,118,118,118,-250,-251,-252,118,118,118,118,118,118,118,118,118,118,-302,118,-306,-255,-270,118,-411,-412,118,118,118,118,118,118,118,-280,-281,118,-413,118,118,-413,118,118,118,-413,-413,118,118,-254,-269,-410,118,118,118,118,118,118,118,118,118,118,118,118,-249,118,118,118,118,118,118,118,118,118,118,118,118,-260,118,118,118,118,-272,-277,-276,118,-295,118,118,118,-287,-288,-303,-304,-305,-259,118,-274,-246,-248,-289,-294,118,-290,-291,118,-413,-271,-278,-296,-299,-292,-279,-286,118,-273,]),'SIGNED_INTNUMBER_OCT':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,142,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[119,119,-405,119,119,119,119,119,119,119,119,119,119,119,-196,-197,-198,-199,-200,-201,-202,-203,-195,119,119,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,-406,119,119,119,119,-250,-251,-252,119,119,119,119,119,119,119,119,119,119,-302,119,-306,-255,-270,119,-411,-412,119,119,119,119,119,119,119,-280,-281,119,-413,119,119,-413,119,119,119,-413,-413,119,119,-254,-269,-410,119,119,119,119,119,119,119,119,119,119,119,119,-249,119,119,119,119,119,119,119,119,119,119,119,119,-260,119,119,119,119,-272,-277,-276,119,-295,119,119,119,-287,-288,-303,-304,-305,-259,119,-274,-246,-248,-289,-294,119,-290,-291,119,-413,-271,-278,-296,-299,-292,-279,-286,119,-273,]),'INTNUMBER_HEX':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,142,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[120,120,-405,120,120,120,120,120,120,120,120,120,120,120,-196,-197,-198,-199,-200,-201,-202,-203,-195,120,120,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,-406,120,120,120,120,-250,-251,-252,120,120,120,120,120,120,120,120,120,120,-302,120,-306,-255,-270,120,-411,-412,120,120,120,120,120,120,120,-280,-281,120,-413,120,120,-413,120,120,120,-413,-413,120,120,-254,-269,-410,120,120,120,120,120,120,120,120,120,120,120,120,-249,120,120,120,120,120,120,120,120,120,120,120,120,-260,120,120,120,120,-272,-277,-276,120,-295,120,120,120,-287,-288,-303,-304,-305,-259,120,-274,-246,-248,-289,-294,120,-290,-291,120,-413,-271,-278,-296,-299,-292,-279,-286,120,-273,]),'SIGNED_INTNUMBER_HEX':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,142,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[121,121,-405,121,121,121,121,121,121,121,121,121,121,121,-196,-197,-198,-199,-200,-201,-202,-203,-195,121,121,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,-406,121,121,121,121,-250,-251,-252,121,121,121,121,121,121,121,121,121,121,-302,121,-306,-255,-270,121,-411,-412,121,121,121,121,121,121,121,-280,-281,121,-413,121,121,-413,121,121,121,-413,-413,121,121,-254,-269,-410,121,121,121,121,121,121,121,121,121,121,121,121,-249,121,121,121,121,121,121,121,121,121,121,121,121,-260,121,121,121,121,-272,-277,-276,121,-295,121,121,121,-287,-288,-303,-304,-305,-259,121,-274,-246,-248,-289,-294,121,-290,-291,121,-413,-271,-278,-296,-299,-292,-279,-286,121,-273,]),'FLOATNUMBER':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,142,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[122,122,-405,122,122,122,122,122,122,122,122,122,122,122,-196,-197,-198,-199,-200,-201,-202,-203,-195,122,122,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,-406,122,122,122,122,-250,-251,-252,122,122,122,122,122,122,122,122,122,122,-302,122,-306,-255,-270,122,-411,-412,122,122,122,122,122,122,122,-280,-281,122,-413,122,122,-413,122,122,122,-413,-413,122,122,-254,-269,-410,122,122,122,122,122,122,122,122,122,122,122,122,-249,122,122,122,122,122,122,122,122,122,122,122,122,-260,122,122,122,122,-272,-277,-276,122,-295,122,122,122,-287,-288,-303,-304,-305,-259,122,-274,-246,-248,-289,-294,122,-290,-291,122,-413,-271,-278,-296,-299,-292,-279,-286,122,-273,]),'STRING_LITERAL':([23,87,88,90,91,92,93,94,95,96,97,98,99,108,114,115,116,117,118,119,120,121,122,139,143,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,285,288,296,299,301,302,303,304,309,318,326,328,329,349,352,353,354,357,358,359,360,362,367,369,373,374,381,409,442,443,445,446,449,450,451,457,462,464,465,482,494,495,497,498,499,504,505,508,511,512,514,527,552,553,555,556,557,559,560,562,577,578,579,585,586,587,588,589,590,591,608,609,610,611,612,618,628,633,637,677,702,703,704,708,709,713,714,715,717,718,719,720,721,722,728,757,758,759,760,761,763,765,766,767,781,782,783,785,787,788,789,790,793,794,],[123,123,-405,123,123,123,123,123,123,123,123,123,123,123,-196,-197,-198,-199,-200,-201,-202,-203,-195,123,-253,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,-406,123,123,123,123,-250,-251,-252,123,123,123,123,123,123,123,123,123,123,-302,123,-306,-255,-270,123,-411,-412,123,123,123,123,123,123,123,-280,-281,123,-413,123,123,-413,123,123,123,-413,-413,123,123,-254,-269,-410,123,123,123,123,123,123,123,123,123,123,123,123,-249,123,123,123,123,123,123,123,123,123,123,123,123,-260,123,123,123,123,-272,-277,-276,123,-295,123,123,123,-287,-288,-303,-304,-305,-259,123,-274,-246,-248,-289,-294,123,-290,-291,123,-413,-271,-278,-296,-299,-292,-279,-286,123,-273,]),'ENDGENERATE':([29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,86,126,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,582,583,584,618,639,654,679,680,681,702,703,704,717,718,719,720,721,722,733,734,749,757,758,759,760,765,766,773,774,775,776,778,779,780,782,783,788,789,790,794,795,],[-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,-413,-8,286,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,-105,-110,-115,-260,-369,-389,-353,-354,-355,-272,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,-358,-359,-360,-271,-278,-292,-279,-286,-273,-351,]),'IF':([29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,55,56,57,58,59,86,88,114,115,116,117,118,119,120,121,122,126,127,128,129,130,131,143,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,197,206,207,208,212,285,287,290,294,302,303,304,306,310,312,319,324,337,338,340,341,342,343,344,345,346,347,348,358,360,361,362,364,365,366,367,370,371,372,373,374,379,391,395,411,455,456,467,471,473,474,476,478,479,508,509,510,511,512,516,530,533,534,535,536,540,541,542,543,544,554,558,571,579,582,583,584,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,626,639,641,651,654,656,679,680,681,682,702,703,704,705,717,718,719,720,721,722,723,733,734,736,737,738,739,740,741,743,744,746,749,756,757,758,759,760,762,764,765,766,768,773,774,775,776,777,778,779,780,782,783,784,788,789,790,792,794,795,],[-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,132,-413,-413,-413,-413,196,-8,-405,-196,-197,-198,-199,-200,-201,-202,-203,-195,132,-344,-346,-347,-348,-349,-253,196,-217,196,196,196,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,350,196,196,196,-253,-406,-345,-82,-88,-250,-251,-252,-92,-98,-102,-107,-339,-205,-245,-218,-227,-220,-221,-222,-223,-206,-207,-208,-302,-306,196,-255,-257,-258,196,-270,-250,-251,-252,-411,-412,-313,-314,-413,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-256,196,-269,-410,-307,-308,196,-373,-374,-375,196,-392,-393,-394,-395,-191,-190,132,-249,-105,-110,-115,-209,-219,-228,196,196,196,196,-260,-262,-263,-264,-265,-266,-267,-268,-249,-369,-372,350,-389,-391,-353,-354,-355,132,-272,-277,-276,196,-287,-288,-303,-304,-305,-259,-261,-368,-370,-187,-188,-189,-184,-185,-186,132,132,132,-116,196,-274,-246,-248,-289,196,196,-290,-291,196,-352,-356,-357,-350,132,-358,-359,-360,-271,-278,196,-292,-279,-286,132,-273,-351,]),'FOR':([29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,55,56,57,58,59,86,88,126,127,128,129,130,131,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,287,290,294,306,310,312,319,324,337,338,340,341,342,343,344,345,346,347,348,358,360,361,362,364,365,366,367,373,374,379,391,395,411,455,456,467,471,473,474,476,478,479,508,509,510,511,512,516,530,533,534,535,536,540,541,542,543,544,554,558,571,582,583,584,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,639,641,654,656,679,680,681,682,702,703,704,705,717,718,719,720,721,722,723,733,734,736,737,738,739,740,741,743,744,746,749,756,757,758,759,760,762,764,765,766,768,773,774,775,776,777,778,779,780,782,783,784,788,789,790,792,794,795,],[-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,133,-413,-413,-413,-413,202,-8,-405,133,-344,-346,-347,-348,-349,202,-217,202,202,202,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,202,202,202,-406,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-218,-227,-220,-221,-222,-223,-206,-207,-208,-302,-306,202,-255,-257,-258,202,-270,-411,-412,-313,-314,-413,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-256,202,-269,-410,-307,-308,202,-373,-374,-375,202,-392,-393,-394,-395,-191,-190,133,-105,-110,-115,-209,-219,-228,202,202,202,202,-260,-262,-263,-264,-265,-266,-267,-268,-369,-372,-389,-391,-353,-354,-355,133,-272,-277,-276,202,-287,-288,-303,-304,-305,-259,-261,-368,-370,-187,-188,-189,-184,-185,-186,133,133,133,-116,202,-274,-246,-248,-289,202,202,-290,-291,202,-352,-356,-357,-350,133,-358,-359,-360,-271,-278,202,-292,-279,-286,133,-273,-351,]),'ELSE':([29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,86,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,290,294,306,310,312,319,324,337,338,346,347,348,358,360,362,367,373,374,379,391,411,455,456,467,471,473,474,476,478,479,508,511,512,516,530,582,583,584,618,639,654,679,680,681,702,703,704,717,718,719,720,721,722,733,734,749,757,758,759,760,765,766,773,774,775,776,778,779,780,782,783,788,789,790,794,795,],[-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,-8,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,-255,-270,-411,-412,-313,-314,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-269,-410,-307,-308,-105,-110,-115,-260,-369,-389,743,-354,-355,756,-277,-276,-287,-288,-303,-304,-305,-259,-368,-370,-116,784,-246,-248,-289,-290,-291,-352,-356,-357,-350,-358,-359,-360,-271,-278,-292,-279,-286,-273,-351,]),'END':([29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,86,127,128,129,130,131,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,207,287,290,294,306,310,312,319,324,337,338,346,347,348,358,360,361,362,364,365,367,373,374,379,391,411,455,456,467,471,473,474,476,478,479,508,509,510,511,512,516,530,582,583,584,617,618,619,620,621,622,623,624,625,639,654,679,680,681,682,702,703,704,717,718,719,720,721,722,723,733,734,744,749,757,758,759,760,765,766,773,774,775,776,777,778,779,780,782,783,788,789,790,792,794,795,],[-65,-66,-67,-68,-69,-70,-71,-72,-73,-74,-75,-76,-77,-78,-79,-80,-81,-8,-344,-346,-347,-348,-349,-300,-301,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,362,-345,-82,-88,-92,-98,-102,-107,-339,-205,-245,-206,-207,-208,-302,-306,508,-255,-257,-258,-270,-411,-412,-313,-314,-7,-83,-89,-93,-103,-104,-106,-108,-109,-111,-254,-256,618,-269,-410,-307,-308,-105,-110,-115,722,-260,-262,-263,-264,-265,-266,-267,-268,-369,-389,-353,-354,-355,-413,-272,-277,-276,-287,-288,-303,-304,-305,-259,-261,-368,-370,776,-116,-274,-246,-248,-289,-290,-291,-352,-356,-357,-350,-413,-358,-359,-360,-271,-278,-292,-279,-286,795,-273,-351,]),'LBRACKET':([47,49,51,52,62,64,65,66,67,68,69,70,71,72,73,79,80,85,88,103,106,137,140,152,158,169,170,237,285,297,298,302,305,332,336,343,344,370,376,400,402,454,460,537,547,554,558,601,602,666,729,732,735,748,],[139,-44,139,139,139,-36,-37,-38,-39,-40,-41,-42,-43,-45,-46,-34,139,139,-405,276,278,-35,299,139,139,328,329,139,-406,299,-59,464,465,328,329,494,495,278,139,139,299,299,-58,139,299,-191,-190,464,465,299,278,276,299,-57,]),'AT':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,455,467,471,473,474,476,478,479,508,509,510,511,512,554,558,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[173,173,173,173,173,-405,173,-217,173,173,173,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,173,173,173,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,173,-255,-257,-258,173,-270,-411,-412,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,173,-269,-410,-191,-190,-105,-110,-209,-219,-228,173,173,173,173,-260,-262,-263,-264,-265,-266,-267,-268,-272,-277,-276,173,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,173,-274,-246,-248,-289,173,173,-290,-291,173,-271,-278,173,-292,-279,-286,-273,]),'CASE':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,201,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,395,455,467,471,473,474,476,478,479,508,509,510,511,512,533,534,535,536,540,541,542,543,544,554,558,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,641,656,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[-413,-413,-413,-413,198,-405,198,-217,198,198,198,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,355,198,198,198,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,198,-255,-257,-258,198,-270,-411,-412,-413,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,198,-269,-410,198,-373,-374,-375,198,-392,-393,-394,-395,-191,-190,-105,-110,-209,-219,-228,198,198,198,198,-260,-262,-263,-264,-265,-266,-267,-268,-372,-391,-272,-277,-276,198,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,198,-274,-246,-248,-289,198,198,-290,-291,198,-271,-278,198,-292,-279,-286,-273,]),'CASEX':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,395,455,467,471,473,474,476,478,479,508,509,510,511,512,533,534,535,536,540,541,542,543,544,554,558,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,641,656,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[-413,-413,-413,-413,199,-405,199,-217,199,199,199,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,199,199,199,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,199,-255,-257,-258,199,-270,-411,-412,-413,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,199,-269,-410,199,-373,-374,-375,199,-392,-393,-394,-395,-191,-190,-105,-110,-209,-219,-228,199,199,199,199,-260,-262,-263,-264,-265,-266,-267,-268,-372,-391,-272,-277,-276,199,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,199,-274,-246,-248,-289,199,199,-290,-291,199,-271,-278,199,-292,-279,-286,-273,]),'CASEZ':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,395,455,467,471,473,474,476,478,479,508,509,510,511,512,533,534,535,536,540,541,542,543,544,554,558,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,641,656,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[-413,-413,-413,-413,200,-405,200,-217,200,200,200,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,200,200,200,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,200,-255,-257,-258,200,-270,-411,-412,-413,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,200,-269,-410,200,-373,-374,-375,200,-392,-393,-394,-395,-191,-190,-105,-110,-209,-219,-228,200,200,200,200,-260,-262,-263,-264,-265,-266,-267,-268,-372,-391,-272,-277,-276,200,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,200,-274,-246,-248,-289,200,200,-290,-291,200,-271,-278,200,-292,-279,-286,-273,]),'UNIQUE':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,455,467,471,473,474,476,478,479,508,509,510,511,512,554,558,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[-413,-413,-413,-413,201,-405,201,-217,201,201,201,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,201,201,201,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,201,-255,-257,-258,201,-270,-411,-412,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,201,-269,-410,-191,-190,-105,-110,-209,-219,-228,201,201,201,201,-260,-262,-263,-264,-265,-266,-267,-268,-272,-277,-276,201,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,201,-274,-246,-248,-289,201,201,-290,-291,201,-271,-278,201,-292,-279,-286,-273,]),'WHILE':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,395,455,467,471,473,474,476,478,479,508,509,510,511,512,533,534,535,536,540,541,542,543,544,554,558,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,641,656,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[-413,-413,-413,-413,203,-405,203,-217,203,203,203,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,203,203,203,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,203,-255,-257,-258,203,-270,-411,-412,-413,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,203,-269,-410,203,-373,-374,-375,203,-392,-393,-394,-395,-191,-190,-105,-110,-209,-219,-228,203,203,203,203,-260,-262,-263,-264,-265,-266,-267,-268,-372,-391,-272,-277,-276,203,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,203,-274,-246,-248,-289,203,203,-290,-291,203,-271,-278,203,-292,-279,-286,-273,]),'WAIT':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,455,467,471,473,474,476,478,479,508,509,510,511,512,554,558,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[-413,-413,-413,-413,205,-405,205,-217,205,205,205,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,205,205,205,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,205,-255,-257,-258,205,-270,-411,-412,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,205,-269,-410,-191,-190,-105,-110,-209,-219,-228,205,205,205,205,-260,-262,-263,-264,-265,-266,-267,-268,-272,-277,-276,205,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,205,-274,-246,-248,-289,205,205,-290,-291,205,-271,-278,205,-292,-279,-286,-273,]),'FOREVER':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,455,467,471,473,474,476,478,479,508,509,510,511,512,554,558,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[-413,-413,-413,-413,206,-405,206,-217,206,206,206,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,206,206,206,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,206,-255,-257,-258,206,-270,-411,-412,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,206,-269,-410,-191,-190,-105,-110,-209,-219,-228,206,206,206,206,-260,-262,-263,-264,-265,-266,-267,-268,-272,-277,-276,206,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,206,-274,-246,-248,-289,206,206,-290,-291,206,-271,-278,206,-292,-279,-286,-273,]),'BEGIN':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,395,455,467,471,473,474,476,478,479,508,509,510,511,512,533,534,535,536,540,541,542,543,544,554,558,571,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,641,656,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,743,746,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[-413,-413,-413,-413,207,-405,207,-217,207,207,207,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,207,207,207,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,207,-255,-257,-258,207,-270,-411,-412,-413,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,207,-269,-410,207,-373,-374,-375,207,-392,-393,-394,-395,-191,-190,682,-105,-110,-209,-219,-228,207,207,207,207,-260,-262,-263,-264,-265,-266,-267,-268,-372,-391,-272,-277,-276,207,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,682,682,207,-274,-246,-248,-289,207,207,-290,-291,207,-271,-278,207,-292,-279,-286,-273,]),'FORK':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,455,467,471,473,474,476,478,479,508,509,510,511,512,554,558,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[-413,-413,-413,-413,208,-405,208,-217,208,208,208,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,208,208,208,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,208,-255,-257,-258,208,-270,-411,-412,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,208,-269,-410,-191,-190,-105,-110,-209,-219,-228,208,208,208,208,-260,-262,-263,-264,-265,-266,-267,-268,-272,-277,-276,208,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,208,-274,-246,-248,-289,208,208,-290,-291,208,-271,-278,208,-292,-279,-286,-273,]),'DISABLE':([55,56,57,58,59,88,172,174,175,176,177,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,206,207,208,285,290,306,310,312,319,340,341,342,343,344,345,358,360,361,362,364,365,366,367,373,374,455,467,471,473,474,476,478,479,508,509,510,511,512,554,558,582,583,593,596,599,606,615,616,617,618,619,620,621,622,623,624,625,702,703,704,705,717,718,719,720,721,722,723,736,737,738,739,740,741,756,757,758,759,760,762,764,765,766,768,782,783,784,788,789,790,794,],[-413,-413,-413,-413,213,-405,213,-217,213,213,213,-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,213,213,213,-406,-82,-92,-98,-102,-107,-218,-227,-220,-221,-222,-223,-302,-306,213,-255,-257,-258,213,-270,-411,-412,-83,-93,-103,-104,-106,-108,-109,-111,-254,-256,213,-269,-410,-191,-190,-105,-110,-209,-219,-228,213,213,213,213,-260,-262,-263,-264,-265,-266,-267,-268,-272,-277,-276,213,-287,-288,-303,-304,-305,-259,-261,-187,-188,-189,-184,-185,-186,213,-274,-246,-248,-289,213,213,-290,-291,213,-271,-278,213,-292,-279,-286,-273,]),'COMMA':([74,76,77,78,79,88,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,134,138,140,144,146,147,148,149,150,151,155,157,161,162,163,215,217,219,221,231,236,266,267,268,269,270,271,272,273,274,275,279,281,282,283,285,292,297,298,308,314,316,317,320,322,323,330,331,332,333,334,335,336,342,343,344,345,377,378,381,383,384,385,386,387,388,390,397,399,401,402,404,406,407,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,438,439,440,441,445,446,453,454,459,460,466,468,469,470,472,475,477,480,485,487,488,490,491,514,518,519,520,521,522,523,525,526,545,547,549,554,558,561,563,564,565,566,567,568,569,570,592,600,601,602,603,628,629,635,636,666,668,675,676,678,698,699,700,701,710,712,724,726,727,730,735,736,737,738,739,740,741,742,748,750,751,752,753,754,755,769,771,772,786,791,],[227,230,-33,-48,-34,-405,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,291,-85,-86,307,-95,-97,311,-100,-101,313,-113,313,325,-341,-342,380,-413,-316,380,-52,403,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,-413,442,-182,-361,-406,291,-87,-59,307,313,313,313,313,313,313,486,-126,-127,-128,-129,-130,-123,-220,-221,-222,-223,517,-310,-413,527,528,-331,-332,-335,-333,517,-32,-47,-55,-53,548,550,551,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,562,-387,-388,-180,-413,-413,-84,-86,-135,-58,-94,-96,-99,-112,313,-114,313,-340,-124,595,598,-216,-226,-413,-315,631,633,-324,-325,-322,-326,-317,-49,-54,667,-191,-190,-385,-181,-182,-183,677,-365,-366,-367,677,-125,-210,-212,-213,-211,-413,-309,-330,-334,-50,-170,-386,-362,-363,-214,-215,-224,-225,763,-298,-311,-323,-321,-338,-51,-187,-188,-189,-184,-185,-186,-364,-57,-120,-121,-122,-117,-118,-119,-312,-336,-337,-297,-327,]),'DOT':([88,103,106,169,170,217,285,302,305,332,336,343,344,370,381,514,528,554,558,601,602,628,631,729,732,],[-405,277,280,280,277,389,-406,280,277,280,277,280,277,280,524,389,389,-191,-190,280,277,389,524,280,277,]),'POWER':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,242,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,242,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,242,-361,-406,242,242,-178,-192,-193,242,-171,242,-146,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,-180,242,242,242,242,242,242,242,242,242,-191,-190,-385,242,242,-183,242,242,242,242,242,242,-171,242,242,242,242,242,242,242,242,-362,-363,242,242,242,242,242,242,242,242,-178,242,-175,-187,-188,-189,-184,-185,-186,242,242,]),'DIVIDE':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,243,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,243,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,243,-361,-406,243,243,-178,-192,-193,243,-171,-147,-146,-148,-149,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,-180,243,243,243,243,243,243,243,243,243,-191,-190,-385,243,243,-183,243,243,243,243,243,243,-171,243,243,243,243,243,243,243,243,-362,-363,243,243,243,243,243,243,243,243,-178,243,-175,-187,-188,-189,-184,-185,-186,243,243,]),'MOD':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,244,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,244,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,244,-361,-406,244,244,-178,-192,-193,244,-171,-147,-146,-148,-149,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,-180,244,244,244,244,244,244,244,244,244,-191,-190,-385,244,244,-183,244,244,244,244,244,244,-171,244,244,244,244,244,244,244,244,-362,-363,244,244,244,244,244,244,244,244,-178,244,-175,-187,-188,-189,-184,-185,-186,244,244,]),'LSHIFT':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,247,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,247,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,247,-361,-406,247,247,-178,-192,-193,247,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,-180,247,247,247,247,247,247,247,247,247,-191,-190,-385,247,247,-183,247,247,247,247,247,247,-171,247,247,247,247,247,247,247,247,-362,-363,247,247,247,247,247,247,247,247,-178,247,-175,-187,-188,-189,-184,-185,-186,247,247,]),'RSHIFT':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,248,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,248,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,248,-361,-406,248,248,-178,-192,-193,248,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,-180,248,248,248,248,248,248,248,248,248,-191,-190,-385,248,248,-183,248,248,248,248,248,248,-171,248,248,248,248,248,248,248,248,-362,-363,248,248,248,248,248,248,248,248,-178,248,-175,-187,-188,-189,-184,-185,-186,248,248,]),'LSHIFTA':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,249,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,249,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,249,-361,-406,249,249,-178,-192,-193,249,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,-180,249,249,249,249,249,249,249,249,249,-191,-190,-385,249,249,-183,249,249,249,249,249,249,-171,249,249,249,249,249,249,249,249,-362,-363,249,249,249,249,249,249,249,249,-178,249,-175,-187,-188,-189,-184,-185,-186,249,249,]),'RSHIFTA':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,250,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,250,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,250,-361,-406,250,250,-178,-192,-193,250,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,-180,250,250,250,250,250,250,250,250,250,-191,-190,-385,250,250,-183,250,250,250,250,250,250,-171,250,250,250,250,250,250,250,250,-362,-363,250,250,250,250,250,250,250,250,-178,250,-175,-187,-188,-189,-184,-185,-186,250,250,]),'LT':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,251,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,251,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,251,-361,-406,251,251,-178,-192,-193,251,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,251,251,251,251,251,251,251,251,251,251,251,251,251,251,-180,251,251,251,251,251,251,251,251,251,-191,-190,-385,251,251,-183,251,251,251,251,251,251,-171,251,251,251,251,251,251,251,251,-362,-363,251,251,251,251,251,251,251,251,-178,251,-175,-187,-188,-189,-184,-185,-186,251,251,]),'GT':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,252,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,252,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,252,-361,-406,252,252,-178,-192,-193,252,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,252,252,252,252,252,252,252,252,252,252,252,252,252,252,-180,252,252,252,252,252,252,252,252,252,-191,-190,-385,252,252,-183,252,252,252,252,252,252,-171,252,252,252,252,252,252,252,252,-362,-363,252,252,252,252,252,252,252,252,-178,252,-175,-187,-188,-189,-184,-185,-186,252,252,]),'LE':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,166,167,168,169,170,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,351,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,485,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,750,751,752,753,754,755,770,786,],[-405,253,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,-131,-132,-133,-134,-123,253,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,253,-361,-406,253,499,253,-178,-192,-193,253,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,253,253,253,253,253,253,253,253,253,253,253,253,253,253,-180,253,253,253,253,253,253,-124,253,253,253,-191,-190,-385,253,253,-183,253,253,253,253,253,253,-171,253,253,253,253,253,253,253,253,-362,-363,253,253,253,253,253,253,253,253,-178,253,-175,-187,-188,-189,-184,-185,-186,-120,-121,-122,-117,-118,-119,253,253,]),'GE':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,254,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,254,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,254,-361,-406,254,254,-178,-192,-193,254,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,254,254,254,254,254,254,254,254,254,254,254,254,254,254,-180,254,254,254,254,254,254,254,254,254,-191,-190,-385,254,254,-183,254,254,254,254,254,254,-171,254,254,254,254,254,254,254,254,-362,-363,254,254,254,254,254,254,254,254,-178,254,-175,-187,-188,-189,-184,-185,-186,254,254,]),'EQ':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,255,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,255,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,255,-361,-406,255,255,-178,-192,-193,255,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,255,255,255,255,255,255,255,255,255,255,-180,255,255,255,255,255,255,255,255,255,-191,-190,-385,255,255,-183,255,255,255,255,255,255,-171,255,255,255,255,255,255,255,255,-362,-363,255,255,255,255,255,255,255,255,-178,255,-175,-187,-188,-189,-184,-185,-186,255,255,]),'NE':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,256,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,256,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,256,-361,-406,256,256,-178,-192,-193,256,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,256,256,256,256,256,256,256,256,256,256,-180,256,256,256,256,256,256,256,256,256,-191,-190,-385,256,256,-183,256,256,256,256,256,256,-171,256,256,256,256,256,256,256,256,-362,-363,256,256,256,256,256,256,256,256,-178,256,-175,-187,-188,-189,-184,-185,-186,256,256,]),'EQL':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,257,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,257,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,257,-361,-406,257,257,-178,-192,-193,257,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,257,257,257,257,257,257,257,257,257,257,-180,257,257,257,257,257,257,257,257,257,-191,-190,-385,257,257,-183,257,257,257,257,257,257,-171,257,257,257,257,257,257,257,257,-362,-363,257,257,257,257,257,257,257,257,-178,257,-175,-187,-188,-189,-184,-185,-186,257,257,]),'NEL':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,258,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,258,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,258,-361,-406,258,258,-178,-192,-193,258,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,258,258,258,258,258,258,258,258,258,258,-180,258,258,258,258,258,258,258,258,258,-191,-190,-385,258,258,-183,258,258,258,258,258,258,-171,258,258,258,258,258,258,258,258,-362,-363,258,258,258,258,258,258,258,258,-178,258,-175,-187,-188,-189,-184,-185,-186,258,258,]),'LAND':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,263,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,263,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,263,-361,-406,263,263,-178,-192,-193,263,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,263,263,263,263,263,-180,263,263,263,263,263,263,263,263,263,-191,-190,-385,263,263,-183,263,263,263,263,263,263,-171,263,263,263,263,263,263,263,263,-362,-363,263,263,263,263,263,263,263,263,-178,263,-175,-187,-188,-189,-184,-185,-186,263,263,]),'LOR':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,264,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,264,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,264,-361,-406,264,264,-178,-192,-193,264,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,264,264,264,264,-180,264,264,264,264,264,264,264,264,264,-191,-190,-385,264,264,-183,264,264,264,264,264,264,-171,264,264,264,264,264,264,264,264,-362,-363,264,264,264,264,264,264,264,264,-178,264,-175,-187,-188,-189,-184,-185,-186,264,264,]),'COND':([88,89,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,240,266,267,268,269,270,271,272,273,274,275,282,283,285,295,368,370,371,372,388,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,441,448,459,461,463,483,484,501,513,525,554,558,561,563,564,565,569,576,580,581,604,605,626,668,669,670,671,672,673,674,675,676,678,689,692,693,694,695,696,697,712,729,731,732,736,737,738,739,740,741,770,786,],[-405,265,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,265,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,265,-361,-406,265,265,-178,-192,-193,265,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,265,265,265,265,-180,265,265,265,265,265,265,265,265,265,-191,-190,-385,265,265,-183,265,265,265,265,265,265,-171,265,265,265,265,265,265,265,265,-362,-363,265,265,265,265,265,265,265,265,-178,265,-175,-187,-188,-189,-184,-185,-186,265,265,]),'RBRACE':([88,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,266,267,268,269,270,271,272,273,274,275,281,282,283,285,330,331,332,333,334,335,336,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,441,444,485,554,558,561,563,564,565,592,668,676,678,736,737,738,739,740,741,750,751,752,753,754,755,],[-405,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,441,-182,-361,-406,485,-126,-127,-128,-129,-130,-123,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,-180,565,-124,-191,-190,-385,-181,-182,-183,-125,-170,-362,-363,-187,-188,-189,-184,-185,-186,-120,-121,-122,-117,-118,-119,]),'COLON':([88,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,207,266,267,268,269,270,271,272,273,274,275,283,285,295,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,441,461,483,484,554,558,561,565,604,605,668,676,678,682,710,711,712,736,737,738,739,740,741,786,],[-405,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,363,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,-361,-406,457,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,552,553,557,-180,577,586,589,-191,-190,-385,-183,557,553,-170,-362,-363,745,762,764,-298,-187,-188,-189,-184,-185,-186,-297,]),'PLUSCOLON':([88,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,266,267,268,269,270,271,272,273,274,275,283,285,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,436,437,441,483,484,554,558,561,565,604,605,668,676,678,736,737,738,739,740,741,],[-405,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,-361,-406,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,555,559,-180,587,590,-191,-190,-385,-183,559,555,-170,-362,-363,-187,-188,-189,-184,-185,-186,]),'MINUSCOLON':([88,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,266,267,268,269,270,271,272,273,274,275,283,285,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,436,437,441,483,484,554,558,561,565,604,605,668,676,678,736,737,738,739,740,741,],[-405,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,-361,-406,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,556,560,-180,588,591,-191,-190,-385,-183,560,556,-170,-362,-363,-187,-188,-189,-184,-185,-186,]),'RBRACKET':([88,100,101,102,103,104,105,106,107,111,112,113,114,115,116,117,118,119,120,121,122,123,266,267,268,269,270,271,272,273,274,275,283,285,408,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,436,437,441,483,484,554,558,561,565,576,580,581,604,605,668,669,670,671,672,673,674,676,678,689,692,693,694,695,696,697,736,737,738,739,740,741,],[-405,-172,-173,-174,-175,-176,-177,-178,-179,-192,-193,-194,-196,-197,-198,-199,-200,-201,-202,-203,-195,-204,-136,-137,-138,-139,-140,-141,-142,-143,-144,-145,-361,-406,-171,-147,-146,-148,-149,-150,-151,-152,-153,-154,-155,-156,-157,-158,-159,-160,-161,-162,-163,-164,-165,-166,-167,-168,-169,554,558,-180,558,554,-191,-190,-385,-183,688,558,554,558,554,-170,736,737,738,739,740,741,-362,-363,748,750,751,752,753,754,755,-187,-188,-189,-184,-185,-186,]),'JOIN':([180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,208,358,360,362,364,365,366,367,373,374,508,509,511,512,618,702,703,704,717,718,719,720,721,722,757,758,759,760,765,766,782,783,788,789,790,794,],[-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,367,-302,-306,-255,-257,-258,511,-270,-411,-412,-254,-256,-269,-410,-260,-272,-277,-276,-287,-288,-303,-304,-305,-259,-274,-246,-248,-289,-290,-291,-271,-278,-292,-279,-286,-273,]),'ENDFUNCTION':([180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,358,360,362,367,373,374,508,511,512,532,618,638,640,642,643,644,645,646,647,648,649,650,653,702,703,704,717,718,719,720,721,722,757,758,759,760,765,766,782,783,788,789,790,794,],[-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-302,-306,-255,-270,-411,-412,-254,-269,-410,639,-260,733,-371,-376,-377,-378,-379,-380,-381,-382,-383,-384,734,-272,-277,-276,-287,-288,-303,-304,-305,-259,-274,-246,-248,-289,-290,-291,-271,-278,-292,-279,-286,-273,]),'ENDTASK':([180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,358,360,362,367,373,374,508,511,512,539,618,655,657,658,659,660,661,662,663,664,665,702,703,704,717,718,719,720,721,722,757,758,759,760,765,766,782,783,788,789,790,794,],[-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-302,-306,-255,-270,-411,-412,-254,-269,-410,654,-260,-390,-396,-397,-398,-399,-400,-401,-402,-403,-404,-272,-277,-276,-287,-288,-303,-304,-305,-259,-274,-246,-248,-289,-290,-291,-271,-278,-292,-279,-286,-273,]),'ENDCASE':([180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,358,360,362,367,373,374,508,511,512,618,702,703,704,708,709,713,714,717,718,719,720,721,722,757,758,759,760,761,765,766,767,782,783,785,787,788,789,790,794,],[-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-302,-306,-255,-270,-411,-412,-254,-269,-410,-260,-272,-277,-276,760,-295,765,766,-287,-288,-303,-304,-305,-259,-274,-246,-248,-289,-294,-290,-291,788,-271,-278,-296,-299,-292,-279,-286,-273,]),'DEFAULT':([180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,358,360,362,367,373,374,508,511,512,610,611,612,618,702,703,704,708,709,713,714,715,717,718,719,720,721,722,757,758,759,760,761,765,766,767,782,783,785,787,788,789,790,794,],[-229,-230,-231,-232,-233,-234,-235,-236,-237,-238,-239,-240,-241,-242,-243,-244,-302,-306,-255,-270,-411,-412,-254,-269,-410,711,711,711,-260,-272,-277,-276,711,-295,711,711,711,-287,-288,-303,-304,-305,-259,-274,-246,-248,-289,-294,-290,-291,711,-271,-278,-296,-299,-292,-279,-286,-273,]),'POSEDGE':([339,594,595,],[492,492,492,]),'NEGEDGE':([339,594,595,],[493,493,493,]),}
+
+_lr_action = {}
+for _k, _v in _lr_action_items.items():
+   for _x,_y in zip(_v[0],_v[1]):
+      if not _x in _lr_action:  _lr_action[_x] = {}
+      _lr_action[_x][_k] = _y
+del _lr_action_items
+
+_lr_goto_items = {'source_text':([0,],[1,]),'description':([0,],[2,]),'definitions':([0,],[3,]),'definition':([0,3,],[4,9,]),'moduledef':([0,3,],[5,5,]),'pragma':([0,3,18,24,46,126,571,682,743,744,746,777,792,],[6,6,45,45,45,45,45,45,45,45,45,45,45,]),'modulename':([7,],[10,]),'paramlist':([10,],[14,]),'empty':([10,18,46,47,54,55,56,57,58,59,60,61,135,172,175,176,177,206,207,208,217,279,289,356,361,366,381,395,445,446,462,482,498,499,510,514,533,540,572,606,614,615,616,617,628,682,705,756,762,764,768,777,781,784,],[16,26,127,143,143,174,174,174,174,212,218,218,143,212,212,212,212,212,212,212,386,440,143,143,212,212,522,542,568,568,143,143,143,143,212,386,143,143,685,212,685,212,212,212,386,127,212,212,212,212,212,127,143,212,]),'portlist':([14,],[18,]),'items':([18,],[24,]),'item':([18,24,],[25,125,]),'standard_item':([18,24,46,126,571,682,743,744,746,777,792,],[27,27,129,129,129,129,129,129,129,129,129,]),'generate':([18,24,],[28,28,]),'decl':([18,24,46,126,393,395,510,531,533,538,540,571,617,682,743,744,746,777,792,],[29,29,29,29,535,543,621,535,535,535,543,29,621,29,29,29,29,29,29,]),'integerdecl':([18,24,46,126,393,395,510,531,533,538,540,571,617,682,743,744,746,777,792,],[30,30,30,30,536,544,622,536,536,536,544,30,622,30,30,30,30,30,30,]),'realdecl':([18,24,46,126,510,571,617,682,743,744,746,777,792,],[31,31,31,31,623,31,623,31,31,31,31,31,31,]),'declassign':([18,24,46,126,571,682,743,744,746,777,792,],[32,32,32,32,32,32,32,32,32,32,32,]),'parameterdecl':([18,24,46,126,510,571,617,682,743,744,746,777,792,],[33,33,33,33,624,33,624,33,33,33,33,33,33,]),'localparamdecl':([18,24,46,126,510,571,617,682,743,744,746,777,792,],[34,34,34,34,625,34,625,34,34,34,34,34,34,]),'genvardecl':([18,24,46,126,571,682,743,744,746,777,792,],[35,35,35,35,35,35,35,35,35,35,35,]),'assignment':([18,24,46,126,571,682,743,744,746,777,792,],[36,36,36,36,36,36,36,36,36,36,36,]),'always':([18,24,46,126,571,682,743,744,746,777,792,],[37,37,37,37,37,37,37,37,37,37,37,]),'always_ff':([18,24,46,126,571,682,743,744,746,777,792,],[38,38,38,38,38,38,38,38,38,38,38,]),'always_comb':([18,24,46,126,571,682,743,744,746,777,792,],[39,39,39,39,39,39,39,39,39,39,39,]),'always_latch':([18,24,46,126,571,682,743,744,746,777,792,],[40,40,40,40,40,40,40,40,40,40,40,]),'initial':([18,24,46,126,571,682,743,744,746,777,792,],[41,41,41,41,41,41,41,41,41,41,41,]),'instance':([18,24,46,126,571,682,743,744,746,777,792,],[42,42,42,42,42,42,42,42,42,42,42,]),'function':([18,24,46,126,571,682,743,744,746,777,792,],[43,43,43,43,43,43,43,43,43,43,43,]),'task':([18,24,46,126,571,682,743,744,746,777,792,],[44,44,44,44,44,44,44,44,44,44,44,]),'sigtypes':([18,19,24,46,126,230,393,395,510,531,533,538,540,571,617,682,743,744,746,777,792,],[47,80,47,47,47,400,537,537,537,537,537,537,537,47,537,47,47,47,47,47,47,]),'sigtype':([18,19,24,46,47,80,126,230,393,395,400,510,531,533,537,538,540,571,617,682,743,744,746,777,792,],[64,64,64,64,137,137,64,64,64,64,137,64,64,64,137,64,64,64,64,64,64,64,64,64,64,]),'ports':([19,],[74,]),'ioports':([19,],[76,]),'portname':([19,80,227,230,232,400,546,],[77,231,397,401,402,545,666,]),'ioport_head':([19,],[78,]),'params':([21,],[81,]),'params_begin':([21,],[82,]),'param_end':([21,82,],[83,234,]),'param':([21,82,],[84,235,]),'expression':([23,87,90,91,92,93,94,95,96,97,98,99,108,139,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,349,352,353,354,357,359,369,381,409,442,443,445,446,449,457,464,465,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,608,609,610,611,612,628,633,637,677,708,713,714,715,728,763,767,793,],[89,240,266,267,268,269,270,271,272,273,274,275,282,295,368,388,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,439,448,459,461,463,459,459,459,483,484,448,501,501,501,448,448,513,525,410,563,564,569,569,448,576,580,581,604,605,448,501,448,388,388,668,669,670,671,672,673,674,675,689,459,459,692,693,694,695,696,697,459,459,712,712,712,388,525,731,569,712,712,712,712,770,786,712,459,]),'concat':([23,87,90,91,92,93,94,95,96,97,98,99,108,139,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,282,288,296,299,301,309,318,326,328,329,349,352,353,354,357,359,369,381,409,442,443,445,446,449,457,464,465,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,608,609,610,611,612,628,633,637,677,708,713,714,715,728,763,767,793,],[100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,444,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,]),'repeat':([23,87,90,91,92,93,94,95,96,97,98,99,108,139,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,349,352,353,354,357,359,369,381,409,442,443,445,446,449,457,464,465,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,608,609,610,611,612,628,633,637,677,708,713,714,715,728,763,767,793,],[101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,]),'partselect':([23,87,90,91,92,93,94,95,96,97,98,99,108,139,173,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,339,349,352,353,354,357,359,369,381,409,442,443,445,446,449,457,464,465,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,597,598,608,609,610,611,612,628,633,637,677,708,713,714,715,728,763,767,793,],[102,102,102,102,102,102,102,102,102,102,102,102,102,102,345,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,345,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,345,345,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,]),'pointer':([23,54,87,90,91,92,93,94,95,96,97,98,99,108,139,142,165,171,173,197,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,339,349,352,353,354,357,359,369,381,409,442,443,445,446,449,452,457,464,465,486,492,493,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,597,598,608,609,610,611,612,628,633,637,651,677,686,708,713,714,715,728,763,767,793,],[103,170,103,103,103,103,103,103,103,103,103,103,103,103,103,305,170,336,344,170,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,344,103,103,103,103,103,103,103,103,103,103,103,103,103,103,170,103,103,103,336,602,602,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,344,344,103,103,103,103,103,103,103,732,170,103,170,103,103,103,103,103,103,103,103,]),'functioncall':([23,87,90,91,92,93,94,95,96,97,98,99,108,139,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,349,352,353,354,357,359,369,381,409,442,443,445,446,449,457,464,465,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,608,609,610,611,612,628,633,637,677,708,713,714,715,728,763,767,793,],[104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,]),'systemcall':([23,59,87,90,91,92,93,94,95,96,97,98,99,108,139,172,175,176,177,206,207,208,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,349,352,353,354,357,359,361,366,369,381,409,442,443,445,446,449,457,464,465,494,495,497,504,505,510,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,606,608,609,610,611,612,615,616,617,628,633,637,677,705,708,713,714,715,728,756,762,763,764,767,768,784,793,],[105,210,105,105,105,105,105,105,105,105,105,105,105,105,105,210,210,210,210,210,210,210,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,210,210,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,210,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,210,105,105,105,105,105,210,210,210,105,105,105,105,210,105,105,105,105,105,210,210,105,210,105,210,210,105,]),'identifier':([23,54,87,90,91,92,93,94,95,96,97,98,99,108,139,142,165,171,173,197,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,339,349,352,353,354,357,359,369,381,409,442,443,445,446,449,452,457,464,465,486,492,493,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,597,598,608,609,610,611,612,628,633,637,651,677,686,708,713,714,715,728,763,767,793,],[106,169,106,106,106,106,106,106,106,106,106,106,106,106,106,302,169,332,343,169,370,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,343,106,106,106,106,106,106,106,106,106,106,106,106,106,106,169,106,106,106,332,601,601,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,343,343,106,106,106,106,106,106,106,729,169,106,169,106,106,106,106,106,106,106,106,]),'const_expression':([23,87,90,91,92,93,94,95,96,97,98,99,108,139,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,349,352,353,354,357,359,369,381,409,442,443,445,446,449,457,464,465,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,608,609,610,611,612,628,633,637,677,708,713,714,715,728,763,767,793,],[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,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,]),'scope':([23,54,87,90,91,92,93,94,95,96,97,98,99,108,139,142,165,171,173,197,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,339,349,352,353,354,357,359,369,381,409,442,443,445,446,449,452,457,464,465,486,492,493,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,597,598,608,609,610,611,612,628,633,637,651,677,686,708,713,714,715,728,763,767,793,],[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,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,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,]),'intnumber':([23,87,90,91,92,93,94,95,96,97,98,99,108,139,142,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,349,352,353,354,357,359,369,381,409,442,443,445,446,449,457,464,465,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,608,609,610,611,612,628,633,637,677,708,713,714,715,728,763,767,793,],[111,111,111,111,111,111,111,111,111,111,111,111,111,111,303,371,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,]),'floatnumber':([23,87,90,91,92,93,94,95,96,97,98,99,108,139,142,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,349,352,353,354,357,359,369,381,409,442,443,445,446,449,457,464,465,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,608,609,610,611,612,628,633,637,677,708,713,714,715,728,763,767,793,],[112,112,112,112,112,112,112,112,112,112,112,112,112,112,304,372,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,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,]),'stringliteral':([23,87,90,91,92,93,94,95,96,97,98,99,108,139,209,217,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,276,278,279,288,296,299,301,309,318,326,328,329,349,352,353,354,357,359,369,381,409,442,443,445,446,449,457,464,465,494,495,497,504,505,514,527,552,553,555,556,557,559,560,562,577,578,585,586,587,588,589,590,591,608,609,610,611,612,628,633,637,677,708,713,714,715,728,763,767,793,],[113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,]),'generate_items':([46,682,777,],[126,744,792,]),'generate_item':([46,126,571,682,743,744,746,777,792,],[128,287,680,128,774,287,779,128,287,]),'generate_if':([46,126,571,682,743,744,746,777,792,],[130,130,130,130,130,130,130,130,130,]),'generate_for':([46,126,571,682,743,744,746,777,792,],[131,131,131,131,131,131,131,131,131,]),'declnamelist':([47,135,537,652,],[134,292,134,292,]),'width':([47,51,52,62,80,85,152,158,237,376,400,537,],[135,153,159,222,232,238,315,321,405,515,546,652,]),'declassign_element':([47,135,],[136,293,]),'declname':([47,135,291,537,652,],[138,138,453,138,138,]),'delays':([47,54,59,135,172,175,176,177,206,207,208,289,356,361,366,462,482,498,499,510,533,540,572,606,614,615,616,617,705,756,762,764,768,781,784,],[141,165,197,141,197,197,197,197,197,197,197,452,452,197,197,578,585,608,609,197,651,651,686,197,686,197,197,197,197,197,197,197,197,793,197,]),'integernamelist':([48,145,],[144,308,]),'integername':([48,145,307,],[146,146,466,]),'realnamelist':([50,],[148,]),'realname':([50,311,],[149,469,]),'param_substitution_list':([51,52,85,152,153,154,158,159,160,237,238,239,315,321,405,],[151,157,236,314,316,317,320,322,323,404,406,407,472,477,549,]),'param_substitution':([51,52,85,152,153,154,158,159,160,237,238,239,313,315,321,403,405,548,550,551,667,],[155,155,155,155,155,155,155,155,155,155,155,155,470,155,155,470,155,470,470,470,470,]),'genvarlist':([53,],[161,]),'genvar':([53,325,],[162,480,]),'lvalue':([54,165,197,452,651,686,],[164,327,351,575,575,747,]),'lpartselect':([54,165,171,197,452,486,651,686,],[166,166,333,166,166,333,166,166,]),'lpointer':([54,165,171,197,452,486,651,686,],[167,167,334,167,167,334,167,167,]),'lconcat':([54,165,171,197,452,486,651,686,],[168,168,335,168,168,335,168,168,]),'senslist':([55,56,57,58,59,172,175,176,177,206,207,208,361,366,510,606,615,616,617,705,756,762,764,768,784,],[172,175,176,177,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,]),'initial_statement':([59,],[178,]),'basic_statement':([59,172,175,176,177,206,207,208,361,366,510,606,615,616,617,705,756,762,764,768,784,],[179,338,338,338,338,360,365,365,365,365,620,704,718,720,620,704,704,785,787,790,704,]),'if_statement':([59,172,175,176,177,206,207,208,361,366,510,533,540,606,615,616,617,705,756,762,764,768,784,],[180,180,180,180,180,180,180,180,180,180,180,643,658,180,180,180,180,180,180,180,180,180,180,]),'case_statement':([59,172,175,176,177,206,207,208,361,366,510,533,540,606,615,616,617,705,756,762,764,768,784,],[181,181,181,181,181,181,181,181,181,181,181,646,661,181,181,181,181,181,181,181,181,181,181,]),'casex_statement':([59,172,175,176,177,206,207,208,361,366,510,533,540,606,615,616,617,705,756,762,764,768,784,],[182,182,182,182,182,182,182,182,182,182,182,647,662,182,182,182,182,182,182,182,182,182,182,]),'casez_statement':([59,172,175,176,177,206,207,208,361,366,510,533,540,606,615,616,617,705,756,762,764,768,784,],[183,183,183,183,183,183,183,183,183,183,183,648,663,183,183,183,183,183,183,183,183,183,183,]),'unique_case_statement':([59,172,175,176,177,206,207,208,361,366,510,606,615,616,617,705,756,762,764,768,784,],[184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,]),'for_statement':([59,172,175,176,177,206,207,208,361,366,510,533,540,606,615,616,617,705,756,762,764,768,784,],[185,185,185,185,185,185,185,185,185,185,185,644,659,185,185,185,185,185,185,185,185,185,185,]),'while_statement':([59,172,175,176,177,206,207,208,361,366,510,533,540,606,615,616,617,705,756,762,764,768,784,],[186,186,186,186,186,186,186,186,186,186,186,645,660,186,186,186,186,186,186,186,186,186,186,]),'event_statement':([59,172,175,176,177,206,207,208,361,366,510,606,615,616,617,705,756,762,764,768,784,],[187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,]),'wait_statement':([59,172,175,176,177,206,207,208,361,366,510,606,615,616,617,705,756,762,764,768,784,],[188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,]),'forever_statement':([59,172,175,176,177,206,207,208,361,366,510,606,615,616,617,705,756,762,764,768,784,],[189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,]),'block':([59,172,175,176,177,206,207,208,361,366,510,533,540,606,615,616,617,705,756,762,764,768,784,],[190,190,190,190,190,190,190,190,190,190,190,649,664,190,190,190,190,190,190,190,190,190,190,]),'namedblock':([59,172,175,176,177,206,207,208,361,366,510,533,540,606,615,616,617,705,756,762,764,768,784,],[191,191,191,191,191,191,191,191,191,191,191,650,665,191,191,191,191,191,191,191,191,191,191,]),'parallelblock':([59,172,175,176,177,206,207,208,361,366,510,606,615,616,617,705,756,762,764,768,784,],[192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,]),'blocking_substitution':([59,172,175,176,177,206,207,208,289,356,361,366,510,533,540,606,615,616,617,705,756,762,764,768,784,],[193,193,193,193,193,193,193,193,450,450,193,193,193,642,657,193,193,193,193,193,193,193,193,193,193,]),'nonblocking_substitution':([59,172,175,176,177,206,207,208,361,366,510,606,615,616,617,705,756,762,764,768,784,],[194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,]),'single_statement':([59,172,175,176,177,206,207,208,361,366,510,606,615,616,617,705,756,762,764,768,784,],[195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,]),'disable':([59,172,175,176,177,206,207,208,361,366,510,606,615,616,617,705,756,762,764,768,784,],[211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,]),'parameterlist':([60,61,],[214,220,]),'instance_bodylist_noname':([60,61,],[215,221,]),'instance_body_noname':([60,61,380,],[219,219,518,]),'concatlist':([108,443,],[281,281,]),'dimensions':([140,402,454,666,],[297,547,297,735,]),'length':([140,297,402,454,547,666,735,],[298,460,298,298,460,298,460,]),'lconcatlist':([171,],[330,]),'lconcat_one':([171,486,],[331,592,]),'always_statement':([172,175,176,177,],[337,346,347,348,]),'levelsig':([173,339,597,598,],[340,491,700,701,]),'levelsig_base':([173,339,597,598,],[342,342,342,342,]),'block_statements':([207,208,],[361,366,]),'block_statement':([207,208,361,366,],[364,364,509,509,]),'instance_bodylist':([214,220,],[377,390,]),'instance_body':([214,220,517,],[378,378,629,]),'instance_ports':([217,514,628,],[382,627,725,]),'instance_ports_list':([217,514,628,],[383,383,383,]),'instance_ports_arg':([217,514,628,],[384,384,384,]),'instance_port_list':([217,514,527,628,],[385,385,635,385,]),'instance_port_arg':([217,514,528,628,],[387,387,636,387,]),'ioport':([230,],[399,]),'func_args':([279,],[438,]),'cond':([288,349,357,359,449,497,505,],[447,496,506,507,573,607,573,]),'forpre':([289,356,],[449,505,]),'rvalue':([296,309,318,326,578,585,608,609,793,],[458,468,475,481,690,691,706,707,796,]),'edgesigs':([339,],[487,]),'levelsigs':([339,],[488,]),'edgesig':([339,594,595,],[490,698,699,]),'case_comp':([352,353,354,504,],[500,502,503,613,]),'param_args':([381,],[519,]),'param_args_noname':([381,],[520,]),'param_arg':([381,631,],[521,726,]),'param_arg_noname':([381,633,],[523,727,]),'function_statement':([393,531,538,],[532,638,653,]),'funcvardecls':([393,531,538,],[533,533,533,]),'funcvardecl':([393,531,533,538,],[534,534,641,534,]),'task_statement':([395,],[539,]),'taskvardecls':([395,],[540,]),'taskvardecl':([395,540,],[541,656,]),'sysargs':([445,446,],[566,570,]),'sysarg':([445,446,677,],[567,567,742,]),'forcond':([449,505,],[572,614,]),'edgesig_base':([492,493,],[600,603,]),'namedblock_statements':([510,],[617,]),'namedblock_statement':([510,617,],[619,723,]),'function_calc':([533,],[640,]),'task_calc':([540,],[655,]),'gif_true_item':([571,],[679,]),'generate_block':([571,743,746,],[681,775,780,]),'forpost':([572,614,],[683,716,]),'blocking_substitution_base':([572,614,],[684,684,]),'true_statement':([606,705,],[702,757,]),'ifcontent_statement':([606,705,756,784,],[703,703,783,783,]),'casecontent_statements':([610,611,612,715,],[708,713,714,767,]),'casecontent_statement':([610,611,612,708,713,714,715,767,],[709,709,709,761,761,761,709,761,]),'casecontent_condition':([610,611,612,708,713,714,715,767,],[710,710,710,710,710,710,710,710,]),'whilecontent_statement':([615,],[717,]),'waitcontent_statement':([616,],[719,]),'gif_false_item':([743,],[773,]),'generate_forcontent':([746,],[778,]),'else_statement':([756,784,],[782,794,]),'forcontent_statement':([768,],[789,]),}
+
+_lr_goto = {}
+for _k, _v in _lr_goto_items.items():
+   for _x, _y in zip(_v[0], _v[1]):
+       if not _x in _lr_goto: _lr_goto[_x] = {}
+       _lr_goto[_x][_k] = _y
+del _lr_goto_items
+_lr_productions = [
+  ("S' -> source_text","S'",1,None,None,None),
+  ('source_text -> description','source_text',1,'p_source_text','parser.py',83),
+  ('description -> definitions','description',1,'p_description','parser.py',88),
+  ('definitions -> definitions definition','definitions',2,'p_definitions','parser.py',93),
+  ('definitions -> definition','definitions',1,'p_definitions_one','parser.py',98),
+  ('definition -> moduledef','definition',1,'p_definition','parser.py',103),
+  ('definition -> pragma','definition',1,'p_definition_pragma','parser.py',108),
+  ('pragma -> LPAREN TIMES ID EQUALS expression TIMES RPAREN','pragma',7,'p_pragma_assign','parser.py',114),
+  ('pragma -> LPAREN TIMES ID TIMES RPAREN','pragma',5,'p_pragma','parser.py',120),
+  ('moduledef -> MODULE modulename paramlist portlist items ENDMODULE','moduledef',6,'p_moduledef','parser.py',127),
+  ('modulename -> ID','modulename',1,'p_modulename','parser.py',134),
+  ('modulename -> SENS_OR','modulename',1,'p_modulename_or','parser.py',139),
+  ('paramlist -> DELAY LPAREN params RPAREN','paramlist',4,'p_paramlist','parser.py',144),
+  ('paramlist -> empty','paramlist',1,'p_paramlist_empty','parser.py',149),
+  ('params -> params_begin param_end','params',2,'p_params','parser.py',153),
+  ('params_begin -> params_begin param','params_begin',2,'p_params_begin','parser.py',158),
+  ('params_begin -> param','params_begin',1,'p_params_begin_one','parser.py',163),
+  ('params -> param_end','params',1,'p_params_one','parser.py',168),
+  ('param -> PARAMETER param_substitution_list COMMA','param',3,'p_param','parser.py',173),
+  ('param -> PARAMETER SIGNED param_substitution_list COMMA','param',4,'p_param_signed','parser.py',180),
+  ('param -> PARAMETER width param_substitution_list COMMA','param',4,'p_param_width','parser.py',187),
+  ('param -> PARAMETER SIGNED width param_substitution_list COMMA','param',5,'p_param_signed_width','parser.py',194),
+  ('param -> PARAMETER INTEGER param_substitution_list COMMA','param',4,'p_param_integer','parser.py',201),
+  ('param_end -> PARAMETER param_substitution_list','param_end',2,'p_param_end','parser.py',208),
+  ('param_end -> PARAMETER SIGNED param_substitution_list','param_end',3,'p_param_end_signed','parser.py',215),
+  ('param_end -> PARAMETER width param_substitution_list','param_end',3,'p_param_end_width','parser.py',222),
+  ('param_end -> PARAMETER SIGNED width param_substitution_list','param_end',4,'p_param_end_signed_width','parser.py',229),
+  ('param_end -> PARAMETER INTEGER param_substitution_list','param_end',3,'p_param_end_integer','parser.py',236),
+  ('portlist -> LPAREN ports RPAREN SEMICOLON','portlist',4,'p_portlist','parser.py',243),
+  ('portlist -> LPAREN ioports RPAREN SEMICOLON','portlist',4,'p_portlist_io','parser.py',248),
+  ('portlist -> LPAREN RPAREN SEMICOLON','portlist',3,'p_portlist_paren_empty','parser.py',253),
+  ('portlist -> SEMICOLON','portlist',1,'p_portlist_empty','parser.py',258),
+  ('ports -> ports COMMA portname','ports',3,'p_ports','parser.py',263),
+  ('ports -> portname','ports',1,'p_ports_one','parser.py',269),
+  ('portname -> ID','portname',1,'p_portname','parser.py',275),
+  ('sigtypes -> sigtypes sigtype','sigtypes',2,'p_sigtypes','parser.py',280),
+  ('sigtypes -> sigtype','sigtypes',1,'p_sigtypes_one','parser.py',285),
+  ('sigtype -> INPUT','sigtype',1,'p_sigtype_input','parser.py',290),
+  ('sigtype -> OUTPUT','sigtype',1,'p_sigtype_output','parser.py',295),
+  ('sigtype -> INOUT','sigtype',1,'p_sigtype_inout','parser.py',300),
+  ('sigtype -> TRI','sigtype',1,'p_sigtype_tri','parser.py',305),
+  ('sigtype -> REG','sigtype',1,'p_sigtype_reg','parser.py',310),
+  ('sigtype -> LOGIC','sigtype',1,'p_sigtype_logic','parser.py',315),
+  ('sigtype -> WIRE','sigtype',1,'p_sigtype_wire','parser.py',320),
+  ('sigtype -> SIGNED','sigtype',1,'p_sigtype_signed','parser.py',325),
+  ('sigtype -> SUPPLY0','sigtype',1,'p_sigtype_supply0','parser.py',330),
+  ('sigtype -> SUPPLY1','sigtype',1,'p_sigtype_supply1','parser.py',335),
+  ('ioports -> ioports COMMA ioport','ioports',3,'p_ioports','parser.py',340),
+  ('ioports -> ioport_head','ioports',1,'p_ioports_one','parser.py',368),
+  ('ioport -> sigtypes portname','ioport',2,'p_ioport','parser.py',418),
+  ('ioport -> sigtypes width portname','ioport',3,'p_ioport_width','parser.py',423),
+  ('ioport -> sigtypes width portname dimensions','ioport',4,'p_ioport_dimensions','parser.py',428),
+  ('ioport_head -> sigtypes portname','ioport_head',2,'p_ioport_head','parser.py',433),
+  ('ioport_head -> sigtypes width portname','ioport_head',3,'p_ioport_head_width','parser.py',438),
+  ('ioport_head -> sigtypes width portname dimensions','ioport_head',4,'p_ioport_head_dimensions','parser.py',443),
+  ('ioport -> portname','ioport',1,'p_ioport_portname','parser.py',448),
+  ('width -> LBRACKET expression COLON expression RBRACKET','width',5,'p_width','parser.py',453),
+  ('length -> LBRACKET expression COLON expression RBRACKET','length',5,'p_length','parser.py',458),
+  ('dimensions -> dimensions length','dimensions',2,'p_dimensions','parser.py',463),
+  ('dimensions -> length','dimensions',1,'p_dimensions_one','parser.py',469),
+  ('items -> items item','items',2,'p_items','parser.py',475),
+  ('items -> item','items',1,'p_items_one','parser.py',480),
+  ('items -> empty','items',1,'p_items_empty','parser.py',485),
+  ('item -> standard_item','item',1,'p_item','parser.py',489),
+  ('item -> generate','item',1,'p_item','parser.py',490),
+  ('standard_item -> decl','standard_item',1,'p_standard_item','parser.py',496),
+  ('standard_item -> integerdecl','standard_item',1,'p_standard_item','parser.py',497),
+  ('standard_item -> realdecl','standard_item',1,'p_standard_item','parser.py',498),
+  ('standard_item -> declassign','standard_item',1,'p_standard_item','parser.py',499),
+  ('standard_item -> parameterdecl','standard_item',1,'p_standard_item','parser.py',500),
+  ('standard_item -> localparamdecl','standard_item',1,'p_standard_item','parser.py',501),
+  ('standard_item -> genvardecl','standard_item',1,'p_standard_item','parser.py',502),
+  ('standard_item -> assignment','standard_item',1,'p_standard_item','parser.py',503),
+  ('standard_item -> always','standard_item',1,'p_standard_item','parser.py',504),
+  ('standard_item -> always_ff','standard_item',1,'p_standard_item','parser.py',505),
+  ('standard_item -> always_comb','standard_item',1,'p_standard_item','parser.py',506),
+  ('standard_item -> always_latch','standard_item',1,'p_standard_item','parser.py',507),
+  ('standard_item -> initial','standard_item',1,'p_standard_item','parser.py',508),
+  ('standard_item -> instance','standard_item',1,'p_standard_item','parser.py',509),
+  ('standard_item -> function','standard_item',1,'p_standard_item','parser.py',510),
+  ('standard_item -> task','standard_item',1,'p_standard_item','parser.py',511),
+  ('standard_item -> pragma','standard_item',1,'p_standard_item','parser.py',512),
+  ('decl -> sigtypes declnamelist SEMICOLON','decl',3,'p_decl','parser.py',572),
+  ('decl -> sigtypes width declnamelist SEMICOLON','decl',4,'p_decl_width','parser.py',581),
+  ('declnamelist -> declnamelist COMMA declname','declnamelist',3,'p_declnamelist','parser.py',590),
+  ('declnamelist -> declname','declnamelist',1,'p_declnamelist_one','parser.py',595),
+  ('declname -> ID','declname',1,'p_declname','parser.py',600),
+  ('declname -> ID dimensions','declname',2,'p_declarray','parser.py',605),
+  ('declassign -> sigtypes declassign_element SEMICOLON','declassign',3,'p_declassign','parser.py',655),
+  ('declassign -> sigtypes width declassign_element SEMICOLON','declassign',4,'p_declassign_width','parser.py',662),
+  ('declassign_element -> ID EQUALS rvalue','declassign_element',3,'p_declassign_element','parser.py',669),
+  ('declassign_element -> delays ID EQUALS delays rvalue','declassign_element',5,'p_declassign_element_delay','parser.py',676),
+  ('integerdecl -> INTEGER integernamelist SEMICOLON','integerdecl',3,'p_integerdecl','parser.py',684),
+  ('integerdecl -> INTEGER SIGNED integernamelist SEMICOLON','integerdecl',4,'p_integerdecl_signed','parser.py',696),
+  ('integernamelist -> integernamelist COMMA integername','integernamelist',3,'p_integernamelist','parser.py',708),
+  ('integernamelist -> integername','integernamelist',1,'p_integernamelist_one','parser.py',713),
+  ('integername -> ID EQUALS rvalue','integername',3,'p_integername_init','parser.py',718),
+  ('integername -> ID','integername',1,'p_integername','parser.py',723),
+  ('realdecl -> REAL realnamelist SEMICOLON','realdecl',3,'p_realdecl','parser.py',729),
+  ('realnamelist -> realnamelist COMMA realname','realnamelist',3,'p_realnamelist','parser.py',739),
+  ('realnamelist -> realname','realnamelist',1,'p_realnamelist_one','parser.py',744),
+  ('realname -> ID','realname',1,'p_realname','parser.py',749),
+  ('parameterdecl -> PARAMETER param_substitution_list SEMICOLON','parameterdecl',3,'p_parameterdecl','parser.py',755),
+  ('parameterdecl -> PARAMETER SIGNED param_substitution_list SEMICOLON','parameterdecl',4,'p_parameterdecl_signed','parser.py',762),
+  ('parameterdecl -> PARAMETER width param_substitution_list SEMICOLON','parameterdecl',4,'p_parameterdecl_width','parser.py',769),
+  ('parameterdecl -> PARAMETER SIGNED width param_substitution_list SEMICOLON','parameterdecl',5,'p_parameterdecl_signed_width','parser.py',776),
+  ('parameterdecl -> PARAMETER INTEGER param_substitution_list SEMICOLON','parameterdecl',4,'p_parameterdecl_integer','parser.py',783),
+  ('localparamdecl -> LOCALPARAM param_substitution_list SEMICOLON','localparamdecl',3,'p_localparamdecl','parser.py',790),
+  ('localparamdecl -> LOCALPARAM SIGNED param_substitution_list SEMICOLON','localparamdecl',4,'p_localparamdecl_signed','parser.py',797),
+  ('localparamdecl -> LOCALPARAM width param_substitution_list SEMICOLON','localparamdecl',4,'p_localparamdecl_width','parser.py',804),
+  ('localparamdecl -> LOCALPARAM SIGNED width param_substitution_list SEMICOLON','localparamdecl',5,'p_localparamdecl_signed_width','parser.py',811),
+  ('localparamdecl -> LOCALPARAM INTEGER param_substitution_list SEMICOLON','localparamdecl',4,'p_localparamdecl_integer','parser.py',818),
+  ('param_substitution_list -> param_substitution_list COMMA param_substitution','param_substitution_list',3,'p_param_substitution_list','parser.py',825),
+  ('param_substitution_list -> param_substitution','param_substitution_list',1,'p_param_substitution_list_one','parser.py',830),
+  ('param_substitution -> ID EQUALS rvalue','param_substitution',3,'p_param_substitution','parser.py',835),
+  ('assignment -> ASSIGN lvalue EQUALS rvalue SEMICOLON','assignment',5,'p_assignment','parser.py',840),
+  ('assignment -> ASSIGN delays lvalue EQUALS delays rvalue SEMICOLON','assignment',7,'p_assignment_delay','parser.py',845),
+  ('lpartselect -> pointer LBRACKET expression COLON expression RBRACKET','lpartselect',6,'p_lpartselect_lpointer','parser.py',851),
+  ('lpartselect -> pointer LBRACKET expression PLUSCOLON expression RBRACKET','lpartselect',6,'p_lpartselect_lpointer_plus','parser.py',856),
+  ('lpartselect -> pointer LBRACKET expression MINUSCOLON expression RBRACKET','lpartselect',6,'p_lpartselect_lpointer_minus','parser.py',861),
+  ('lpartselect -> identifier LBRACKET expression COLON expression RBRACKET','lpartselect',6,'p_lpartselect','parser.py',866),
+  ('lpartselect -> identifier LBRACKET expression PLUSCOLON expression RBRACKET','lpartselect',6,'p_lpartselect_plus','parser.py',871),
+  ('lpartselect -> identifier LBRACKET expression MINUSCOLON expression RBRACKET','lpartselect',6,'p_lpartselect_minus','parser.py',876),
+  ('lpointer -> pointer','lpointer',1,'p_lpointer','parser.py',881),
+  ('lconcat -> LBRACE lconcatlist RBRACE','lconcat',3,'p_lconcat','parser.py',886),
+  ('lconcatlist -> lconcatlist COMMA lconcat_one','lconcatlist',3,'p_lconcatlist','parser.py',891),
+  ('lconcatlist -> lconcat_one','lconcatlist',1,'p_lconcatlist_one','parser.py',896),
+  ('lconcat_one -> identifier','lconcat_one',1,'p_lconcat_one_identifier','parser.py',901),
+  ('lconcat_one -> lpartselect','lconcat_one',1,'p_lconcat_one_lpartselect','parser.py',906),
+  ('lconcat_one -> lpointer','lconcat_one',1,'p_lconcat_one_lpointer','parser.py',911),
+  ('lconcat_one -> lconcat','lconcat_one',1,'p_lconcat_one_lconcat','parser.py',916),
+  ('lvalue -> lpartselect','lvalue',1,'p_lvalue_partselect','parser.py',921),
+  ('lvalue -> lpointer','lvalue',1,'p_lvalue_pointer','parser.py',926),
+  ('lvalue -> lconcat','lvalue',1,'p_lvalue_concat','parser.py',931),
+  ('lvalue -> identifier','lvalue',1,'p_lvalue_one','parser.py',936),
+  ('rvalue -> expression','rvalue',1,'p_rvalue','parser.py',941),
+  ('expression -> MINUS expression','expression',2,'p_expression_uminus','parser.py',948),
+  ('expression -> PLUS expression','expression',2,'p_expression_uplus','parser.py',953),
+  ('expression -> LNOT expression','expression',2,'p_expression_ulnot','parser.py',958),
+  ('expression -> NOT expression','expression',2,'p_expression_unot','parser.py',963),
+  ('expression -> AND expression','expression',2,'p_expression_uand','parser.py',968),
+  ('expression -> NAND expression','expression',2,'p_expression_unand','parser.py',973),
+  ('expression -> NOR expression','expression',2,'p_expression_unor','parser.py',978),
+  ('expression -> OR expression','expression',2,'p_expression_uor','parser.py',983),
+  ('expression -> XOR expression','expression',2,'p_expression_uxor','parser.py',988),
+  ('expression -> XNOR expression','expression',2,'p_expression_uxnor','parser.py',993),
+  ('expression -> expression POWER expression','expression',3,'p_expression_power','parser.py',1000),
+  ('expression -> expression TIMES expression','expression',3,'p_expression_times','parser.py',1007),
+  ('expression -> expression DIVIDE expression','expression',3,'p_expression_div','parser.py',1012),
+  ('expression -> expression MOD expression','expression',3,'p_expression_mod','parser.py',1017),
+  ('expression -> expression PLUS expression','expression',3,'p_expression_plus','parser.py',1024),
+  ('expression -> expression MINUS expression','expression',3,'p_expression_minus','parser.py',1029),
+  ('expression -> expression LSHIFT expression','expression',3,'p_expression_sll','parser.py',1036),
+  ('expression -> expression RSHIFT expression','expression',3,'p_expression_srl','parser.py',1041),
+  ('expression -> expression LSHIFTA expression','expression',3,'p_expression_sla','parser.py',1046),
+  ('expression -> expression RSHIFTA expression','expression',3,'p_expression_sra','parser.py',1051),
+  ('expression -> expression LT expression','expression',3,'p_expression_lessthan','parser.py',1058),
+  ('expression -> expression GT expression','expression',3,'p_expression_greaterthan','parser.py',1063),
+  ('expression -> expression LE expression','expression',3,'p_expression_lesseq','parser.py',1068),
+  ('expression -> expression GE expression','expression',3,'p_expression_greatereq','parser.py',1073),
+  ('expression -> expression EQ expression','expression',3,'p_expression_eq','parser.py',1080),
+  ('expression -> expression NE expression','expression',3,'p_expression_noteq','parser.py',1085),
+  ('expression -> expression EQL expression','expression',3,'p_expression_eql','parser.py',1090),
+  ('expression -> expression NEL expression','expression',3,'p_expression_noteql','parser.py',1095),
+  ('expression -> expression AND expression','expression',3,'p_expression_And','parser.py',1102),
+  ('expression -> expression XOR expression','expression',3,'p_expression_Xor','parser.py',1107),
+  ('expression -> expression XNOR expression','expression',3,'p_expression_Xnor','parser.py',1112),
+  ('expression -> expression OR expression','expression',3,'p_expression_Or','parser.py',1119),
+  ('expression -> expression LAND expression','expression',3,'p_expression_land','parser.py',1126),
+  ('expression -> expression LOR expression','expression',3,'p_expression_lor','parser.py',1133),
+  ('expression -> expression COND expression COLON expression','expression',5,'p_expression_cond','parser.py',1140),
+  ('expression -> LPAREN expression RPAREN','expression',3,'p_expression_expr','parser.py',1146),
+  ('expression -> concat','expression',1,'p_expression_concat','parser.py',1152),
+  ('expression -> repeat','expression',1,'p_expression_repeat','parser.py',1157),
+  ('expression -> partselect','expression',1,'p_expression_partselect','parser.py',1162),
+  ('expression -> pointer','expression',1,'p_expression_pointer','parser.py',1167),
+  ('expression -> functioncall','expression',1,'p_expression_functioncall','parser.py',1172),
+  ('expression -> systemcall','expression',1,'p_expression_systemcall','parser.py',1177),
+  ('expression -> identifier','expression',1,'p_expression_id','parser.py',1182),
+  ('expression -> const_expression','expression',1,'p_expression_const','parser.py',1187),
+  ('concat -> LBRACE concatlist RBRACE','concat',3,'p_concat','parser.py',1192),
+  ('concatlist -> concatlist COMMA expression','concatlist',3,'p_concatlist','parser.py',1197),
+  ('concatlist -> expression','concatlist',1,'p_concatlist_one','parser.py',1202),
+  ('repeat -> LBRACE expression concat RBRACE','repeat',4,'p_repeat','parser.py',1207),
+  ('partselect -> identifier LBRACKET expression COLON expression RBRACKET','partselect',6,'p_partselect','parser.py',1212),
+  ('partselect -> identifier LBRACKET expression PLUSCOLON expression RBRACKET','partselect',6,'p_partselect_plus','parser.py',1217),
+  ('partselect -> identifier LBRACKET expression MINUSCOLON expression RBRACKET','partselect',6,'p_partselect_minus','parser.py',1223),
+  ('partselect -> pointer LBRACKET expression COLON expression RBRACKET','partselect',6,'p_partselect_pointer','parser.py',1229),
+  ('partselect -> pointer LBRACKET expression PLUSCOLON expression RBRACKET','partselect',6,'p_partselect_pointer_plus','parser.py',1234),
+  ('partselect -> pointer LBRACKET expression MINUSCOLON expression RBRACKET','partselect',6,'p_partselect_pointer_minus','parser.py',1240),
+  ('pointer -> identifier LBRACKET expression RBRACKET','pointer',4,'p_pointer','parser.py',1246),
+  ('pointer -> pointer LBRACKET expression RBRACKET','pointer',4,'p_pointer_pointer','parser.py',1251),
+  ('const_expression -> intnumber','const_expression',1,'p_const_expression_intnum','parser.py',1257),
+  ('const_expression -> floatnumber','const_expression',1,'p_const_expression_floatnum','parser.py',1262),
+  ('const_expression -> stringliteral','const_expression',1,'p_const_expression_stringliteral','parser.py',1267),
+  ('floatnumber -> FLOATNUMBER','floatnumber',1,'p_floatnumber','parser.py',1272),
+  ('intnumber -> INTNUMBER_DEC','intnumber',1,'p_intnumber','parser.py',1277),
+  ('intnumber -> SIGNED_INTNUMBER_DEC','intnumber',1,'p_intnumber','parser.py',1278),
+  ('intnumber -> INTNUMBER_BIN','intnumber',1,'p_intnumber','parser.py',1279),
+  ('intnumber -> SIGNED_INTNUMBER_BIN','intnumber',1,'p_intnumber','parser.py',1280),
+  ('intnumber -> INTNUMBER_OCT','intnumber',1,'p_intnumber','parser.py',1281),
+  ('intnumber -> SIGNED_INTNUMBER_OCT','intnumber',1,'p_intnumber','parser.py',1282),
+  ('intnumber -> INTNUMBER_HEX','intnumber',1,'p_intnumber','parser.py',1283),
+  ('intnumber -> SIGNED_INTNUMBER_HEX','intnumber',1,'p_intnumber','parser.py',1284),
+  ('stringliteral -> STRING_LITERAL','stringliteral',1,'p_stringliteral','parser.py',1292),
+  ('always -> ALWAYS senslist always_statement','always',3,'p_always','parser.py',1299),
+  ('always_ff -> ALWAYS_FF senslist always_statement','always_ff',3,'p_always_ff','parser.py',1304),
+  ('always_comb -> ALWAYS_COMB senslist always_statement','always_comb',3,'p_always_comb','parser.py',1309),
+  ('always_latch -> ALWAYS_LATCH senslist always_statement','always_latch',3,'p_always_latch','parser.py',1314),
+  ('senslist -> AT LPAREN edgesigs RPAREN','senslist',4,'p_sens_egde_paren','parser.py',1319),
+  ('edgesig -> POSEDGE edgesig_base','edgesig',2,'p_posedgesig','parser.py',1324),
+  ('edgesig -> NEGEDGE edgesig_base','edgesig',2,'p_negedgesig','parser.py',1329),
+  ('edgesig_base -> identifier','edgesig_base',1,'p_edgesig_base_identifier','parser.py',1334),
+  ('edgesig_base -> pointer','edgesig_base',1,'p_edgesig_base_pointer','parser.py',1339),
+  ('edgesigs -> edgesigs SENS_OR edgesig','edgesigs',3,'p_edgesigs','parser.py',1344),
+  ('edgesigs -> edgesigs COMMA edgesig','edgesigs',3,'p_edgesigs_comma','parser.py',1349),
+  ('edgesigs -> edgesig','edgesigs',1,'p_edgesigs_one','parser.py',1354),
+  ('senslist -> empty','senslist',1,'p_sens_empty','parser.py',1359),
+  ('senslist -> AT levelsig','senslist',2,'p_sens_level','parser.py',1365),
+  ('senslist -> AT LPAREN levelsigs RPAREN','senslist',4,'p_sens_level_paren','parser.py',1370),
+  ('levelsig -> levelsig_base','levelsig',1,'p_levelsig','parser.py',1375),
+  ('levelsig_base -> identifier','levelsig_base',1,'p_levelsig_base_identifier','parser.py',1380),
+  ('levelsig_base -> pointer','levelsig_base',1,'p_levelsig_base_pointer','parser.py',1385),
+  ('levelsig_base -> partselect','levelsig_base',1,'p_levelsig_base_partselect','parser.py',1390),
+  ('levelsigs -> levelsigs SENS_OR levelsig','levelsigs',3,'p_levelsigs','parser.py',1395),
+  ('levelsigs -> levelsigs COMMA levelsig','levelsigs',3,'p_levelsigs_comma','parser.py',1400),
+  ('levelsigs -> levelsig','levelsigs',1,'p_levelsigs_one','parser.py',1405),
+  ('senslist -> AT TIMES','senslist',2,'p_sens_all','parser.py',1410),
+  ('senslist -> AT LPAREN TIMES RPAREN','senslist',4,'p_sens_all_paren','parser.py',1416),
+  ('basic_statement -> if_statement','basic_statement',1,'p_basic_statement','parser.py',1422),
+  ('basic_statement -> case_statement','basic_statement',1,'p_basic_statement','parser.py',1423),
+  ('basic_statement -> casex_statement','basic_statement',1,'p_basic_statement','parser.py',1424),
+  ('basic_statement -> casez_statement','basic_statement',1,'p_basic_statement','parser.py',1425),
+  ('basic_statement -> unique_case_statement','basic_statement',1,'p_basic_statement','parser.py',1426),
+  ('basic_statement -> for_statement','basic_statement',1,'p_basic_statement','parser.py',1427),
+  ('basic_statement -> while_statement','basic_statement',1,'p_basic_statement','parser.py',1428),
+  ('basic_statement -> event_statement','basic_statement',1,'p_basic_statement','parser.py',1429),
+  ('basic_statement -> wait_statement','basic_statement',1,'p_basic_statement','parser.py',1430),
+  ('basic_statement -> forever_statement','basic_statement',1,'p_basic_statement','parser.py',1431),
+  ('basic_statement -> block','basic_statement',1,'p_basic_statement','parser.py',1432),
+  ('basic_statement -> namedblock','basic_statement',1,'p_basic_statement','parser.py',1433),
+  ('basic_statement -> parallelblock','basic_statement',1,'p_basic_statement','parser.py',1434),
+  ('basic_statement -> blocking_substitution','basic_statement',1,'p_basic_statement','parser.py',1435),
+  ('basic_statement -> nonblocking_substitution','basic_statement',1,'p_basic_statement','parser.py',1436),
+  ('basic_statement -> single_statement','basic_statement',1,'p_basic_statement','parser.py',1437),
+  ('always_statement -> basic_statement','always_statement',1,'p_always_statement','parser.py',1443),
+  ('blocking_substitution -> delays lvalue EQUALS delays rvalue SEMICOLON','blocking_substitution',6,'p_blocking_substitution','parser.py',1449),
+  ('blocking_substitution_base -> delays lvalue EQUALS delays rvalue','blocking_substitution_base',5,'p_blocking_substitution_base','parser.py',1454),
+  ('nonblocking_substitution -> delays lvalue LE delays rvalue SEMICOLON','nonblocking_substitution',6,'p_nonblocking_substitution','parser.py',1459),
+  ('delays -> DELAY LPAREN expression RPAREN','delays',4,'p_delays','parser.py',1466),
+  ('delays -> DELAY identifier','delays',2,'p_delays_identifier','parser.py',1471),
+  ('delays -> DELAY intnumber','delays',2,'p_delays_intnumber','parser.py',1476),
+  ('delays -> DELAY floatnumber','delays',2,'p_delays_floatnumber','parser.py',1482),
+  ('delays -> empty','delays',1,'p_delays_empty','parser.py',1488),
+  ('block -> BEGIN block_statements END','block',3,'p_block','parser.py',1493),
+  ('block -> BEGIN END','block',2,'p_block_empty','parser.py',1498),
+  ('block_statements -> block_statements block_statement','block_statements',2,'p_block_statements','parser.py',1503),
+  ('block_statements -> block_statement','block_statements',1,'p_block_statements_one','parser.py',1508),
+  ('block_statement -> basic_statement','block_statement',1,'p_block_statement','parser.py',1513),
+  ('namedblock -> BEGIN COLON ID namedblock_statements END','namedblock',5,'p_namedblock','parser.py',1519),
+  ('namedblock -> BEGIN COLON ID END','namedblock',4,'p_namedblock_empty','parser.py',1524),
+  ('namedblock_statements -> namedblock_statements namedblock_statement','namedblock_statements',2,'p_namedblock_statements','parser.py',1529),
+  ('namedblock_statements -> namedblock_statement','namedblock_statements',1,'p_namedblock_statements_one','parser.py',1534),
+  ('namedblock_statement -> basic_statement','namedblock_statement',1,'p_namedblock_statement','parser.py',1539),
+  ('namedblock_statement -> decl','namedblock_statement',1,'p_namedblock_statement','parser.py',1540),
+  ('namedblock_statement -> integerdecl','namedblock_statement',1,'p_namedblock_statement','parser.py',1541),
+  ('namedblock_statement -> realdecl','namedblock_statement',1,'p_namedblock_statement','parser.py',1542),
+  ('namedblock_statement -> parameterdecl','namedblock_statement',1,'p_namedblock_statement','parser.py',1543),
+  ('namedblock_statement -> localparamdecl','namedblock_statement',1,'p_namedblock_statement','parser.py',1544),
+  ('parallelblock -> FORK block_statements JOIN','parallelblock',3,'p_parallelblock','parser.py',1557),
+  ('parallelblock -> FORK JOIN','parallelblock',2,'p_parallelblock_empty','parser.py',1562),
+  ('if_statement -> IF LPAREN cond RPAREN true_statement ELSE else_statement','if_statement',7,'p_if_statement','parser.py',1568),
+  ('if_statement -> IF LPAREN cond RPAREN true_statement','if_statement',5,'p_if_statement_woelse','parser.py',1573),
+  ('if_statement -> delays IF LPAREN cond RPAREN true_statement ELSE else_statement','if_statement',8,'p_if_statement_delay','parser.py',1578),
+  ('if_statement -> delays IF LPAREN cond RPAREN true_statement','if_statement',6,'p_if_statement_woelse_delay','parser.py',1583),
+  ('cond -> expression','cond',1,'p_cond','parser.py',1588),
+  ('ifcontent_statement -> basic_statement','ifcontent_statement',1,'p_ifcontent_statement','parser.py',1593),
+  ('true_statement -> ifcontent_statement','true_statement',1,'p_true_statement','parser.py',1598),
+  ('else_statement -> ifcontent_statement','else_statement',1,'p_else_statement','parser.py',1603),
+  ('for_statement -> FOR LPAREN forpre forcond forpost RPAREN forcontent_statement','for_statement',7,'p_for_statement','parser.py',1609),
+  ('forpre -> blocking_substitution','forpre',1,'p_forpre','parser.py',1614),
+  ('forpre -> SEMICOLON','forpre',1,'p_forpre_empty','parser.py',1619),
+  ('forcond -> cond SEMICOLON','forcond',2,'p_forcond','parser.py',1624),
+  ('forcond -> SEMICOLON','forcond',1,'p_forcond_empty','parser.py',1629),
+  ('forpost -> blocking_substitution_base','forpost',1,'p_forpost','parser.py',1634),
+  ('forpost -> empty','forpost',1,'p_forpost_empty','parser.py',1639),
+  ('forcontent_statement -> basic_statement','forcontent_statement',1,'p_forcontent_statement','parser.py',1643),
+  ('while_statement -> WHILE LPAREN cond RPAREN whilecontent_statement','while_statement',5,'p_while_statement','parser.py',1649),
+  ('whilecontent_statement -> basic_statement','whilecontent_statement',1,'p_whilecontent_statement','parser.py',1654),
+  ('case_statement -> CASE LPAREN case_comp RPAREN casecontent_statements ENDCASE','case_statement',6,'p_case_statement','parser.py',1660),
+  ('casex_statement -> CASEX LPAREN case_comp RPAREN casecontent_statements ENDCASE','casex_statement',6,'p_casex_statement','parser.py',1665),
+  ('casez_statement -> CASEZ LPAREN case_comp RPAREN casecontent_statements ENDCASE','casez_statement',6,'p_casez_statement','parser.py',1670),
+  ('unique_case_statement -> UNIQUE CASE LPAREN case_comp RPAREN casecontent_statements ENDCASE','unique_case_statement',7,'p_unique_case_statement','parser.py',1675),
+  ('case_comp -> expression','case_comp',1,'p_case_comp','parser.py',1680),
+  ('casecontent_statements -> casecontent_statements casecontent_statement','casecontent_statements',2,'p_casecontent_statements','parser.py',1685),
+  ('casecontent_statements -> casecontent_statement','casecontent_statements',1,'p_casecontent_statements_one','parser.py',1690),
+  ('casecontent_statement -> casecontent_condition COLON basic_statement','casecontent_statement',3,'p_casecontent_statement','parser.py',1695),
+  ('casecontent_condition -> casecontent_condition COMMA expression','casecontent_condition',3,'p_casecontent_condition_single','parser.py',1700),
+  ('casecontent_condition -> expression','casecontent_condition',1,'p_casecontent_condition_one','parser.py',1705),
+  ('casecontent_statement -> DEFAULT COLON basic_statement','casecontent_statement',3,'p_casecontent_statement_default','parser.py',1710),
+  ('initial -> INITIAL initial_statement','initial',2,'p_initial','parser.py',1716),
+  ('initial_statement -> basic_statement','initial_statement',1,'p_initial_statement','parser.py',1721),
+  ('event_statement -> senslist SEMICOLON','event_statement',2,'p_event_statement','parser.py',1727),
+  ('wait_statement -> WAIT LPAREN cond RPAREN waitcontent_statement','wait_statement',5,'p_wait_statement','parser.py',1733),
+  ('waitcontent_statement -> basic_statement','waitcontent_statement',1,'p_waitcontent_statement','parser.py',1738),
+  ('waitcontent_statement -> SEMICOLON','waitcontent_statement',1,'p_waitcontent_statement_empty','parser.py',1743),
+  ('forever_statement -> FOREVER basic_statement','forever_statement',2,'p_forever_statement','parser.py',1749),
+  ('instance -> ID parameterlist instance_bodylist SEMICOLON','instance',4,'p_instance','parser.py',1755),
+  ('instance -> SENS_OR parameterlist instance_bodylist SEMICOLON','instance',4,'p_instance_or','parser.py',1765),
+  ('instance_bodylist -> instance_bodylist COMMA instance_body','instance_bodylist',3,'p_instance_bodylist','parser.py',1775),
+  ('instance_bodylist -> instance_body','instance_bodylist',1,'p_instance_bodylist_one','parser.py',1780),
+  ('instance_body -> ID LPAREN instance_ports RPAREN','instance_body',4,'p_instance_body','parser.py',1785),
+  ('instance_body -> ID width LPAREN instance_ports RPAREN','instance_body',5,'p_instance_body_array','parser.py',1790),
+  ('instance -> ID instance_bodylist_noname SEMICOLON','instance',3,'p_instance_noname','parser.py',1795),
+  ('instance -> SENS_OR instance_bodylist_noname SEMICOLON','instance',3,'p_instance_or_noname','parser.py',1804),
+  ('instance_bodylist_noname -> instance_bodylist_noname COMMA instance_body_noname','instance_bodylist_noname',3,'p_instance_bodylist_noname','parser.py',1813),
+  ('instance_bodylist_noname -> instance_body_noname','instance_bodylist_noname',1,'p_instance_bodylist_one_noname','parser.py',1818),
+  ('instance_body_noname -> LPAREN instance_ports RPAREN','instance_body_noname',3,'p_instance_body_noname','parser.py',1823),
+  ('parameterlist -> DELAY LPAREN param_args RPAREN','parameterlist',4,'p_parameterlist','parser.py',1828),
+  ('parameterlist -> DELAY LPAREN param_args_noname RPAREN','parameterlist',4,'p_parameterlist_noname','parser.py',1833),
+  ('parameterlist -> empty','parameterlist',1,'p_parameterlist_empty','parser.py',1838),
+  ('param_args_noname -> param_args_noname COMMA param_arg_noname','param_args_noname',3,'p_param_args_noname','parser.py',1842),
+  ('param_args_noname -> param_arg_noname','param_args_noname',1,'p_param_args_noname_one','parser.py',1847),
+  ('param_args -> param_args COMMA param_arg','param_args',3,'p_param_args','parser.py',1852),
+  ('param_args -> param_arg','param_args',1,'p_param_args_one','parser.py',1857),
+  ('param_args -> empty','param_args',1,'p_param_args_empty','parser.py',1862),
+  ('param_arg_noname -> expression','param_arg_noname',1,'p_param_arg_noname_exp','parser.py',1866),
+  ('param_arg -> DOT ID LPAREN expression RPAREN','param_arg',5,'p_param_arg_exp','parser.py',1871),
+  ('instance_ports -> instance_ports_list','instance_ports',1,'p_instance_ports','parser.py',1876),
+  ('instance_ports -> instance_ports_arg','instance_ports',1,'p_instance_ports','parser.py',1877),
+  ('instance_ports_list -> instance_ports_list COMMA instance_port_list','instance_ports_list',3,'p_instance_ports_list','parser.py',1883),
+  ('instance_ports_list -> instance_port_list','instance_ports_list',1,'p_instance_ports_list_one','parser.py',1888),
+  ('instance_ports_list -> empty','instance_ports_list',1,'p_instance_ports_list_empty','parser.py',1893),
+  ('instance_port_list -> expression','instance_port_list',1,'p_instance_port_list','parser.py',1898),
+  ('instance_ports_arg -> instance_ports_arg COMMA instance_port_arg','instance_ports_arg',3,'p_instance_ports_arg','parser.py',1903),
+  ('instance_ports_arg -> instance_port_arg','instance_ports_arg',1,'p_instance_ports_arg_one','parser.py',1908),
+  ('instance_port_arg -> DOT ID LPAREN identifier RPAREN','instance_port_arg',5,'p_instance_port_arg','parser.py',1913),
+  ('instance_port_arg -> DOT ID LPAREN expression RPAREN','instance_port_arg',5,'p_instance_port_arg_exp','parser.py',1918),
+  ('instance_port_arg -> DOT ID LPAREN RPAREN','instance_port_arg',4,'p_instance_port_arg_none','parser.py',1923),
+  ('genvardecl -> GENVAR genvarlist SEMICOLON','genvardecl',3,'p_genvardecl','parser.py',1929),
+  ('genvarlist -> genvarlist COMMA genvar','genvarlist',3,'p_genvarlist','parser.py',1934),
+  ('genvarlist -> genvar','genvarlist',1,'p_genvarlist_one','parser.py',1939),
+  ('genvar -> ID','genvar',1,'p_genvar','parser.py',1944),
+  ('generate -> GENERATE generate_items ENDGENERATE','generate',3,'p_generate','parser.py',1953),
+  ('generate_items -> empty','generate_items',1,'p_generate_items_empty','parser.py',1958),
+  ('generate_items -> generate_items generate_item','generate_items',2,'p_generate_items','parser.py',1963),
+  ('generate_items -> generate_item','generate_items',1,'p_generate_items_one','parser.py',1968),
+  ('generate_item -> standard_item','generate_item',1,'p_generate_item','parser.py',1973),
+  ('generate_item -> generate_if','generate_item',1,'p_generate_item','parser.py',1974),
+  ('generate_item -> generate_for','generate_item',1,'p_generate_item','parser.py',1975),
+  ('generate_block -> BEGIN generate_items END','generate_block',3,'p_generate_block','parser.py',1981),
+  ('generate_block -> BEGIN COLON ID generate_items END','generate_block',5,'p_generate_named_block','parser.py',1986),
+  ('generate_if -> IF LPAREN cond RPAREN gif_true_item ELSE gif_false_item','generate_if',7,'p_generate_if','parser.py',1991),
+  ('generate_if -> IF LPAREN cond RPAREN gif_true_item','generate_if',5,'p_generate_if_woelse','parser.py',1996),
+  ('gif_true_item -> generate_item','gif_true_item',1,'p_generate_if_true_item','parser.py',2001),
+  ('gif_true_item -> generate_block','gif_true_item',1,'p_generate_if_true_item','parser.py',2002),
+  ('gif_false_item -> generate_item','gif_false_item',1,'p_generate_if_false_item','parser.py',2008),
+  ('gif_false_item -> generate_block','gif_false_item',1,'p_generate_if_false_item','parser.py',2009),
+  ('generate_for -> FOR LPAREN forpre forcond forpost RPAREN generate_forcontent','generate_for',7,'p_generate_for','parser.py',2015),
+  ('generate_forcontent -> generate_item','generate_forcontent',1,'p_generate_forcontent','parser.py',2020),
+  ('generate_forcontent -> generate_block','generate_forcontent',1,'p_generate_forcontent','parser.py',2021),
+  ('systemcall -> DOLLER ID','systemcall',2,'p_systemcall_noargs','parser.py',2028),
+  ('systemcall -> DOLLER ID LPAREN sysargs RPAREN','systemcall',5,'p_systemcall','parser.py',2033),
+  ('systemcall -> DOLLER SIGNED LPAREN sysargs RPAREN','systemcall',5,'p_systemcall_signed','parser.py',2038),
+  ('sysargs -> sysargs COMMA sysarg','sysargs',3,'p_sysargs','parser.py',2043),
+  ('sysargs -> sysarg','sysargs',1,'p_sysargs_one','parser.py',2048),
+  ('sysargs -> empty','sysargs',1,'p_sysargs_empty','parser.py',2053),
+  ('sysarg -> expression','sysarg',1,'p_sysarg','parser.py',2057),
+  ('function -> FUNCTION width ID SEMICOLON function_statement ENDFUNCTION','function',6,'p_function','parser.py',2063),
+  ('function -> FUNCTION ID SEMICOLON function_statement ENDFUNCTION','function',5,'p_function_nowidth','parser.py',2068),
+  ('function -> FUNCTION INTEGER ID SEMICOLON function_statement ENDFUNCTION','function',6,'p_function_integer','parser.py',2077),
+  ('function_statement -> funcvardecls function_calc','function_statement',2,'p_function_statement','parser.py',2086),
+  ('funcvardecls -> funcvardecls funcvardecl','funcvardecls',2,'p_funcvardecls','parser.py',2091),
+  ('funcvardecls -> funcvardecl','funcvardecls',1,'p_funcvardecls_one','parser.py',2096),
+  ('funcvardecl -> decl','funcvardecl',1,'p_funcvardecl','parser.py',2101),
+  ('funcvardecl -> integerdecl','funcvardecl',1,'p_funcvardecl','parser.py',2102),
+  ('function_calc -> blocking_substitution','function_calc',1,'p_function_calc','parser.py',2113),
+  ('function_calc -> if_statement','function_calc',1,'p_function_calc','parser.py',2114),
+  ('function_calc -> for_statement','function_calc',1,'p_function_calc','parser.py',2115),
+  ('function_calc -> while_statement','function_calc',1,'p_function_calc','parser.py',2116),
+  ('function_calc -> case_statement','function_calc',1,'p_function_calc','parser.py',2117),
+  ('function_calc -> casex_statement','function_calc',1,'p_function_calc','parser.py',2118),
+  ('function_calc -> casez_statement','function_calc',1,'p_function_calc','parser.py',2119),
+  ('function_calc -> block','function_calc',1,'p_function_calc','parser.py',2120),
+  ('function_calc -> namedblock','function_calc',1,'p_function_calc','parser.py',2121),
+  ('functioncall -> identifier LPAREN func_args RPAREN','functioncall',4,'p_functioncall','parser.py',2127),
+  ('func_args -> func_args COMMA expression','func_args',3,'p_func_args','parser.py',2132),
+  ('func_args -> expression','func_args',1,'p_func_args_one','parser.py',2137),
+  ('func_args -> empty','func_args',1,'p_func_args_empty','parser.py',2142),
+  ('task -> TASK ID SEMICOLON task_statement ENDTASK','task',5,'p_task','parser.py',2147),
+  ('task_statement -> taskvardecls task_calc','task_statement',2,'p_task_statement','parser.py',2152),
+  ('taskvardecls -> taskvardecls taskvardecl','taskvardecls',2,'p_taskvardecls','parser.py',2157),
+  ('taskvardecls -> taskvardecl','taskvardecls',1,'p_taskvardecls_one','parser.py',2162),
+  ('taskvardecls -> empty','taskvardecls',1,'p_taskvardecls_empty','parser.py',2167),
+  ('taskvardecl -> decl','taskvardecl',1,'p_taskvardecl','parser.py',2171),
+  ('taskvardecl -> integerdecl','taskvardecl',1,'p_taskvardecl','parser.py',2172),
+  ('task_calc -> blocking_substitution','task_calc',1,'p_task_calc','parser.py',2183),
+  ('task_calc -> if_statement','task_calc',1,'p_task_calc','parser.py',2184),
+  ('task_calc -> for_statement','task_calc',1,'p_task_calc','parser.py',2185),
+  ('task_calc -> while_statement','task_calc',1,'p_task_calc','parser.py',2186),
+  ('task_calc -> case_statement','task_calc',1,'p_task_calc','parser.py',2187),
+  ('task_calc -> casex_statement','task_calc',1,'p_task_calc','parser.py',2188),
+  ('task_calc -> casez_statement','task_calc',1,'p_task_calc','parser.py',2189),
+  ('task_calc -> block','task_calc',1,'p_task_calc','parser.py',2190),
+  ('task_calc -> namedblock','task_calc',1,'p_task_calc','parser.py',2191),
+  ('identifier -> ID','identifier',1,'p_identifier','parser.py',2198),
+  ('identifier -> scope ID','identifier',2,'p_scope_identifier','parser.py',2203),
+  ('scope -> identifier DOT','scope',2,'p_scope','parser.py',2209),
+  ('scope -> pointer DOT','scope',2,'p_scope_pointer','parser.py',2216),
+  ('disable -> DISABLE ID','disable',2,'p_disable','parser.py',2224),
+  ('single_statement -> DELAY expression SEMICOLON','single_statement',3,'p_single_statement_delays','parser.py',2230),
+  ('single_statement -> systemcall SEMICOLON','single_statement',2,'p_single_statement_systemcall','parser.py',2236),
+  ('single_statement -> disable SEMICOLON','single_statement',2,'p_single_statement_disable','parser.py',2241),
+  ('empty -> <empty>','empty',0,'p_empty','parser.py',2263),
+]
diff --git a/mpw_precheck/precheck_logger/__init__.py b/mpw_precheck/precheck_logger/__init__.py
new file mode 100644
index 0000000..1c675fd
--- /dev/null
+++ b/mpw_precheck/precheck_logger/__init__.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# 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.
+# SPDX-License-Identifier: Apache-2.0
+
+import logging
+import logging.config
+import sys
+
+import coloredlogs
+
+
+def get_file_handler(log_path):
+    verbose_formatter = {'format': "%(asctime)s - [%(levelname)s] - %(message)s", 'datefmt': '%Y-%m-%d %H:%M:%S'}
+    file_handler = logging.FileHandler(filename=log_path, encoding='utf-8')
+    file_handler.setLevel(logging.INFO)
+    file_handler.setFormatter(logging.Formatter(verbose_formatter['format'], datefmt=verbose_formatter['datefmt']))
+    return file_handler
+
+
+def get_stream_handler(stream):
+    brief_formatter = {'format': '%(message)s'}
+    stream_handler = logging.StreamHandler(stream=stream)
+    stream_handler.setLevel(logging.INFO)
+    stream_handler.setFormatter(logging.Formatter(brief_formatter['format']))
+    return stream_handler
+
+
+def initialize_root_logger(log_path):
+    stream_handler = get_stream_handler(sys.stdout)
+    file_handler = get_file_handler(log_path)
+
+    logging.root.setLevel(logging.DEBUG)
+    logging.root.handlers.clear()
+    logging.root.addHandler(stream_handler)
+    logging.root.addHandler(file_handler)
+    coloredlogs.install(level=logging.INFO, fmt='%(message)s', stream=sys.stdout, reconfigure=True)
diff --git a/mpw_precheck/precheck_logger/__pycache__/__init__.cpython-36.pyc b/mpw_precheck/precheck_logger/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000..057884d
--- /dev/null
+++ b/mpw_precheck/precheck_logger/__pycache__/__init__.cpython-36.pyc
Binary files differ
diff --git a/mpw_precheck/run_precheck.sh b/mpw_precheck/run_precheck.sh
new file mode 100644
index 0000000..41b62b1
--- /dev/null
+++ b/mpw_precheck/run_precheck.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+python3 mpw_precheck.py --input_directory $INPUT_DIRECTORY -cr $CARAVEL_ROOT --pdk_root $PDK_ROOT $@